<?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>119064</bug_id>
          
          <creation_ts>2013-07-24 14:50:33 -0700</creation_ts>
          <short_desc>Typed arrays should be rewritten</short_desc>
          <delta_ts>2013-08-30 12:38:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>119065</dependson>
    
    <dependson>119422</dependson>
    
    <dependson>119470</dependson>
    
    <dependson>119471</dependson>
    
    <dependson>119489</dependson>
    
    <dependson>119770</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>amit</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dominic.szablewski</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>landry</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nick.diego</cc>
    
    <cc>oliver</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>rgabor</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>911425</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 14:50:33 -0700</bug_when>
    <thetext>Goals:

- Most of them should be GC-allocated

- GC should know about how much memory they use.

- They should use as little memory as possible.

- Most manipulations to them should be fast.

- It should be easy for the DFG profiling to figure out which ones you&apos;re using and how to type-check them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911436</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 14:55:47 -0700</bug_when>
    <thetext>*** Bug 119049 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911438</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 14:55:52 -0700</bug_when>
    <thetext>*** Bug 114824 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911442</commentid>
    <comment_count>3</comment_count>
      <attachid>207415</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-24 14:59:28 -0700</bug_when>
    <thetext>Created attachment 207415
it begins

This just mostly has comments for now, but it describes the general direction that I want to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911797</commentid>
    <comment_count>4</comment_count>
      <attachid>207493</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-25 16:35:17 -0700</bug_when>
    <thetext>Created attachment 207493
more

The design of the view is starting to crystalize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913989</commentid>
    <comment_count>5</comment_count>
      <attachid>207977</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-01 20:17:41 -0700</bug_when>
    <thetext>Created attachment 207977
slowly but surely...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914225</commentid>
    <comment_count>6</comment_count>
      <attachid>208037</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-02 11:43:56 -0700</bug_when>
    <thetext>Created attachment 208037
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914231</commentid>
    <comment_count>7</comment_count>
    <who name="Amit Kapadia">amit</who>
    <bug_when>2013-08-02 11:56:02 -0700</bug_when>
    <thetext>Nice! Thanks for working on this.  Out of curiosity, WTF namespace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914242</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-02 12:57:00 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Nice! Thanks for working on this.  Out of curiosity, WTF namespace?

What about it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914299</commentid>
    <comment_count>9</comment_count>
      <attachid>208049</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-02 15:21:49 -0700</bug_when>
    <thetext>Created attachment 208049
ugh so much code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914325</commentid>
    <comment_count>10</comment_count>
      <attachid>208049</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-02 16:40:49 -0700</bug_when>
    <thetext>Comment on attachment 208049
ugh so much code

I wonder if it&apos;s worth moving the implementations from WTF to JSC in advance just to cut down on the patch size?  Also wonder if it&apos;s worth bring DeferrableRefCounted and GCIncomingRefCounted in early as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914346</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-02 23:16:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 208049 [details])
&gt; I wonder if it&apos;s worth moving the implementations from WTF to JSC in advance just to cut down on the patch size?  Also wonder if it&apos;s worth bring DeferrableRefCounted and GCIncomingRefCounted in early as well

Want to do me a solid and move the array stuff into JSC/runtime? :-)

Then I&apos;ll just rebase against that.  I have my hands *so full* with just writing this stuffs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914347</commentid>
    <comment_count>12</comment_count>
      <attachid>208056</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-02 23:17:42 -0700</bug_when>
    <thetext>Created attachment 208056
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914382</commentid>
    <comment_count>13</comment_count>
      <attachid>208067</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-03 11:27:35 -0700</bug_when>
    <thetext>Created attachment 208067
slowly...

The *WORST* part of this is that the typed array spec doesn&apos;t appear to be precise enough about what happens on things like DefineOwnProperty and friends.  So, my current goal is to match Firefox.  I don&apos;t want to match what Chrome does or what WebKit used to do, because I&apos;m pretty sure what we had in our IDL and the like was devised by something resembling a random walk through the semantics universe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914418</commentid>
    <comment_count>14</comment_count>
      <attachid>208078</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-03 23:35:22 -0700</bug_when>
    <thetext>Created attachment 208078
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914471</commentid>
    <comment_count>15</comment_count>
      <attachid>208097</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-04 12:06:16 -0700</bug_when>
    <thetext>Created attachment 208097
finished the adaptors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914500</commentid>
    <comment_count>16</comment_count>
      <attachid>208108</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-04 21:11:59 -0700</bug_when>
    <thetext>Created attachment 208108
more

I think I&apos;m going to go all-out with template specialization on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914685</commentid>
    <comment_count>17</comment_count>
      <attachid>208145</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-05 14:21:53 -0700</bug_when>
    <thetext>Created attachment 208145
more!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914973</commentid>
    <comment_count>18</comment_count>
      <attachid>208221</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 15:38:59 -0700</bug_when>
    <thetext>Created attachment 208221
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915026</commentid>
    <comment_count>19</comment_count>
      <attachid>208234</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 20:32:01 -0700</bug_when>
    <thetext>Created attachment 208234
omg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915206</commentid>
    <comment_count>20</comment_count>
      <attachid>208281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-07 10:34:52 -0700</bug_when>
    <thetext>Created attachment 208281
more!!

- Got the native DataView in place.  Note that nobody in JSC or WebCore ever talks to native DataViews other than using them as a placeholder subclass of ArrayBufferView if you ask a JSArrayBufferView for its impl, so our native DataView can be super simple and all of the actual DataView functionality will ultimately be in JSDataViewPrototype.

- Started to get prototypes and constructors in place.  This is all boilerplate, but I think it&apos;ll be valuable to *not* use code generators for most of it.  It&apos;s simple stuff, but only after you actually read the code; hence, being able to read the code is super important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915546</commentid>
    <comment_count>21</comment_count>
      <attachid>208361</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-08 12:12:07 -0700</bug_when>
    <thetext>Created attachment 208361
lol so much code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915654</commentid>
    <comment_count>22</comment_count>
      <attachid>208383</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-08 17:38:29 -0700</bug_when>
    <thetext>Created attachment 208383
constructors are done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915905</commentid>
    <comment_count>23</comment_count>
      <attachid>208446</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 12:05:51 -0700</bug_when>
    <thetext>Created attachment 208446
prototypes are done

I think that all of the prototypes are implemented.

Here&apos;s what&apos;s left:

- Glue it all together on the JSC side, i.e. have JSGlobalObject actually create and install all constructors and prototypes.
- Modify JITs to use OBJECT_OFFSETOF instead of the descriptors.
- Switch WebCore to using the new things.  Most of this should be easy, except for implementing the WebCoreTypedArrayController.
- Delete all of the old implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915921</commentid>
    <comment_count>24</comment_count>
      <attachid>208450</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 13:19:49 -0700</bug_when>
    <thetext>Created attachment 208450
prototypes are really done

Forgot about JSArrayBufferPrototype/Constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915924</commentid>
    <comment_count>25</comment_count>
      <attachid>208450</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-09 13:45:16 -0700</bug_when>
    <thetext>Comment on attachment 208450
prototypes are really done

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

I&apos;m a little worried about the various unchecked arithmetic leading to buffer offsets and sizes

&gt; Source/JavaScriptCore/runtime/ArrayBufferView.h:2
&gt; +/*
&gt; + * Copyright (C) 2009, 2013 Apple Inc. All rights reserved.

Can you remove ArrayBufferView, etc as they&apos;re in JSC/runtime already, and are inflating the patch size

&gt; Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:55
&gt; +    memcpy(result-&gt;data(), array, length * sizeof(Adaptor::Type));

overflow?

&gt; Source/JavaScriptCore/runtime/JSArrayBufferView.cpp:45
&gt; +        size_t size = sizeOf(length, elementSize);

overflow

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:65
&gt; +    if (JSArrayBuffer* jsBuffer = jsDynamicCast&lt;JSArrayBuffer*&gt;(exec-&gt;argument(0))jsBuffer) {

tyop?

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:81
&gt; +        return JSValue::encode(ViewClass::create(exec-&gt;vm(), structure, buffer, offset, length));

check if offset and offset+length are in 0..byteLength? and offset+length &gt; offset.  I&apos;d actually just recommend making offset and length Checked&lt;unsigned&gt; as that means you won&apos;t have to worry about overflows

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:101
&gt; +        if (!result-&gt;set(exec, object, offset, length))

and again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915940</commentid>
    <comment_count>26</comment_count>
      <attachid>208454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 14:30:08 -0700</bug_when>
    <thetext>Created attachment 208454
global object glue is done

Also got rid of ArrayBufferViewConstructor/Prototype because it turns out that Firefox has no such things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915947</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 14:37:35 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 208450 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208450&amp;action=review
&gt; 
&gt; I&apos;m a little worried about the various unchecked arithmetic leading to buffer offsets and sizes

I&apos;m not sure we have overflow problems; comments below.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ArrayBufferView.h:2
&gt; &gt; +/*
&gt; &gt; + * Copyright (C) 2009, 2013 Apple Inc. All rights reserved.
&gt; 
&gt; Can you remove ArrayBufferView, etc as they&apos;re in JSC/runtime already, and are inflating the patch size

I will, once I get a chance to rebase.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h:55
&gt; &gt; +    memcpy(result-&gt;data(), array, length * sizeof(Adaptor::Type));
&gt; 
&gt; overflow?

Nope.  sizeof() returns size_t, and length is unsigned. Hence:

On 32-bit: if length was so big that length * sizeof(type) would overflow, then the allocation would fail.  All user-visible allocation paths have checks for this.

On 64-bit: you can&apos;t overflow a 64-bit multiplication &apos;a * b&apos; if a is at most 2^32 and b is at most 8.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSArrayBufferView.cpp:45
&gt; &gt; +        size_t size = sizeOf(length, elementSize);
&gt; 
&gt; overflow

Nope.  sizeOf() correctly casts up to size_t.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:65
&gt; &gt; +    if (JSArrayBuffer* jsBuffer = jsDynamicCast&lt;JSArrayBuffer*&gt;(exec-&gt;argument(0))jsBuffer) {
&gt; 
&gt; tyop?

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:81
&gt; &gt; +        return JSValue::encode(ViewClass::create(exec-&gt;vm(), structure, buffer, offset, length));
&gt; 
&gt; check if offset and offset+length are in 0..byteLength? and offset+length &gt; offset.  I&apos;d actually just recommend making offset and length Checked&lt;unsigned&gt; as that means you won&apos;t have to worry about overflows

Why?  ViewClass::create() does verifySubRange() and will throw the appropriate exceptions.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:101
&gt; &gt; +        if (!result-&gt;set(exec, object, offset, length))
&gt; 
&gt; and again

Why?  ViewClass::set() does validateSet() and will throw the appropriate exceptions.

Bottom line, I&apos;m strongly opposed to adding code noise everywhere to do redundant overflow checks that are already being performed, or that are totally unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916038</commentid>
    <comment_count>28</comment_count>
      <attachid>208473</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 22:41:59 -0700</bug_when>
    <thetext>Created attachment 208473
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916040</commentid>
    <comment_count>29</comment_count>
      <attachid>208474</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-09 22:58:34 -0700</bug_when>
    <thetext>Created attachment 208474
started the jit crazy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916056</commentid>
    <comment_count>30</comment_count>
      <attachid>208477</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 10:57:08 -0700</bug_when>
    <thetext>Created attachment 208477
almost done

JIT crazy is done.  Xcode build system files are almost set up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916058</commentid>
    <comment_count>31</comment_count>
      <attachid>208478</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 11:06:42 -0700</bug_when>
    <thetext>Created attachment 208478
getting there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916070</commentid>
    <comment_count>32</comment_count>
      <attachid>208482</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 14:45:34 -0700</bug_when>
    <thetext>Created attachment 208482
starting to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916075</commentid>
    <comment_count>33</comment_count>
      <attachid>208483</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 16:59:57 -0700</bug_when>
    <thetext>Created attachment 208483
jsc debug builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916076</commentid>
    <comment_count>34</comment_count>
      <attachid>208484</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 17:21:07 -0700</bug_when>
    <thetext>Created attachment 208484
starting to pass tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916077</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 17:21:59 -0700</bug_when>
    <thetext>Note, there is still a lot of WebCore carnage that will need to happen.  This currently just works in a JSC-only build.

I&apos;ll get the the WebCore side once I feel more confident that this actually works at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916079</commentid>
    <comment_count>36</comment_count>
      <attachid>208485</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-10 18:52:18 -0700</bug_when>
    <thetext>Created attachment 208485
jsc works

Wrote a bunch of tests for various typed array thingies.  It appears to all work like a charm.

Now starting work on WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916388</commentid>
    <comment_count>37</comment_count>
      <attachid>208557</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-12 13:42:33 -0700</bug_when>
    <thetext>Created attachment 208557
WebCore is starting to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916467</commentid>
    <comment_count>38</comment_count>
      <attachid>208577</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-12 17:46:33 -0700</bug_when>
    <thetext>Created attachment 208577
getting close

Made a bunch of WebCore changes to get it to build.  Not yet building though.  Still more to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916474</commentid>
    <comment_count>39</comment_count>
      <attachid>208577</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-12 18:07:02 -0700</bug_when>
    <thetext>Comment on attachment 208577
getting close

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

This is looking really good.  I do prefer the get&lt;&gt; logic

&gt; Source/JavaScriptCore/ChangeLog:44
&gt; +          wak handle (a cell and a malloc&apos;d storage vector, plus a finalizer for the

wak? weak? wack?

&gt; Source/JavaScriptCore/ChangeLog:50
&gt; +        - Typed arrays require just 4 words of overhead: Structure*, Butterfly*,
&gt; +          mode/length, void* vector. Before it was a lot more than that - remember,
&gt; +          there were five additional objects that did absolutely nothing for anybody.

nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916534</commentid>
    <comment_count>40</comment_count>
      <attachid>208592</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-12 21:44:56 -0700</bug_when>
    <thetext>Created attachment 208592
WebCore almost links</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916557</commentid>
    <comment_count>41</comment_count>
      <attachid>208594</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-12 22:56:31 -0700</bug_when>
    <thetext>Created attachment 208594
i can build WebKit debug on Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916565</commentid>
    <comment_count>42</comment_count>
      <attachid>208596</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-12 23:25:38 -0700</bug_when>
    <thetext>Created attachment 208596
builds on mac

Release now builds, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916566</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-12 23:27:53 -0700</bug_when>
    <thetext>Attachment 208596 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/TypedArrayType.h:91:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h:195:  The parameter name &quot;propertyName&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/TypedArrayType.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/TypedArrayController.h:43:  The parameter name &quot;exec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/Structure.h:237:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/ArrayBufferView.h:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:85:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:118:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/ArrayBufferView.h:187:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/GenericTypedArrayView.h:37:  The parameter name &quot;buffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:251:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/heap/Heap.h:186:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/heap/Heap.h:186:  The parameter name &quot;buffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSGlobalObject.cpp:69:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/DataView.h:37:  The parameter name &quot;buffer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/bindings/js/JSAudioContextCustom.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 27 in 147 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916572</commentid>
    <comment_count>44</comment_count>
      <attachid>208596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-12 23:35:46 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1452346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916573</commentid>
    <comment_count>45</comment_count>
      <attachid>208596</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-12 23:36:17 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1447513</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916577</commentid>
    <comment_count>46</comment_count>
      <attachid>208596</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-12 23:38:03 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1452347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916578</commentid>
    <comment_count>47</comment_count>
      <attachid>208596</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-12 23:38:30 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1447515</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916582</commentid>
    <comment_count>48</comment_count>
      <attachid>208596</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-12 23:52:45 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1447514</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916584</commentid>
    <comment_count>49</comment_count>
      <attachid>208596</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-12 23:56:51 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1451361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916586</commentid>
    <comment_count>50</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 00:00:08 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 208596 [details])
&gt; Attachment 208596 [details] did not pass mac-wk2-ews (mac-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/1451361

These failures look like the bot failed at dependency tracking.  An rm -rf WebKitBuild ought to do the trick. :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916587</commentid>
    <comment_count>51</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 00:01:41 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 208577 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208577&amp;action=review
&gt; 
&gt; This is looking really good.  I do prefer the get&lt;&gt; logic
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:44
&gt; &gt; +          wak handle (a cell and a malloc&apos;d storage vector, plus a finalizer for the
&gt; 
&gt; wak? weak? wack?

fixed this and a bunch of other typos.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:50
&gt; &gt; +        - Typed arrays require just 4 words of overhead: Structure*, Butterfly*,
&gt; &gt; +          mode/length, void* vector. Before it was a lot more than that - remember,
&gt; &gt; +          there were five additional objects that did absolutely nothing for anybody.
&gt; 
&gt; nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>916884</commentid>
    <comment_count>52</comment_count>
      <attachid>208596</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-13 14:23:15 -0700</bug_when>
    <thetext>Comment on attachment 208596
builds on mac

Attachment 208596 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1456555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917002</commentid>
    <comment_count>53</comment_count>
      <attachid>208700</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 23:05:41 -0700</bug_when>
    <thetext>Created attachment 208700
starting to pass layouttests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917003</commentid>
    <comment_count>54</comment_count>
      <attachid>208700</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-13 23:06:22 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Not ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917005</commentid>
    <comment_count>55</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-13 23:08:50 -0700</bug_when>
    <thetext>Attachment 208700 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:251:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 148 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917006</commentid>
    <comment_count>56</comment_count>
      <attachid>208700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-13 23:15:08 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1455688</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917007</commentid>
    <comment_count>57</comment_count>
      <attachid>208700</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-13 23:17:38 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1457737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917008</commentid>
    <comment_count>58</comment_count>
      <attachid>208700</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-13 23:20:17 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1458622</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917009</commentid>
    <comment_count>59</comment_count>
      <attachid>208700</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-13 23:22:38 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1457740</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917016</commentid>
    <comment_count>60</comment_count>
      <attachid>208700</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-13 23:35:45 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1447913</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917017</commentid>
    <comment_count>61</comment_count>
      <attachid>208700</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-13 23:41:16 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1448817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917018</commentid>
    <comment_count>62</comment_count>
      <attachid>208700</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-13 23:52:49 -0700</bug_when>
    <thetext>Comment on attachment 208700
starting to pass layouttests

Attachment 208700 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1437320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917024</commentid>
    <comment_count>63</comment_count>
      <attachid>208703</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 00:31:17 -0700</bug_when>
    <thetext>Created attachment 208703
and now, passing more tests than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917025</commentid>
    <comment_count>64</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-14 00:34:21 -0700</bug_when>
    <thetext>Attachment 208703 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:251:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 148 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917026</commentid>
    <comment_count>65</comment_count>
      <attachid>208703</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 00:41:05 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1461249</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917027</commentid>
    <comment_count>66</comment_count>
      <attachid>208703</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 00:42:31 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1370998</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917028</commentid>
    <comment_count>67</comment_count>
      <attachid>208703</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-14 00:42:52 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1462028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917029</commentid>
    <comment_count>68</comment_count>
      <attachid>208703</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-14 00:45:24 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1372464</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917034</commentid>
    <comment_count>69</comment_count>
      <attachid>208703</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-14 00:58:28 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1437323</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917036</commentid>
    <comment_count>70</comment_count>
      <attachid>208703</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-14 01:18:42 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1462029</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917054</commentid>
    <comment_count>71</comment_count>
      <attachid>208703</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-14 03:02:31 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

Attachment 208703 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1458663</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917093</commentid>
    <comment_count>72</comment_count>
      <attachid>208718</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-08-14 05:40:07 -0700</bug_when>
    <thetext>Created attachment 208718
Required changes for the Automake build

Here are all the changes that are required to get the GTK port building with this patch (tested with a clean build).

Most of the changes are just adding new files to the Automake build, a couple of non-trivial changes I&apos;ll point out later.

There&apos;s no need to include these changes in the main patch if you don&apos;t feel like it, as long as you can pinpoint the time of landing the patch and that time not being during the CEST night. A clean build will most likely be required on the GTK builders, so someone will have to be around either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917095</commentid>
    <comment_count>73</comment_count>
      <attachid>208718</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-08-14 05:46:50 -0700</bug_when>
    <thetext>Comment on attachment 208718
Required changes for the Automake build

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

&gt; Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp:53
&gt; -    JSDOMWrapper* wrapper = getCachedWrapper(currentWorld(exec), content);
&gt; +    JSObject* wrapper = getCachedWrapper(currentWorld(exec), content);

The mac port doesn&apos;t seem to enable TEMPLATE_ELEMENT, so this got overlooked.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:77
&gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;

Required for inlining JSValue::asCell and JSValue::decode methods. Without this, the related symbols are left undefined, causing linking failures.

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:31
&gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917239</commentid>
    <comment_count>74</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 12:45:06 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (From update of attachment 208718 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208718&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp:53
&gt; &gt; -    JSDOMWrapper* wrapper = getCachedWrapper(currentWorld(exec), content);
&gt; &gt; +    JSObject* wrapper = getCachedWrapper(currentWorld(exec), content);
&gt; 
&gt; The mac port doesn&apos;t seem to enable TEMPLATE_ELEMENT, so this got overlooked.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:77
&gt; &gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;
&gt; 
&gt; Required for inlining JSValue::asCell and JSValue::decode methods. Without this, the related symbols are left undefined, causing linking failures.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:31
&gt; &gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;
&gt; 
&gt; Ditto.

Thanks for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917240</commentid>
    <comment_count>75</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 12:45:44 -0700</bug_when>
    <thetext>(In reply to comment #73)
&gt; (From update of attachment 208718 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208718&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp:53
&gt; &gt; -    JSDOMWrapper* wrapper = getCachedWrapper(currentWorld(exec), content);
&gt; &gt; +    JSObject* wrapper = getCachedWrapper(currentWorld(exec), content);
&gt; 
&gt; The mac port doesn&apos;t seem to enable TEMPLATE_ELEMENT, so this got overlooked.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:77
&gt; &gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;

By the way, the canonical thing we&apos;ve been doing is #include &lt;runtime/Operations.h&gt;, which pulls in a bunch of critical JSC Inlines.h files.

&gt; 
&gt; Required for inlining JSValue::asCell and JSValue::decode methods. Without this, the related symbols are left undefined, causing linking failures.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:31
&gt; &gt; +#include &lt;runtime/JSCJSValueInlines.h&gt;
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917242</commentid>
    <comment_count>76</comment_count>
      <attachid>208703</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-14 12:52:02 -0700</bug_when>
    <thetext>Comment on attachment 208703
and now, passing more tests than ever!

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

r+ with gtk fix merged in

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:124
&gt; +        if (!result)
&gt; +            return JSValue::encode(jsUndefined());

Can we assert that there&apos;s an exception in flight here?

&gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h:346
&gt; +    if (!thisObject-&gt;canSetIndexQuickly(propertyName)) {
&gt; +        // Yes, really. Firefox returns without throwing anything if you store beyond
&gt; +        // the bounds.

I believe this is actually spec behavior - a lot of the indexable dom types have this sort of thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917250</commentid>
    <comment_count>77</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 13:08:32 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; (From update of attachment 208703 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208703&amp;action=review
&gt; 
&gt; r+ with gtk fix merged in
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h:124
&gt; &gt; +        if (!result)
&gt; &gt; +            return JSValue::encode(jsUndefined());
&gt; 
&gt; Can we assert that there&apos;s an exception in flight here?

Sure, I added it.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h:346
&gt; &gt; +    if (!thisObject-&gt;canSetIndexQuickly(propertyName)) {
&gt; &gt; +        // Yes, really. Firefox returns without throwing anything if you store beyond
&gt; &gt; +        // the bounds.
&gt; 
&gt; I believe this is actually spec behavior - a lot of the indexable dom types have this sort of thing

It&apos;s DOM spec, but it&apos;s not in Mozilla&apos;s JS typed array documentation.  Do you know if it&apos;s also proposed ES spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917276</commentid>
    <comment_count>78</comment_count>
      <attachid>208758</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 13:52:41 -0700</bug_when>
    <thetext>Created attachment 208758
I think all tests pass, started to work on other build systems

This patch is still r=oliver, though I still need to change the Reviewed By thingies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917317</commentid>
    <comment_count>79</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-14 16:01:39 -0700</bug_when>
    <thetext>Attachment 208758 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-invalid-arguments-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-out-of-bounds-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests.html&apos;, u&apos;LayoutTests/fast/canvas/webgl/data-view-crash-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function-expected.txt&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function.html&apos;, u&apos;LayoutTests/fast/js/constructor-length.html&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-dedicated-worker-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-shared-worker-expected.txt&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/CMakeLists.txt&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/UseJSC.cmake&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBindingsAllInOne.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;, u&apos;Source/autotools/symbols.filter&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:255:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 170 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917319</commentid>
    <comment_count>80</comment_count>
      <attachid>208758</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 16:06:21 -0700</bug_when>
    <thetext>Comment on attachment 208758
I think all tests pass, started to work on other build systems

Attachment 208758 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1461495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917324</commentid>
    <comment_count>81</comment_count>
      <attachid>208758</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-14 16:11:57 -0700</bug_when>
    <thetext>Comment on attachment 208758
I think all tests pass, started to work on other build systems

Attachment 208758 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1464222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917326</commentid>
    <comment_count>82</comment_count>
      <attachid>208758</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 16:20:17 -0700</bug_when>
    <thetext>Comment on attachment 208758
I think all tests pass, started to work on other build systems

Attachment 208758 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1452954</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917334</commentid>
    <comment_count>83</comment_count>
      <attachid>208758</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-14 16:23:58 -0700</bug_when>
    <thetext>Comment on attachment 208758
I think all tests pass, started to work on other build systems

Attachment 208758 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1459935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917344</commentid>
    <comment_count>84</comment_count>
      <attachid>208758</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-14 16:46:32 -0700</bug_when>
    <thetext>Comment on attachment 208758
I think all tests pass, started to work on other build systems

Attachment 208758 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1453997</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917394</commentid>
    <comment_count>85</comment_count>
      <attachid>208784</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 19:36:14 -0700</bug_when>
    <thetext>Created attachment 208784
almost patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917397</commentid>
    <comment_count>86</comment_count>
      <attachid>208787</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 20:06:25 -0700</bug_when>
    <thetext>Created attachment 208787
basically patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917398</commentid>
    <comment_count>87</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-08-14 20:08:05 -0700</bug_when>
    <thetext>(In reply to comment #86)
&gt; Created an attachment (id=208787) [details]
&gt; basically patch for landing

Any benchmark results yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917399</commentid>
    <comment_count>88</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 20:19:37 -0700</bug_when>
    <thetext>(In reply to comment #87)
&gt; (In reply to comment #86)
&gt; &gt; Created an attachment (id=208787) [details] [details]
&gt; &gt; basically patch for landing
&gt; 
&gt; Any benchmark results yet?

Haven&apos;t run all of the benchmarks yet because I&apos;m still writing JSRegress tests.  Here are the results of JSRegress:


Benchmark report for JSRegress on bigmac (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154064)
&quot;TypedArrays&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154064)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                       TipOfTree                TypedArrays                                    

adapt-to-double-divide                              18.6207+-0.0485     ?     18.6217+-0.0540        ?
aliased-arguments-getbyval                           0.8169+-0.0293            0.7954+-0.0198          might be 1.0270x faster
allocate-big-object                                  3.3608+-1.1360            3.3428+-1.1262        
arity-mismatch-inlining                              0.7309+-0.0222            0.7173+-0.0136          might be 1.0190x faster
array-access-polymorphic-structure                   7.4662+-1.7097            6.9955+-1.6366          might be 1.0673x faster
array-nonarray-polymorhpic-access                   54.4988+-17.4486    ?     70.4646+-27.3017       ? might be 1.2930x slower
array-with-double-add                                4.8595+-0.0131     ^      4.4604+-0.0307        ^ definitely 1.0895x faster
array-with-double-increment                          3.4526+-0.0278     ?      3.4841+-0.0837        ?
array-with-double-mul-add                            6.3111+-0.0613            6.0658+-0.2215          might be 1.0404x faster
array-with-double-sum                                6.4951+-0.0201     ?      6.5159+-0.0369        ?
array-with-int32-add-sub                             8.7282+-0.0662     ^      7.7251+-0.0256        ^ definitely 1.1298x faster
array-with-int32-or-double-sum                       6.5748+-0.0311            6.5727+-0.0271        
ArrayBuffer-Int8Array-alloc-huge-long-lived        213.9001+-1.3898     ^    185.5920+-1.6105        ^ definitely 1.1525x faster
ArrayBuffer-Int8Array-alloc-large-long-lived       167.1645+-2.0905     ^    112.5971+-1.0925        ^ definitely 1.4846x faster
ArrayBuffer-Int8Array-alloc-long-lived-buffer      123.8969+-5.2077     ^     69.6711+-8.9834        ^ definitely 1.7783x faster
ArrayBuffer-Int8Array-alloc-long-lived              86.6391+-4.7214     ^     35.9230+-3.3515        ^ definitely 2.4118x faster
ArrayBuffer-Int8Array-alloc                         82.6284+-4.5231     ^     32.2971+-3.3759        ^ definitely 2.5584x faster
big-int-mul                                          3.9310+-0.0291            3.9086+-0.0234        
boolean-test                                         3.6109+-0.0304            3.5808+-0.0148        
branch-fold                                          3.9313+-0.0400            3.8880+-0.0187          might be 1.0111x faster
cast-int-to-double                                  11.7287+-0.0459           11.7000+-0.0619        
cell-argument                                       12.1147+-0.1945     ?     12.2797+-0.2198        ? might be 1.0136x slower
cfg-simplify                                         3.1320+-0.0328            3.1282+-0.0247        
cmpeq-obj-to-obj-other                              10.7285+-0.1109           10.5279+-0.1552          might be 1.0190x faster
constant-test                                        7.1215+-0.0663            7.0692+-0.0558        
delay-tear-off-arguments-strictmode                  2.6659+-0.0315     ?      2.6805+-0.0300        ?
direct-arguments-getbyval                            0.6839+-0.0233            0.6549+-0.0065          might be 1.0444x faster
double-pollution-getbyval                            8.8932+-0.0387     ?      8.9555+-0.0363        ?
double-pollution-putbyoffset                         5.4031+-0.4915     ?      5.4265+-0.5217        ?
empty-string-plus-int                               11.5085+-0.2067     ?     11.5151+-0.2381        ?
external-arguments-getbyval                          1.9239+-0.1340     ?      1.9321+-0.1360        ?
external-arguments-putbyval                          3.0468+-0.2406     ?      3.0628+-0.2588        ?
Float32Array-matrix-mult                            12.7405+-0.6335     ^      5.9165+-0.1776        ^ definitely 2.1534x faster
fold-double-to-int                                  20.8748+-0.0785     ?     21.0941+-0.3167        ? might be 1.0105x slower
function-dot-apply                                   2.5081+-0.0320     ?      2.5162+-0.0239        ?
function-test                                        4.0868+-0.0503            3.9933+-0.0657          might be 1.0234x faster
get-by-id-chain-from-try-block                       5.5896+-0.1098     ?      5.5971+-0.1122        ?
get-by-id-proto-or-self                             19.0509+-0.3221           19.0373+-0.3309        
get-by-id-self-or-proto                             19.1106+-0.3219     ?     19.2181+-0.2988        ?
HashMap-put-get-iterate-keys                        36.6813+-0.5588           36.5520+-0.5118        
HashMap-put-get-iterate                             45.2546+-0.8527           44.4569+-0.8553          might be 1.0179x faster
HashMap-string-put-get-iterate                      51.9022+-1.0700           50.6803+-0.3332          might be 1.0241x faster
imul-double-only                                    14.7113+-0.5999           14.7053+-0.5902        
imul-int-only                                       12.2366+-0.1532     ?     12.2997+-0.1628        ?
imul-mixed                                          18.1586+-0.0197     ?     18.4642+-0.5929        ? might be 1.0168x slower
in-four-cases                                       21.5439+-0.0192     ?     21.5622+-0.0313        ?
in-one-case-false                                   10.0769+-0.0161           10.0690+-0.0157        
in-one-case-true                                    10.0631+-0.0126           10.0621+-0.0124        
in-two-cases                                        10.3830+-0.0178     ?     10.4458+-0.0613        ?
indexed-properties-in-objects                        3.4485+-0.0208     ?      3.4860+-0.0636        ? might be 1.0109x slower
inline-arguments-access                              1.1808+-0.0159     ?      1.1914+-0.0191        ?
inline-arguments-local-escape                       21.5799+-0.1127     ?     22.1931+-1.5457        ? might be 1.0284x slower
inline-get-scoped-var                                5.5548+-0.0625     ?      5.6020+-0.0481        ?
inlined-put-by-id-transition                        12.6774+-0.2444     ?     12.7698+-0.2437        ?
int-or-other-abs-then-get-by-val                     7.6149+-0.1028     ?      7.6263+-0.1118        ?
int-or-other-abs-zero-then-get-by-val               29.9733+-0.1294     !     30.6477+-0.2960        ! definitely 1.0225x slower
int-or-other-add-then-get-by-val                     8.5776+-0.1821     ?      8.6139+-0.1842        ?
int-or-other-add                                     8.7137+-0.0382            8.6823+-0.0426        
int-or-other-div-then-get-by-val                     5.1189+-0.0099     ?      5.1388+-0.0279        ?
int-or-other-max-then-get-by-val                     5.8247+-0.0145     ?      5.8375+-0.0231        ?
int-or-other-min-then-get-by-val                     5.8764+-0.0166     ?      5.9024+-0.0362        ?
int-or-other-mod-then-get-by-val                     5.1258+-0.2819            5.1160+-0.2926        
int-or-other-mul-then-get-by-val                     5.3807+-0.0666     ?      5.3832+-0.0683        ?
int-or-other-neg-then-get-by-val                     6.7551+-0.1551            6.7207+-0.1703        
int-or-other-neg-zero-then-get-by-val               29.8813+-0.1200     !     30.7214+-0.2695        ! definitely 1.0281x slower
int-or-other-sub-then-get-by-val                     8.6125+-0.1856            8.5884+-0.1675        
int-or-other-sub                                     6.7468+-0.0319     ?      6.7731+-0.0376        ?
int-overflow-local                                   9.7688+-0.0574            9.7248+-0.0328        
Int16Array-bubble-sort                              82.4311+-1.1673     ^     39.6341+-0.0537        ^ definitely 2.0798x faster
Int16Array-load-int-mul                              1.6623+-0.0275            1.6620+-0.0226        
Int32Array-alloc-huge-long-lived                   757.4855+-5.2911     ^    639.8586+-13.3216       ^ definitely 1.1838x faster
Int32Array-alloc-huge                              697.2204+-4.6194     ^    661.1345+-7.0446        ^ definitely 1.0546x faster
Int32Array-alloc-large-long-lived                 1943.0547+-17.8922    ^    872.3223+-6.3777        ^ definitely 2.2275x faster
Int32Array-alloc-large                              42.5805+-0.9357     ^     39.6919+-0.6536        ^ definitely 1.0728x faster
Int32Array-alloc-long-lived                       1734.8021+-11.2321    ^    156.6020+-1.4759        ^ definitely 11.0778x faster
Int32Array-alloc                                   146.3680+-5.5937     ^     14.1430+-2.4187        ^ definitely 10.3492x faster
Int32Array-Int8Array-view-alloc                     45.4261+-2.1609     ^     20.9682+-1.6990        ^ definitely 2.1664x faster
Int8Array-load                                       5.6516+-0.0095     ^      3.9993+-0.0345        ^ definitely 1.4131x faster
integer-divide                                      12.6468+-0.0203     ?     12.6543+-0.0174        ?
integer-modulo                                       1.5729+-0.0248     ?      1.5751+-0.0158        ?
make-indexed-storage                                 3.9005+-0.4760     ?      3.9572+-0.5036        ? might be 1.0146x slower
make-rope-cse                                       14.3240+-2.3263           13.9001+-2.5814          might be 1.0305x faster
marsaglia                                          431.0035+-0.3600     ?    431.3984+-0.5997        ?
method-on-number                                    20.4147+-0.2598     ?     20.7468+-0.6967        ? might be 1.0163x slower
negative-zero-divide                                 0.2756+-0.0108            0.2755+-0.0069        
negative-zero-modulo                                 0.2667+-0.0117            0.2662+-0.0094        
negative-zero-negate                                 0.2532+-0.0128     ?      0.2552+-0.0104        ?
nested-function-parsing-random                     330.0756+-10.2378    ?    344.3963+-10.1378       ? might be 1.0434x slower
nested-function-parsing                             48.0258+-3.1809     ?     48.1729+-3.1465        ?
new-array-buffer-dead                                3.2005+-0.0791     ?      3.2685+-0.0990        ? might be 1.0213x slower
new-array-buffer-push                               12.4981+-2.0215           12.4667+-1.9960        
new-array-dead                                      23.4881+-0.1057           23.4483+-0.0344        
new-array-push                                      10.4484+-1.7883           10.3062+-1.7511          might be 1.0138x faster
number-test                                          3.5279+-0.0174     ?      3.5295+-0.0215        ?
object-closure-call                                  8.2809+-1.3401            7.4378+-0.8786          might be 1.1134x faster
object-test                                          3.9752+-0.0544     ^      3.7677+-0.0212        ^ definitely 1.0551x faster
poly-stricteq                                       75.0332+-0.1438     !     76.3957+-1.1700        ! definitely 1.0182x slower
polymorphic-structure                               17.5335+-0.4360           17.4594+-0.0883        
polyvariant-monomorphic-get-by-id                   10.3139+-0.0201           10.3133+-0.0129        
put-by-val-large-index-blank-indexing-type          13.5361+-2.6712           13.5187+-2.6086        
rare-osr-exit-on-local                              16.6915+-0.1198           16.5888+-0.0272        
register-pressure-from-osr                          25.9460+-0.0547           25.9277+-0.0193        
simple-activation-demo                              28.6525+-0.2228           28.6214+-0.1854        
slow-array-profile-convergence                       3.8457+-0.2141     ?      3.9242+-0.1590        ? might be 1.0204x slower
slow-convergence                                     2.9434+-0.0224     ?      2.9569+-0.0174        ?
sparse-conditional                                   1.0682+-0.0155     ?      1.0836+-0.0221        ? might be 1.0144x slower
splice-to-remove                                    40.3405+-0.1705     ^     39.3793+-0.1029        ^ definitely 1.0244x faster
string-concat-object                                 4.3391+-1.1594            4.2052+-1.2092          might be 1.0318x faster
string-concat-pair-object                            4.2576+-1.1830            4.1789+-1.2264          might be 1.0188x faster
string-concat-pair-simple                           17.1096+-0.7523           17.0714+-0.5794        
string-concat-simple                                17.0518+-0.7672     ?     17.0632+-0.4804        ?
string-cons-repeat                                  14.1581+-1.0026           12.8138+-0.9174          might be 1.1049x faster
string-cons-tower                                   14.5581+-0.8413           13.0936+-0.9127          might be 1.1118x faster
string-equality                                     35.9899+-0.0358     ?     36.1712+-0.2742        ?
string-get-by-val-big-char                          14.1794+-0.1814     !     14.6283+-0.1413        ! definitely 1.0317x slower
string-get-by-val-out-of-bounds-insane               4.4204+-0.0853     ^      4.2301+-0.0997        ^ definitely 1.0450x faster
string-get-by-val-out-of-bounds                      3.8174+-0.0137            3.8099+-0.0136        
string-get-by-val                                    3.3236+-0.0364     ?      3.3614+-0.0401        ? might be 1.0114x slower
string-hash                                          2.1732+-0.0362            2.1635+-0.0275        
string-long-ident-equality                          31.7176+-0.3897           31.6703+-0.3787        
string-repeat-arith                                 42.5467+-1.6037     ^     39.5945+-0.2429        ^ definitely 1.0746x faster
string-sub                                          81.6218+-2.6221           79.1164+-0.5086          might be 1.0317x faster
string-test                                          3.5134+-0.0254            3.4926+-0.0217        
string-var-equality                                 59.5890+-0.5972           59.2934+-0.0593        
structure-hoist-over-transitions                     3.2614+-0.5337            3.2458+-0.5189        
switch-char-constant                                 2.7506+-0.0086     ?      2.7629+-0.0350        ?
switch-char                                          6.6288+-0.0650            6.5698+-0.0087        
switch-constant                                     11.1570+-2.2347     ?     11.1966+-2.2764        ?
switch-string-basic-big-var                         23.0633+-1.1740           21.8061+-1.4759          might be 1.0577x faster
switch-string-basic-big                             19.6221+-1.2529     ?     21.5853+-1.3551        ? might be 1.1001x slower
switch-string-basic-var                             17.9945+-0.2592           17.9882+-0.2618        
switch-string-basic                                 18.7130+-1.4782           17.5558+-0.4710          might be 1.0659x faster
switch-string-big-length-tower-var                  24.9517+-0.5256           24.3747+-0.0541          might be 1.0237x faster
switch-string-length-tower-var                      18.8031+-0.0628     ?     18.8127+-0.0858        ?
switch-string-length-tower                          14.5849+-0.0578     ?     14.6524+-0.1530        ?
switch-string-short                                 14.4762+-0.0130     ?     14.5384+-0.0562        ?
switch                                              16.8100+-2.3355           16.4160+-2.4434          might be 1.0240x faster
tear-off-arguments-simple                            1.8968+-0.0580            1.8651+-0.0293          might be 1.0170x faster
tear-off-arguments                                   2.8884+-0.0656            2.8757+-0.0188        
temporal-structure                                  17.4522+-0.0517           17.4333+-0.0477        
to-int32-boolean                                    18.1188+-0.0177     ?     18.1889+-0.0648        ?
undefined-test                                       3.6725+-0.0323     ?      3.7154+-0.0420        ? might be 1.0117x slower

&lt;arithmetic&gt;                                        60.5770+-0.4271     ^     37.8105+-0.1895        ^ definitely 1.6021x faster
&lt;geometric&gt; *                                       11.3306+-0.1465     ^     10.4026+-0.1034        ^ definitely 1.0892x faster
&lt;harmonic&gt;                                           3.9930+-0.0693            3.9376+-0.0558          might be 1.0141x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917422</commentid>
    <comment_count>89</comment_count>
      <attachid>208791</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 22:38:22 -0700</bug_when>
    <thetext>Created attachment 208791
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917423</commentid>
    <comment_count>90</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-14 22:41:33 -0700</bug_when>
    <thetext>Attachment 208791 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-invalid-arguments-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-out-of-bounds-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests.html&apos;, u&apos;LayoutTests/fast/canvas/webgl/data-view-crash-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function-expected.txt&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function.html&apos;, u&apos;LayoutTests/fast/js/constructor-length.html&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-dedicated-worker-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-shared-worker-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc.js&apos;, u&apos;LayoutTests/platform/mac/fast/js/constructor-length-expected.txt&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/heap/WeakInlines.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/CMakeLists.txt&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/UseJSC.cmake&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBindingsAllInOne.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;, u&apos;Source/autotools/symbols.filter&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:255:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 211 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917425</commentid>
    <comment_count>91</comment_count>
      <attachid>208791</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 22:50:59 -0700</bug_when>
    <thetext>Comment on attachment 208791
rebased

Attachment 208791 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1464318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917429</commentid>
    <comment_count>92</comment_count>
      <attachid>208791</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-14 23:02:34 -0700</bug_when>
    <thetext>Comment on attachment 208791
rebased

Attachment 208791 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1468137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917435</commentid>
    <comment_count>93</comment_count>
      <attachid>208791</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-14 23:35:08 -0700</bug_when>
    <thetext>Comment on attachment 208791
rebased

Attachment 208791 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1464322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917437</commentid>
    <comment_count>94</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 23:45:47 -0700</bug_when>
    <thetext>This appears to be a 1% speed-up on Octane.


Benchmark report for SunSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, and DSP on bigmac (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154087)
&quot;TypedArrays&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154087)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used
1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing.
Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                             TipOfTree                TypedArrays                                    
SunSpider:
   3d-cube                                                 6.2510+-0.2367            6.1073+-0.2644          might be 1.0235x faster
   3d-morph                                                6.9834+-0.0348     ?      6.9946+-0.0579        ?
   3d-raytrace                                             8.0387+-0.2436            7.7322+-0.1207          might be 1.0396x faster
   access-binary-trees                                     2.2434+-0.3014            2.1595+-0.3117          might be 1.0388x faster
   access-fannkuch                                         6.4115+-0.0774     ?      6.4445+-0.0800        ?
   access-nbody                                            3.3291+-0.0152     ?      3.3359+-0.0162        ?
   access-nsieve                                           4.1479+-0.0572     ?      4.1630+-0.0657        ?
   bitops-3bit-bits-in-byte                                1.4842+-0.0154            1.4802+-0.0075        
   bitops-bits-in-byte                                     5.5462+-0.0705            5.5423+-0.0586        
   bitops-bitwise-and                                      2.2925+-0.0256            2.2788+-0.0283        
   bitops-nsieve-bits                                      3.8377+-0.0177     !      3.8755+-0.0201        ! definitely 1.0099x slower
   controlflow-recursive                                   2.3914+-0.0151     ?      2.4006+-0.0057        ?
   crypto-aes                                              4.8419+-0.2855            4.6192+-0.2930          might be 1.0482x faster
   crypto-md5                                              2.6136+-0.0237     ?      2.6590+-0.0435        ? might be 1.0173x slower
   crypto-sha1                                             2.3774+-0.0308            2.3720+-0.0131        
   date-format-tofte                                      10.8987+-0.9207           10.8265+-0.8408        
   date-format-xparb                                       7.4958+-0.6223            7.3716+-0.5713          might be 1.0169x faster
   math-cordic                                             3.2480+-0.0121            3.2343+-0.0154        
   math-partial-sums                                       8.6216+-0.0199     ?      8.6611+-0.0260        ?
   math-spectral-norm                                      2.3505+-0.0244            2.3431+-0.0148        
   regexp-dna                                             10.7306+-0.4742           10.6671+-0.4649        
   string-base64                                           5.2536+-0.4802            5.2137+-0.4704        
   string-fasta                                           10.1048+-0.2206     ?     10.1816+-0.3344        ?
   string-tagcloud                                        12.0342+-0.1430     ?     12.1335+-0.2249        ?
   string-unpack-code                                     26.2446+-0.3451           26.0543+-0.3384        
   string-validate-input                                   7.4186+-0.2431     ?      7.4500+-0.2891        ?

   &lt;arithmetic&gt; *                                          6.4304+-0.1327            6.3962+-0.1237          might be 1.0053x faster
   &lt;geometric&gt;                                             5.0987+-0.0886            5.0703+-0.0816          might be 1.0056x faster
   &lt;harmonic&gt;                                              4.1319+-0.0610            4.1084+-0.0618          might be 1.0057x faster

                                                             TipOfTree                TypedArrays                                    
V8Spider:
   crypto                                                 67.9702+-0.4523           67.8836+-0.3255        
   deltablue                                              85.1183+-1.0679     ?     85.2560+-0.7206        ?
   earley-boyer                                           60.0741+-0.4410           59.6739+-0.4235        
   raytrace                                               38.2987+-4.4309           37.9268+-4.4281        
   regexp                                                 85.1383+-0.2907           84.9382+-0.4428        
   richards                                               93.7347+-1.0393     ?     94.6229+-1.6516        ?
   splay                                                  51.0414+-2.9116     ?     51.5860+-2.8457        ? might be 1.0107x slower

   &lt;arithmetic&gt;                                           68.7680+-0.5544     ?     68.8410+-0.7151        ? might be 1.0011x slower
   &lt;geometric&gt; *                                          65.7829+-0.8370     ?     65.8009+-0.9708        ? might be 1.0003x slower
   &lt;harmonic&gt;                                             62.5044+-1.2796           62.4616+-1.4108          might be 1.0007x faster

                                                             TipOfTree                TypedArrays                                    
Octane and V8v7:
   encrypt                                                0.39844+-0.00027    ?     0.39918+-0.00053       ?
   decrypt                                                7.19208+-0.01526    ?     7.19222+-0.01662       ?
   deltablue                                     x2       0.49976+-0.00415    ?     0.50102+-0.00510       ?
   earley                                                 0.75696+-0.00511          0.75652+-0.00536       
   boyer                                                 10.50856+-0.03643    ?    10.56691+-0.03706       ?
   raytrace                                      x2       3.70227+-0.05456          3.69667+-0.04317       
   regexp                                        x2      26.48711+-0.08800    ^    26.30619+-0.07248       ^ definitely 1.0069x faster
   richards                                      x2       0.25766+-0.00297          0.25678+-0.00335       
   splay                                         x2       0.58294+-0.03516          0.57384+-0.02723         might be 1.0158x faster
   navier-stokes                                 x2       9.03660+-0.00635          9.02859+-0.00481       
   closure                                                0.33752+-0.00892    ?     0.34117+-0.00991       ? might be 1.0108x slower
   jquery                                                 3.97610+-0.46614    ?     4.03538+-0.48137       ? might be 1.0149x slower
   gbemu                                         x2     125.03621+-8.12776        113.56989+-4.23769         might be 1.1010x faster
   mandreel                                      x2     161.23457+-0.42011    ?   161.68010+-0.97286       ?
   pdfjs                                         x2      86.18659+-0.41630    ^    83.48369+-0.39707       ^ definitely 1.0324x faster
   box2d                                         x2      30.19059+-0.20024         30.16436+-0.19765       

V8v7:
   &lt;arithmetic&gt;                                           6.24929+-0.01075          6.22756+-0.01291         might be 1.0035x faster
   &lt;geometric&gt; *                                          2.05364+-0.01343          2.04821+-0.01364         might be 1.0027x faster
   &lt;harmonic&gt;                                             0.79525+-0.00841          0.79278+-0.00719         might be 1.0031x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                          34.98455+-0.62923    ^    33.91591+-0.30904       ^ definitely 1.0315x faster
   &lt;geometric&gt; *                                          6.17531+-0.05512          6.11276+-0.03014         might be 1.0102x faster
   &lt;harmonic&gt;                                             1.10805+-0.01036          1.10661+-0.00865         might be 1.0013x faster

                                                             TipOfTree                TypedArrays                                    
Kraken:
   ai-astar                                               431.403+-4.416            430.965+-4.881         
   audio-beat-detection                                   207.185+-2.952      ?     209.120+-2.710         ?
   audio-dft                                              260.147+-1.515            259.143+-2.059         
   audio-fft                                              120.842+-0.332      ?     121.095+-0.189         ?
   audio-oscillator                                       209.054+-1.329            208.549+-0.877         
   imaging-darkroom                                       243.308+-0.565      ?     243.569+-0.672         ?
   imaging-desaturate                                     130.882+-0.288      ?     131.196+-0.140         ?
   imaging-gaussian-blur                                  333.160+-0.259      ?     334.319+-2.478         ?
   json-parse-financial                                    64.452+-0.358      !      65.227+-0.219         ! definitely 1.0120x slower
   json-stringify-tinderbox                                86.871+-0.568      ?      87.093+-0.365         ?
   stanford-crypto-aes                                     90.002+-1.582      ?      90.216+-1.376         ?
   stanford-crypto-ccm                                     98.003+-5.411      ?     103.731+-4.487         ? might be 1.0584x slower
   stanford-crypto-pbkdf2                                 221.359+-1.531      ?     223.116+-0.804         ?
   stanford-crypto-sha256-iterative                       105.977+-0.416            105.899+-0.332         

   &lt;arithmetic&gt; *                                         185.903+-0.535      ?     186.660+-0.495         ? might be 1.0041x slower
   &lt;geometric&gt;                                            159.972+-0.621      ?     161.042+-0.554         ? might be 1.0067x slower
   &lt;harmonic&gt;                                             138.367+-0.773      ?     139.653+-0.709         ? might be 1.0093x slower

                                                             TipOfTree                TypedArrays                                    
JSBench:
   amazon                                                  8.5000+-0.3318            8.3333+-0.3128          might be 1.0200x faster
   facebook                                               33.0833+-0.5720     ?     33.2500+-0.4789        ?
   google                                                 57.8333+-0.7583           57.5000+-0.7420        
   twitter                                                 8.2500+-0.2874            8.1667+-0.2473          might be 1.0102x faster
   yahoo                                                   3.0833+-0.1834     ?      3.2500+-0.2874        ? might be 1.0541x slower

   &lt;arithmetic&gt; *                                         22.1500+-0.1544           22.1000+-0.2267          might be 1.0023x faster
   &lt;geometric&gt;                                            13.2683+-0.1785     ?     13.3194+-0.2754        ? might be 1.0039x slower
   &lt;harmonic&gt;                                              8.1649+-0.2473     ?      8.3272+-0.3756        ? might be 1.0199x slower

                                                             TipOfTree                TypedArrays                                    
JSRegress:
   adapt-to-double-divide                                 18.6218+-0.0392           18.5887+-0.0216        
   aliased-arguments-getbyval                              0.7870+-0.0170     ?      0.7882+-0.0179        ?
   allocate-big-object                                     3.4139+-1.1717            3.4027+-1.1753        
   arity-mismatch-inlining                                 0.7125+-0.0140            0.6966+-0.0175          might be 1.0228x faster
   array-access-polymorphic-structure                      8.0716+-1.8948            7.5693+-1.7764          might be 1.0664x faster
   array-nonarray-polymorhpic-access                      46.6111+-0.0671           46.5517+-0.0886        
   array-with-double-add                                   4.8745+-0.0155     ^      4.4718+-0.0204        ^ definitely 1.0900x faster
   array-with-double-increment                             3.4660+-0.0387     ?      3.5172+-0.0779        ? might be 1.0148x slower
   array-with-double-mul-add                               6.2911+-0.0316            6.1696+-0.2057          might be 1.0197x faster
   array-with-double-sum                                   6.4932+-0.0232     ?      6.4974+-0.0116        ?
   array-with-int32-add-sub                                8.7371+-0.0127     ^      7.7161+-0.0258        ^ definitely 1.1323x faster
   array-with-int32-or-double-sum                          6.5804+-0.0211            6.5658+-0.0150        
   ArrayBuffer-Int8Array-alloc-huge-long-lived           212.0261+-3.3540     ^    187.2535+-2.2455        ^ definitely 1.1323x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived          167.2429+-2.5083     ^    113.6580+-1.3095        ^ definitely 1.4715x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer         125.4030+-5.1678     ^     70.8387+-9.0263        ^ definitely 1.7703x faster
   ArrayBuffer-Int8Array-alloc-long-lived                 87.5109+-4.8329     ^     36.1309+-3.4588        ^ definitely 2.4220x faster
   ArrayBuffer-Int8Array-alloc                            83.2798+-4.7164     ^     32.5161+-3.6613        ^ definitely 2.5612x faster
   big-int-mul                                             3.9283+-0.0272     ?      3.9587+-0.0319        ?
   boolean-test                                            3.5846+-0.0088     ?      3.5894+-0.0299        ?
   branch-fold                                             3.9047+-0.0282            3.8936+-0.0220        
   cast-int-to-double                                     11.6746+-0.0355           11.6670+-0.0374        
   cell-argument                                          12.1835+-0.2079     ?     12.2547+-0.2317        ?
   cfg-simplify                                            3.1254+-0.0241            3.1154+-0.0109        
   cmpeq-obj-to-obj-other                                 10.7020+-0.1788           10.5551+-0.1069          might be 1.0139x faster
   constant-test                                           7.0071+-0.0652     ?      7.0874+-0.0609        ? might be 1.0115x slower
   delay-tear-off-arguments-strictmode                     2.6614+-0.0237            2.6508+-0.0155        
   direct-arguments-getbyval                               0.6608+-0.0185            0.6519+-0.0081          might be 1.0138x faster
   double-pollution-getbyval                               8.8913+-0.0218     ?      8.9106+-0.0407        ?
   double-pollution-putbyoffset                            5.4398+-0.5409     ?      5.4444+-0.5213        ?
   empty-string-plus-int                                  11.4921+-0.2459     ?     11.5313+-0.2680        ?
   external-arguments-getbyval                             1.9575+-0.1484            1.9356+-0.1481          might be 1.0113x faster
   external-arguments-putbyval                             3.2963+-0.2756            3.1659+-0.2706          might be 1.0412x faster
   Float32Array-matrix-mult                               12.9912+-0.7388     ^      5.9282+-0.2129        ^ definitely 2.1914x faster
   fold-double-to-int                                     20.9447+-0.1231     ?     21.2938+-0.3562        ? might be 1.0167x slower
   function-dot-apply                                      2.4919+-0.0256     ?      2.5012+-0.0188        ?
   function-test                                           4.0617+-0.0890            4.0227+-0.1063        
   get-by-id-chain-from-try-block                          5.5937+-0.0978     ?      5.6999+-0.1088        ? might be 1.0190x slower
   get-by-id-proto-or-self                                18.9892+-0.3202     ?     19.2094+-0.3859        ? might be 1.0116x slower
   get-by-id-self-or-proto                                19.1168+-0.3296           18.9434+-0.3555        
   HashMap-put-get-iterate-keys                           36.2487+-0.5127     ?     36.7913+-0.5728        ? might be 1.0150x slower
   HashMap-put-get-iterate                                44.3550+-0.5191     ?     44.6123+-0.5781        ?
   HashMap-string-put-get-iterate                         52.0163+-0.9880           50.5651+-0.7122          might be 1.0287x faster
   imul-double-only                                       14.4424+-0.0227           14.4382+-0.0113        
   imul-int-only                                          12.1462+-0.0293           12.1313+-0.0500        
   imul-mixed                                             18.4368+-0.5947           18.1982+-0.0215          might be 1.0131x faster
   in-four-cases                                          21.5305+-0.0293     ?     21.6125+-0.1003        ?
   in-one-case-false                                      10.0808+-0.0193     ?     10.0909+-0.0309        ?
   in-one-case-true                                       10.1213+-0.0836           10.0949+-0.0399        
   in-two-cases                                           10.4624+-0.0615           10.4322+-0.0443        
   indexed-properties-in-objects                           3.4474+-0.0305            3.4208+-0.0095        
   inline-arguments-access                                 1.1941+-0.0369     ?      1.2084+-0.0417        ? might be 1.0120x slower
   inline-arguments-local-escape                          21.9831+-0.1620     ?     23.1122+-2.0424        ? might be 1.0514x slower
   inline-get-scoped-var                                   5.5985+-0.0783     ?      5.6003+-0.0505        ?
   inlined-put-by-id-transition                           12.7700+-0.2326     ?     12.8635+-0.1004        ?
   int-or-other-abs-then-get-by-val                        7.5304+-0.0601     ?      7.5638+-0.0441        ?
   int-or-other-abs-zero-then-get-by-val                  30.0458+-0.0460     !     31.0349+-0.2906        ! definitely 1.0329x slower
   int-or-other-add-then-get-by-val                        8.4431+-0.0530            8.3969+-0.0121        
   int-or-other-add                                        8.7144+-0.0582     ?      8.7519+-0.0702        ?
   int-or-other-div-then-get-by-val                        5.3887+-0.2537     ?      5.3928+-0.2589        ?
   int-or-other-max-then-get-by-val                        6.4220+-0.5289            6.4140+-0.5253        
   int-or-other-min-then-get-by-val                        6.4002+-0.4807     ?      6.4117+-0.4893        ?
   int-or-other-mod-then-get-by-val                        4.8085+-0.0163     ?      4.8261+-0.0171        ?
   int-or-other-mul-then-get-by-val                        5.3269+-0.0455            5.3202+-0.0250        
   int-or-other-neg-then-get-by-val                        6.5671+-0.0424            6.5345+-0.0350        
   int-or-other-neg-zero-then-get-by-val                  29.9282+-0.1290     !     31.0306+-0.3044        ! definitely 1.0368x slower
   int-or-other-sub-then-get-by-val                        8.4101+-0.0139     ?      8.4429+-0.0437        ?
   int-or-other-sub                                        6.7161+-0.0132     ?      6.7176+-0.0135        ?
   int-overflow-local                                      9.7295+-0.0135     ?      9.7427+-0.0533        ?
   Int16Array-bubble-sort                                 85.1152+-1.9548     ^     39.6199+-0.0658        ^ definitely 2.1483x faster
   Int16Array-load-int-mul                                 1.6628+-0.0252            1.6551+-0.0227        
   Int32Array-alloc-huge-long-lived                      756.9791+-6.7742     ^    650.9599+-11.5928       ^ definitely 1.1629x faster
   Int32Array-alloc-huge                                 705.9069+-5.3935     ^    667.5928+-7.6962        ^ definitely 1.0574x faster
   Int32Array-alloc-large-long-lived                    1965.3684+-20.7746    ^    889.1096+-7.2274        ^ definitely 2.2105x faster
   Int32Array-alloc-large                                 43.4948+-0.8742     ^     40.4284+-0.8851        ^ definitely 1.0758x faster
   Int32Array-alloc-long-lived                          1750.5047+-26.1221    ^    163.2590+-9.9305        ^ definitely 10.7223x faster
   Int32Array-alloc                                      149.6996+-4.7802     ^     14.0697+-2.4468        ^ definitely 10.6398x faster
   Int32Array-Int8Array-view-alloc                        45.6574+-2.3792     ^     21.1499+-1.8222        ^ definitely 2.1588x faster
   Int8Array-load                                          5.7753+-0.1335     ^      3.9879+-0.0207        ^ definitely 1.4482x faster
   integer-divide                                         12.6490+-0.0385           12.6366+-0.0128        
   integer-modulo                                          1.5700+-0.0184     ?      1.5956+-0.0237        ? might be 1.0163x slower
   make-indexed-storage                                    3.8905+-0.5329     ?      3.9680+-0.5424        ? might be 1.0199x slower
   make-rope-cse                                          14.5386+-2.3942           14.1975+-2.6004          might be 1.0240x faster
   marsaglia                                             431.2244+-0.3367          431.1197+-0.3176        
   method-on-number                                       20.2879+-0.2537     !     21.0010+-0.3611        ! definitely 1.0352x slower
   negative-zero-divide                                    0.2881+-0.0203            0.2843+-0.0099          might be 1.0132x faster
   negative-zero-modulo                                    0.2772+-0.0101     ?      0.3004+-0.0201        ? might be 1.0838x slower
   negative-zero-negate                                    0.2633+-0.0098            0.2624+-0.0083        
   nested-function-parsing-random                        329.8905+-10.7228    ?    345.7725+-10.3490       ? might be 1.0481x slower
   nested-function-parsing                                48.1851+-3.5680     ?     48.2747+-3.3156        ?
   new-array-buffer-dead                                   3.2521+-0.1102     ?      3.2686+-0.1058        ?
   new-array-buffer-push                                  12.6585+-2.0526           12.5213+-2.2895          might be 1.0110x faster
   new-array-dead                                         23.5475+-0.1058           23.4676+-0.0911        
   new-array-push                                         10.4420+-1.6622     ?     10.7602+-1.8167        ? might be 1.0305x slower
   number-test                                             3.5301+-0.0135     ?      3.5350+-0.0110        ?
   object-closure-call                                     8.2812+-1.3468            7.8351+-1.1757          might be 1.0569x faster
   object-test                                             4.0031+-0.0990     ^      3.8122+-0.0376        ^ definitely 1.0501x faster
   poly-stricteq                                          82.3791+-16.1214          76.5391+-1.4586          might be 1.0763x faster
   polymorphic-structure                                  17.3781+-0.0559     ?     17.3819+-0.0468        ?
   polyvariant-monomorphic-get-by-id                      10.3453+-0.0661           10.3102+-0.0143        
   put-by-val-large-index-blank-indexing-type             13.5079+-2.6590     ?     13.6214+-2.6120        ?
   rare-osr-exit-on-local                                 16.6172+-0.0463     ?     16.6480+-0.0614        ?
   register-pressure-from-osr                             25.9386+-0.0397           25.9278+-0.0284        
   simple-activation-demo                                 28.6253+-0.2166           28.6045+-0.2014        
   slow-array-profile-convergence                          3.7628+-0.1730     ?      3.8956+-0.1741        ? might be 1.0353x slower
   slow-convergence                                        3.0577+-0.0550     ^      2.9491+-0.0327        ^ definitely 1.0368x faster
   sparse-conditional                                      1.0893+-0.0233            1.0651+-0.0131          might be 1.0227x faster
   splice-to-remove                                       39.7849+-0.5703           39.2220+-0.1061          might be 1.0144x faster
   string-concat-object                                    4.3383+-1.2100     ?      4.6176+-1.3338        ? might be 1.0644x slower
   string-concat-pair-object                               4.3113+-1.2248            4.2256+-1.2377          might be 1.0203x faster
   string-concat-pair-simple                              17.0281+-0.6977           16.9927+-0.6445        
   string-concat-simple                                   17.0298+-0.6391     ?     17.2452+-0.6886        ? might be 1.0126x slower
   string-cons-repeat                                     13.9103+-0.9049           12.7003+-0.9178          might be 1.0953x faster
   string-cons-tower                                      14.6446+-0.8374           13.2887+-0.9104          might be 1.1020x faster
   string-equality                                        36.2236+-0.2360           36.1027+-0.1832        
   string-get-by-val-big-char                             14.3152+-0.1840     !     14.6937+-0.0958        ! definitely 1.0264x slower
   string-get-by-val-out-of-bounds-insane                  4.3574+-0.0901            4.2520+-0.1304          might be 1.0248x faster
   string-get-by-val-out-of-bounds                         3.8219+-0.0068            3.8173+-0.0173        
   string-get-by-val                                       3.3517+-0.0602     ?      3.3711+-0.0651        ?
   string-hash                                             2.1631+-0.0321            2.1458+-0.0127        
   string-long-ident-equality                             31.6768+-0.2579           31.6531+-0.3024        
   string-repeat-arith                                    40.3457+-1.0830           39.7136+-0.3090          might be 1.0159x faster
   string-sub                                             86.5066+-10.7248          78.9589+-0.7128          might be 1.0956x faster
   string-test                                             3.5054+-0.0320     ?      3.5335+-0.0397        ?
   string-var-equality                                    59.6126+-0.5238           59.4825+-0.2869        
   structure-hoist-over-transitions                        3.2737+-0.5381     ?      3.3198+-0.5361        ? might be 1.0141x slower
   switch-char-constant                                    2.7511+-0.0111     ?      2.8004+-0.0407        ? might be 1.0179x slower
   switch-char                                             6.6245+-0.0495            6.5821+-0.0108        
   switch-constant                                        11.3750+-2.3844           11.2351+-2.2021          might be 1.0124x faster
   switch-string-basic-big-var                            22.5163+-1.6167           20.7850+-1.4235          might be 1.0833x faster
   switch-string-basic-big                                22.2406+-1.5383           20.0032+-1.1310          might be 1.1119x faster
   switch-string-basic-var                                17.8782+-0.0389     !     18.3715+-0.3327        ! definitely 1.0276x slower
   switch-string-basic                                    17.3253+-0.2963     !     19.1030+-0.9255        ! definitely 1.1026x slower
   switch-string-big-length-tower-var                     24.8804+-0.4497           24.5626+-0.4402          might be 1.0129x faster
   switch-string-length-tower-var                         19.0412+-0.2547           19.0319+-0.2706        
   switch-string-length-tower                             14.4865+-0.0121     ?     14.5114+-0.0632        ?
   switch-string-short                                    14.5415+-0.0851           14.5157+-0.0553        
   switch                                                 16.8984+-2.4232           16.7462+-2.4522        
   tear-off-arguments-simple                               1.8624+-0.0335     ?      1.8790+-0.0199        ?
   tear-off-arguments                                      2.8459+-0.0299     ?      2.8603+-0.0168        ?
   temporal-structure                                     17.4130+-0.0217     ?     17.4450+-0.0361        ?
   to-int32-boolean                                       18.1822+-0.0354           18.1623+-0.0350        
   undefined-test                                          3.6838+-0.0321            3.6796+-0.0246        

   &lt;arithmetic&gt;                                           60.9893+-0.5216     ^     38.0119+-0.2558        ^ definitely 1.6045x faster
   &lt;geometric&gt; *                                          11.3660+-0.1258     ^     10.4447+-0.1503        ^ definitely 1.0882x faster
   &lt;harmonic&gt;                                              4.0362+-0.0454            4.0091+-0.0392          might be 1.0068x faster

                                                             TipOfTree                TypedArrays                                    
DSP:
   filtrr-posterize-tint                                  36.1402+-1.3301     ?     36.6499+-1.2121        ? might be 1.0141x slower
   filtrr-tint-contrast-sat-bright                        59.5217+-0.9292     ?     59.8384+-0.8388        ?
   filtrr-tint-sat-adj-contr-mult                         71.7013+-3.4138           70.6645+-2.7056          might be 1.0147x faster
   filtrr-blur-overlay-sat-contr                         183.5070+-7.7138     ?    185.5764+-8.0348        ? might be 1.0113x slower
   filtrr-sat-blur-mult-sharpen-contr                    221.2989+-5.4902     ?    221.8971+-2.2878        ?
   filtrr-sepia-bias                                      28.2492+-2.9644     ?     28.2893+-2.9634        ?
   route9-vp8                                    x5      996.3821+-6.5457     ?   1003.4685+-6.0401        ?
   starfield                                     x5     1169.8636+-3.8198         1169.0181+-3.9057        
   bellard-jslinux                               x5     2567.4167+-13.2016    ?   2567.9167+-9.0281        ?
   zynaps-quake3                                 x5     1220.9467+-14.4890        1188.9003+-50.9376         might be 1.0270x faster
   zynaps-mandelbrot                             x5     1001.5384+-17.3698    ?   1006.9836+-5.4127        ?
   ammojs-asm-js                                 x5      226.4395+-12.3530         217.8465+-11.4206         might be 1.0394x faster
   ammojs-regular-js                             x5      210.7467+-7.9994          207.1067+-8.5635          might be 1.0176x faster

   &lt;arithmetic&gt;                                          916.2704+-3.3177          912.4175+-5.1515          might be 1.0042x faster
   &lt;geometric&gt; *                                         552.6816+-7.1982          548.1048+-6.6381          might be 1.0084x faster
   &lt;harmonic&gt;                                            240.3606+-9.4805          239.0839+-9.4347          might be 1.0053x faster

                                                             TipOfTree                TypedArrays                                    
All benchmarks:
   &lt;arithmetic&gt;                                          193.4832+-0.5957     ^    180.3086+-0.7943        ^ definitely 1.0731x faster
   &lt;geometric&gt;                                                 ERROR                     ERROR             
   &lt;harmonic&gt;                                              3.9578+-0.0293            3.9404+-0.0288          might be 1.0044x faster

                                                             TipOfTree                TypedArrays                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                        35.2409+-0.1591     ^     34.7099+-0.1978        ^ definitely 1.0153x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917438</commentid>
    <comment_count>95</comment_count>
      <attachid>208793</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-14 23:59:50 -0700</bug_when>
    <thetext>Created attachment 208793
another rebase and more qt fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917439</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-15 00:04:39 -0700</bug_when>
    <thetext>Attachment 208793 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-invalid-arguments-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-set-out-of-bounds-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/array-unit-tests.html&apos;, u&apos;LayoutTests/fast/canvas/webgl/data-view-crash-expected.txt&apos;, u&apos;LayoutTests/fast/canvas/webgl/script-tests/arraybuffer-transfer-of-control.js&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function-expected.txt&apos;, u&apos;LayoutTests/fast/dom/call-a-constructor-as-a-function.html&apos;, u&apos;LayoutTests/fast/js/constructor-length.html&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-dedicated-worker-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-expected.txt&apos;, u&apos;LayoutTests/fast/js/global-constructors-attributes-shared-worker-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-huge-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-large-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-buffer.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/ArrayBuffer-Int8Array-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-Int8Array-view-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-huge.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-large.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int32Array-alloc.html&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-huge-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-large-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived-buffer.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/ArrayBuffer-Int8Array-alloc.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-Int8Array-view-alloc.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-huge.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-large.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc.js&apos;, u&apos;LayoutTests/platform/mac/fast/js/constructor-length-expected.txt&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/array-unit-tests.html&apos;, u&apos;LayoutTests/webgl/resources/webgl_test_files/conformance/typedarrays/data-view-test.html&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/DerivedSources.make&apos;, u&apos;Source/JavaScriptCore/DerivedSources.pri&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JSCTypedArrayStubs.h&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/ByValInfo.h&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArrayMode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CopyToken.h&apos;, u&apos;Source/JavaScriptCore/heap/DeferGC.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCounted.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSet.h&apos;, u&apos;Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/heap/WeakInlines.h&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITPropertyAccess.cpp&apos;, u&apos;Source/JavaScriptCore/jsc.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/ClassInfo.h&apos;, u&apos;Source/JavaScriptCore/runtime/CommonIdentifiers.h&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/DataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Float64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/GenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/IndexingHeader.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Int8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBuffer.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSCell.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSDataViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSFloat64Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructor.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototype.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSInt8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrayPrototypes.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSTypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSUint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/Operations.h&apos;, u&apos;Source/JavaScriptCore/runtime/Options.h&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SimpleTypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayAdaptors.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayController.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayDescriptor.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrays.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint16Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint32Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8Array.h&apos;, u&apos;Source/JavaScriptCore/runtime/Uint8ClampedArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmakefile.list.am&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/CMakeLists.txt&apos;, u&apos;Source/WTF/wtf/DeferrableRefCounted.h&apos;, u&apos;Source/WTF/wtf/FlipBytes.h&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/DerivedSources.make&apos;, u&apos;Source/WebCore/DerivedSources.pri&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/DataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBuffer.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSArrayBufferView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSDataView.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/JSTypedArrays.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayController.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrayInlines.h&apos;, u&apos;Source/WebCore/ForwardingHeaders/runtime/TypedArrays.h&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Modules/webaudio/RealtimeAnalyser.h&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/UseJSC.cmake&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.vcxproj/WebCore.vcxproj&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/js/DOMWrapperWorld.h&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSArrayBufferViewHelper.h&apos;, u&apos;Source/WebCore/bindings/js/JSAudioContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBindingsAllInOne.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSBlobCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSRuleCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCSSValueCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCryptoCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMBinding.h&apos;, u&apos;Source/WebCore/bindings/js/JSDataViewCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDictionary.h&apos;, u&apos;Source/WebCore/bindings/js/JSDocumentCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSFileReaderCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLCollectionCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSHTMLTemplateElementCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSImageDataCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessageEventCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSMessagePortCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSSVGPathSegCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSStyleSheetCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSTrackCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp&apos;, u&apos;Source/WebCore/bindings/js/SerializedScriptValue.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreJSClientData.h&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.cpp&apos;, u&apos;Source/WebCore/bindings/js/WebCoreTypedArrayController.h&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGenerator.pm&apos;, u&apos;Source/WebCore/bindings/scripts/CodeGeneratorJS.pm&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.cpp&apos;, u&apos;Source/WebCore/fileapi/WebKitBlobBuilder.h&apos;, u&apos;Source/WebCore/html/canvas/ArrayBuffer.idl&apos;, u&apos;Source/WebCore/html/canvas/ArrayBufferView.idl&apos;, u&apos;Source/WebCore/html/canvas/DataView.cpp&apos;, u&apos;Source/WebCore/html/canvas/DataView.h&apos;, u&apos;Source/WebCore/html/canvas/DataView.idl&apos;, u&apos;Source/WebCore/html/canvas/Float32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Float64Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Int8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint16Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint32Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8Array.idl&apos;, u&apos;Source/WebCore/html/canvas/Uint8ClampedArray.idl&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/page/Crypto.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm&apos;, u&apos;Source/WebCore/platform/graphics/filters/FECustomFilter.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/FilterEffect.cpp&apos;, u&apos;Source/WebCore/testing/MockCDM.cpp&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp&apos;, u&apos;Source/autotools/symbols.filter&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSTypedArrays.cpp:38:  preprocessor directives (e.g., #ifdef, #define, #import) should never be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/runtime/JSGlobalObject.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:255:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 212 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917444</commentid>
    <comment_count>97</comment_count>
      <attachid>208793</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-15 00:12:37 -0700</bug_when>
    <thetext>Comment on attachment 208793
another rebase and more qt fixes

Attachment 208793 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1461633</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917445</commentid>
    <comment_count>98</comment_count>
      <attachid>208793</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-15 00:15:35 -0700</bug_when>
    <thetext>Comment on attachment 208793
another rebase and more qt fixes

Attachment 208793 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1468162</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917447</commentid>
    <comment_count>99</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 00:24:54 -0700</bug_when>
    <thetext>OK, this patch only fails to build because the bots need a clean build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917449</commentid>
    <comment_count>100</comment_count>
      <attachid>208793</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-15 00:42:26 -0700</bug_when>
    <thetext>Comment on attachment 208793
another rebase and more qt fixes

Attachment 208793 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1466213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917464</commentid>
    <comment_count>101</comment_count>
      <attachid>208793</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-15 04:00:42 -0700</bug_when>
    <thetext>Comment on attachment 208793
another rebase and more qt fixes

Attachment 208793 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/1473105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917478</commentid>
    <comment_count>102</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2013-08-15 05:42:49 -0700</bug_when>
    <thetext>(In reply to comment #99)
&gt; OK, this patch only fails to build because the bots need a clean build.

I have tried a clean Qt build and there was an error:

/home/rgabor/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp: In function &apos;QVariant JSC::Bindings::convertValueToQVariant(JSContextRef, JSValueRef, QMetaType::Type, int*, WTF::HashSet&lt;OpaqueJSValue*&gt;*, int, const OpaqueJSValue**)&apos;:
/home/rgabor/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:499:79: error: cannot convert &apos;WTF::PassRefPtr&lt;JSC::GenericTypedArrayView&lt;JSC::Uint8Adaptor&gt; &gt;&apos; to &apos;JSC::Uint8Array* {aka JSC::GenericTypedArrayView&lt;JSC::Uint8Adaptor&gt;*}&apos; in initialization

This patch fixed it:

ndex: Source/WebCore/bridge/qt/qt_runtime.cpp
===================================================================
--- Source/WebCore/bridge/qt/qt_runtime.cpp     (revision 154096)
+++ Source/WebCore/bridge/qt/qt_runtime.cpp     (working copy)
@@ -494,7 +494,7 @@
 
         case QMetaType::QByteArray: {
             if (type == RTUint8Array) {
-                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
+                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value)).get();
                 ret = QVariant(QByteArray(reinterpret_cast&lt;const char*&gt;(arr-&gt;data()), arr-&gt;length()));
                 dist = 0;
             } else {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917486</commentid>
    <comment_count>103</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-08-15 06:16:40 -0700</bug_when>
    <thetext>(In reply to comment #98)
&gt; (From update of attachment 208793 [details])
&gt; Attachment 208793 [details] did not pass qt-wk2-ews (qt-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/1468162

Filip,

I tested your final patch with Qt build,

diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
index 015bb3a..d61aff3 100644
--- a/Source/WebCore/bridge/qt/qt_runtime.cpp
+++ b/Source/WebCore/bridge/qt/qt_runtime.cpp
@@ -494,7 +494,7 @@ QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaTyp
 
         case QMetaType::QByteArray: {
             if (type == RTUint8Array) {
-                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
+                RefPtr&lt;JSC::Uint8Array&gt; arr = toUint8Array(toJS(toJS(context), value)).leakRef();
                 ret = QVariant(QByteArray(reinterpret_cast&lt;const char*&gt;(arr-&gt;data()), arr-&gt;length()));
                 dist = 0;
             } else {


A little change needed in qt_runtime.cpp :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917487</commentid>
    <comment_count>104</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-08-15 06:17:41 -0700</bug_when>
    <thetext>(In reply to comment #102)
&gt; (In reply to comment #99)
&gt; &gt; OK, this patch only fails to build because the bots need a clean build.
&gt; 
&gt; I have tried a clean Qt build and there was an error:
&gt; 
&gt; /home/rgabor/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp: In function &apos;QVariant JSC::Bindings::convertValueToQVariant(JSContextRef, JSValueRef, QMetaType::Type, int*, WTF::HashSet&lt;OpaqueJSValue*&gt;*, int, const OpaqueJSValue**)&apos;:
&gt; /home/rgabor/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:499:79: error: cannot convert &apos;WTF::PassRefPtr&lt;JSC::GenericTypedArrayView&lt;JSC::Uint8Adaptor&gt; &gt;&apos; to &apos;JSC::Uint8Array* {aka JSC::GenericTypedArrayView&lt;JSC::Uint8Adaptor&gt;*}&apos; in initialization
&gt; 
&gt; This patch fixed it:
&gt; 
&gt; ndex: Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; ===================================================================
&gt; --- Source/WebCore/bridge/qt/qt_runtime.cpp     (revision 154096)
&gt; +++ Source/WebCore/bridge/qt/qt_runtime.cpp     (working copy)
&gt; @@ -494,7 +494,7 @@
&gt; 
&gt;          case QMetaType::QByteArray: {
&gt;              if (type == RTUint8Array) {
&gt; -                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
&gt; +                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value)).get();
&gt;                  ret = QVariant(QByteArray(reinterpret_cast&lt;const char*&gt;(arr-&gt;data()), arr-&gt;length()));
&gt;                  dist = 0;
&gt;              } else {

oops! i didn&apos;t see this, sorry :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917488</commentid>
    <comment_count>105</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-08-15 06:20:51 -0700</bug_when>
    <thetext>(In reply to comment #103)
&gt; (In reply to comment #98)
&gt; &gt; (From update of attachment 208793 [details] [details])
&gt; &gt; Attachment 208793 [details] [details] did not pass qt-wk2-ews (qt-wk2):
&gt; &gt; Output: http://webkit-queues.appspot.com/results/1468162
&gt; 
&gt; Filip,
&gt; 
&gt; I tested your final patch with Qt build,
&gt; 
&gt; diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; index 015bb3a..d61aff3 100644
&gt; --- a/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; +++ b/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; @@ -494,7 +494,7 @@ QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaTyp
&gt; 
&gt;          case QMetaType::QByteArray: {
&gt;              if (type == RTUint8Array) {
&gt; -                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
&gt; +                RefPtr&lt;JSC::Uint8Array&gt; arr = toUint8Array(toJS(toJS(context), value)).leakRef();
&gt;                  ret = QVariant(QByteArray(reinterpret_cast&lt;const char*&gt;(arr-&gt;data()), arr-&gt;length()));
&gt;                  dist = 0;
&gt;              } else {
&gt; 
&gt; 
&gt; A little change needed in qt_runtime.cpp :)

RefPtr&lt;JSC::Uint8Array&gt; arr = toUint8Array(toJS(toJS(context), value));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917523</commentid>
    <comment_count>106</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 08:58:52 -0700</bug_when>
    <thetext>(In reply to comment #105)
&gt; (In reply to comment #103)
&gt; &gt; (In reply to comment #98)
&gt; &gt; &gt; (From update of attachment 208793 [details] [details] [details])
&gt; &gt; &gt; Attachment 208793 [details] [details] [details] did not pass qt-wk2-ews (qt-wk2):
&gt; &gt; &gt; Output: http://webkit-queues.appspot.com/results/1468162
&gt; &gt; 
&gt; &gt; Filip,
&gt; &gt; 
&gt; &gt; I tested your final patch with Qt build,
&gt; &gt; 
&gt; &gt; diff --git a/Source/WebCore/bridge/qt/qt_runtime.cpp b/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; &gt; index 015bb3a..d61aff3 100644
&gt; &gt; --- a/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; &gt; +++ b/Source/WebCore/bridge/qt/qt_runtime.cpp
&gt; &gt; @@ -494,7 +494,7 @@ QVariant convertValueToQVariant(JSContextRef context, JSValueRef value, QMetaTyp
&gt; &gt; 
&gt; &gt;          case QMetaType::QByteArray: {
&gt; &gt;              if (type == RTUint8Array) {
&gt; &gt; -                JSC::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
&gt; &gt; +                RefPtr&lt;JSC::Uint8Array&gt; arr = toUint8Array(toJS(toJS(context), value)).leakRef();
&gt; &gt;                  ret = QVariant(QByteArray(reinterpret_cast&lt;const char*&gt;(arr-&gt;data()), arr-&gt;length()));
&gt; &gt;                  dist = 0;
&gt; &gt;              } else {
&gt; &gt; 
&gt; &gt; 
&gt; &gt; A little change needed in qt_runtime.cpp :)
&gt; 
&gt; RefPtr&lt;JSC::Uint8Array&gt; arr = toUint8Array(toJS(toJS(context), value));

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917672</commentid>
    <comment_count>107</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 13:42:54 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/154127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917685</commentid>
    <comment_count>108</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 14:00:11 -0700</bug_when>
    <thetext>Landed 32-bit fix in http://trac.webkit.org/changeset/154129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917689</commentid>
    <comment_count>109</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 14:11:20 -0700</bug_when>
    <thetext>Landed binding test fixes in http://trac.webkit.org/changeset/154131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>917700</commentid>
    <comment_count>110</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-15 14:26:32 -0700</bug_when>
    <thetext>Test rebase and exception test cleanup in http://trac.webkit.org/changeset/154132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918959</commentid>
    <comment_count>111</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 00:34:41 -0700</bug_when>
    <thetext>*** Bug 103454 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922185</commentid>
    <comment_count>112</comment_count>
    <who name="Landry Breuil">landry</who>
    <bug_when>2013-08-28 13:58:01 -0700</bug_when>
    <thetext>This seems like a huge amount of work... but unfortunately, it seems this is causing webkitgtk 2.1.90 to fail build on OpenBSD/amd64:

Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h: In destructor &apos;JSC::GCIncomingRefCountedSet&lt;T&gt;::~GCIncomingRefCountedSet() [with T = JSC::ArrayBuffer]&apos;:
Source/JavaScriptCore/heap/Heap.cpp:270:   instantiated from here
Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h:44: error: no matching function for call to &apos;JSC::ArrayBuffer::filterIncomingReferences(bool ()(JSC::JSCell*))&apos;
./Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h:61: note: candidates are: bool JSC::GCIncomingRefCounted&lt;T&gt;::filterIncomingReferences(FilterFunctionType&amp;) [with FilterFunctionType = bool ()(JSC::JSCell*), T = JSC::ArrayBuffer]
Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h: In member function &apos;void JSC::GCIncomingRefCountedSet&lt;T&gt;::sweep() [with T = JSC::ArrayBuffer]&apos;:
Source/JavaScriptCore/heap/Heap.cpp:771:   instantiated from here
Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h:70: error: no matching function for call to &apos;JSC::ArrayBuffer::filterIncomingReferences(bool ()(JSC::JSCell*))&apos;
./Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h:61: note: candidates are: bool JSC::GCIncomingRefCounted&lt;T&gt;::filterIncomingReferences(FilterFunctionType&amp;) [with FilterFunctionType = bool ()(JSC::JSCell*), T = JSC::ArrayBuffer]
./Source/JavaScriptCore/runtime/WriteBarrier.h: In member function &apos;T** JSC::WriteBarrierBase&lt;T&gt;::slot() [with T = JSC::Structure]&apos;:
./Source/JavaScriptCore/heap/SlotVisitorInlines.h:115:   instantiated from &apos;void JSC::SlotVisitor::append(JSC::WriteBarrierBase&lt;T&gt;*) [with T = JSC::Structure]&apos;
./Source/JavaScriptCore/bytecode/ObjectAllocationProfile.h:109:   instantiated from here
./Source/JavaScriptCore/runtime/WriteBarrier.h:130: warning: dereferencing type-punned pointer will break strict-aliasing rules


2.1.3 was building fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922198</commentid>
    <comment_count>113</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-28 14:18:17 -0700</bug_when>
    <thetext>(In reply to comment #112)
&gt; This seems like a huge amount of work... but unfortunately, it seems this is causing webkitgtk 2.1.90 to fail build on OpenBSD/amd64:
&gt; 
&gt; Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h: In destructor &apos;JSC::GCIncomingRefCountedSet&lt;T&gt;::~GCIncomingRefCountedSet() [with T = JSC::ArrayBuffer]&apos;:
&gt; Source/JavaScriptCore/heap/Heap.cpp:270:   instantiated from here
&gt; Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h:44: error: no matching function for call to &apos;JSC::ArrayBuffer::filterIncomingReferences(bool ()(JSC::JSCell*))&apos;
&gt; ./Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h:61: note: candidates are: bool JSC::GCIncomingRefCounted&lt;T&gt;::filterIncomingReferences(FilterFunctionType&amp;) [with FilterFunctionType = bool ()(JSC::JSCell*), T = JSC::ArrayBuffer]
&gt; Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h: In member function &apos;void JSC::GCIncomingRefCountedSet&lt;T&gt;::sweep() [with T = JSC::ArrayBuffer]&apos;:
&gt; Source/JavaScriptCore/heap/Heap.cpp:771:   instantiated from here
&gt; Source/JavaScriptCore/heap/GCIncomingRefCountedSetInlines.h:70: error: no matching function for call to &apos;JSC::ArrayBuffer::filterIncomingReferences(bool ()(JSC::JSCell*))&apos;
&gt; ./Source/JavaScriptCore/heap/GCIncomingRefCountedInlines.h:61: note: candidates are: bool JSC::GCIncomingRefCounted&lt;T&gt;::filterIncomingReferences(FilterFunctionType&amp;) [with FilterFunctionType = bool ()(JSC::JSCell*), T = JSC::ArrayBuffer]
&gt; ./Source/JavaScriptCore/runtime/WriteBarrier.h: In member function &apos;T** JSC::WriteBarrierBase&lt;T&gt;::slot() [with T = JSC::Structure]&apos;:
&gt; ./Source/JavaScriptCore/heap/SlotVisitorInlines.h:115:   instantiated from &apos;void JSC::SlotVisitor::append(JSC::WriteBarrierBase&lt;T&gt;*) [with T = JSC::Structure]&apos;
&gt; ./Source/JavaScriptCore/bytecode/ObjectAllocationProfile.h:109:   instantiated from here
&gt; ./Source/JavaScriptCore/runtime/WriteBarrier.h:130: warning: dereferencing type-punned pointer will break strict-aliasing rules
&gt; 
&gt; 
&gt; 2.1.3 was building fine.

Some compilers have different ideas of what sort of template madness is legal.  A good start would be to tell us what compiler you&apos;re using - clang or gcc, and what version.

My first instinct is to try to get calls to filterIncomingReferences to use an explicit instantiation of FilterFunctionType.  But I don&apos;t have OpenBSD so I wouldn&apos;t be able to test that theory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923147</commentid>
    <comment_count>114</comment_count>
    <who name="Landry Breuil">landry</who>
    <bug_when>2013-08-30 12:38:45 -0700</bug_when>
    <thetext>(In reply to comment #113)
&gt; (In reply to comment #112)

&gt; &gt; 2.1.3 was building fine.
&gt; 
&gt; Some compilers have different ideas of what sort of template madness is legal.  A good start would be to tell us what compiler you&apos;re using - clang or gcc, and what version.

I knew this is unsupported, but it had been working &quot;fine&quot; so far... i&apos;m using gcc 4.2, which is what openbsd has in the basesystem. .... unless there&apos;s a workaround (which i doubt, since webkit2 requires c++11), guess i&apos;ll have to give up on that, and use 4.6 from ports, which allows me to build 2.1.90 on i386/amd64, gtk2/gtk3. sigh@toolchains..</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207415</attachid>
            <date>2013-07-24 14:59:28 -0700</date>
            <delta_ts>2013-07-25 16:35:17 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4083</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBl
ZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToK
Ky8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9p
bnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBj
b250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20g
SlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAg
RWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUg
TQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdp
ZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIg
aXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxv
dyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUg
YmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRo
ZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdo
aWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUg
YWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0
IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1v
ZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5k
IG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJl
bnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRo
ZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5n
CisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4K
K2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5
LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4g
Y29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAg
ICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFz
dFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxs
IGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyB1bnVz
ZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZworICAgIC8vIGZhc3RDYWxs
b2MoKSwgYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBkZXRlcm1p
bmVkCisgICAgLy8gZW50aXJlbHkgYnkgdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRoZSB2aWV3
IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvCisgICAgLy8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVU
eXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBz
b21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8g
Y29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcuCisgICAg
Ly8gVGhlIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3
LiBWIHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mt
d2hhdCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBu
b3Qgb3duIHRoZSB2ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207493</attachid>
            <date>2013-07-25 16:35:17 -0700</date>
            <delta_ts>2013-08-01 20:17:41 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11365</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisvLyBBIHR5cGVkIGFycmF5IHZpZXcgaXMgb3VyIHJlcHJlc2VudGF0aW9uIG9mIGEgdHlw
ZWQgYXJyYXkgb2JqZWN0IGFzIHNlZW4KKy8vIGZyb20gSmF2YVNjcmlwdC4gRm9yIGV4YW1wbGU6
CisvLworLy8gdmFyIG8gPSBuZXcgSW50OEFycmF5KDEwMCk7CisvLworLy8gSGVyZSwgJ28nIHBv
aW50cyB0byBhIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PGludDhfdD4uCisvLworLy8gVmlld3Mg
Y29udGFpbiBmaXZlIGZpZWxkczoKKy8vCisvLyAgICAgU3RydWN0dXJlKiBTICAgICAvLyBmcm9t
IEpTQ2VsbAorLy8gICAgIEJ1dHRlcmZseSogQiAgICAgLy8gZnJvbSBKU09iamVjdAorLy8gICAg
IEVsZW1lbnRUeXBlKiBWCisvLyAgICAgdWludDMyX3QgTAorLy8gICAgIFR5cGVkQXJyYXlNb2Rl
IE0KKy8vCisvLyBUaGVzZSBmaWVsZHMgdGFrZSB1cCBhIHRvdGFsIG9mIGZvdXIgcG9pbnRlci13
aWR0aCB3b3Jkcy4gRklYTUU6IE1ha2UKKy8vIGl0IHRha2UgbGVzcyB3b3JkcyEKKy8vCisvLyBC
IGlzIHVzdWFsbHkgdW51c2VkIGJ1dCBtYXkgc3RvcmVkIHNvbWUgYWRkaXRpb25hbCAib3ZlcmZs
b3ciIGRhdGEgZm9yCisvLyBvbmUgb2YgdGhlIG1vZGVzLiBWIGFsd2F5cyBwb2ludHMgdG8gdGhl
IGJhc2Ugb2YgdGhlIHR5cGVkIGFycmF5J3MgZGF0YSwKKy8vIGFuZCBtYXkgcG9pbnQgdG8gZWl0
aGVyIEdDLW1hbmFnZWQgY29waWVkIHNwYWNlLCBvciBkYXRhIGluIHRoZSBDIGhlYXA7CisvLyB3
aGljaCBvZiB0aG9zZSB0aGluZ3MgaXQgcG9pbnRzIHRvIGlzIGdvdmVybmVkIGJ5IHRoZSBtb2Rl
IGFsdGhvdWdoIGZvcgorLy8gc2ltcGxlIGFjY2Vzc2VzIHRvIHRoZSB2aWV3IHlvdSBjYW4ganVz
dCByZWFkIGZyb20gdGhlIHBvaW50ZXIgZWl0aGVyCisvLyB3YXkuIE0gc3BlY2lmaWVzIHRoZSBt
b2RlIG9mIHRoZSB2aWV3LiBMIGlzIHRoZSBsZW5ndGgsIGluIHVuaXRzIHRoYXQKKy8vIGRlcGVu
ZCBvbiB0aGUgdmlldydzIHR5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVy
ZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0
aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2lu
ZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMu
CitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJh
eS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGlu
IGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisg
ICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZh
c3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGls
bCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgdW51
c2VkLCBWIHBvaW50cyB0byBhIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcKKyAgICAvLyBmYXN0Q2Fs
bG9jKCksIGFuZCBNID0gT3ZlcnNpemVUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJt
aW5lZAorICAgIC8vIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmll
dyB3aWxsIGFkZCBhIGZpbmFsaXplciB0bworICAgIC8vIGRlbGV0ZSBWLgorICAgIE92ZXJzaXpl
VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4g
c29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRv
IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3LgorICAg
IC8vIFRoZSBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2ludHMgYmFjayB0byB0aGUgSlMgdmll
dy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcgd2hvLWtub3dz
LXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5LgorICAgIC8vIFRoZSB2aWV3IGRvZXMg
bm90IG93biB0aGUgdmVjdG9yLgorICAgIFdhc3RlZnVsVHlwZWRBcnJheSwKK307CisKKy8vIFRo
ZSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpcyB0ZW1wbGF0aXplZCBieSBhbiBBZGFwdG9yIHRo
YXQgY29udHJvbHMKKy8vIHRoZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBpdCdzIGNvbnZlcnRlZDsg
aXQgc2hvdWxkIG9iZXkgdGhlIGZvbGxvd2luZworLy8gaW50ZXJmYWNlOyBJIHVzZSBpbnQ4X3Qg
YXMgYW4gZXhhbXBsZToKKy8vCisvLyBzdHJ1Y3QgQWRhcHRvciB7CisvLyAgICAgdHlwZWRlZiBp
bnQ4X3QgVHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAg
ICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgSlNWYWx1
ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGludDhf
dCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOworCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29u
c3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVj
dGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlv
bkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgQWRhcHRvcjo6VHlwZSogdmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICBBZGFwdG9yOjpUeXBlKiBtX3Zl
Y3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2Rl
IG1fbW9kZTsKKyAgICB9OworICAgIAorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwg
Q29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgYm9vbCBj
YW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwg
bV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5
QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xl
bmd0aCk7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltpXTsKKyAgICB9CisgICAgCisgICAgZG91
YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBy
ZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7
CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisg
ICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFz
TmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRv
TmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICBtX3ZlY3RvcltpXSA9IHZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvRG91YmxlKHVuc2lnbmVkIGks
IGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFs
dWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNl
dEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorcHJp
dmF0ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUqIG1fdmVjdG9yOworICAgIHVpbnQzMl90IG1f
bGVuZ3RoOworICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNk
ZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsK
KyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOwor
ICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIGxlbmd0aCAqIHNpemVv
ZihBZGFwdG9yOjpUeXBlKSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHN0YXRpY19jYXN0
PEFkYXB0b3I6OlR5cGUqPih0ZW1wKTsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7
CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5n
dGg7IGktLTspCisgICAgICAgICAgICBtX3ZlY3RvcltpXSA9IDA7CisjZW5kaWYgLy8gVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBE
b24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gNEdCIG9uIDMyLWJpdCBz
eXN0ZW1zLgorICAgIGlmIChzaXplb2Yodm9pZCopIDwgOCAmJiBsZW5ndGggPiBVSU5UX01BWCAv
IHNpemVvZihBZGFwdG9yOjpUeXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fdmVj
dG9yID0gZmFzdENhbGxvYyhsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYg
KCFtX3ZlY3RvcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgIG1fbW9kZSA9IE92ZXJzaXplVHlwZWRBcnJheTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpDb25z
dHJ1Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7CisgICAgaWYgKCEqdGhp
cykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVjdG9yKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OkNvbnN0cnVjdGlvbkNvbnRleHQ6OmRpc293bigpCit7CisgICAgbV9zdHJ1Y3R1
cmUgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiB2bSwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQuc3RydWN0dXJl
KCkpCisgICAgLCBtX3ZlY3Rvcihjb250ZXh0LnZlY3RvcigpKQorICAgICwgbV9sZW5ndGgoY29u
dGV4dC5sZW5ndGgoKSkKKyAgICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKK3sKKyAgICBjb250
ZXh0LmRpc293bigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZmluaXNoQ3JhdGlvbihWTSYgdm0pCit7Cisg
ICAgQVNTRVJUKG1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5KTsKKyAgICBpZiAobV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAg
ICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8g
RklYTUUKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXNfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207977</attachid>
            <date>2013-08-01 20:17:41 -0700</date>
            <delta_ts>2013-08-02 11:43:56 -0700</delta_ts>
            <desc>slowly but surely...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>27020</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owogc3RydWN0IEhhc2hUYWJsZTsK
IAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk1LDYgKzk2LDkgQEAgc3RydWN0IE1ldGhvZFRh
YmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0
aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5k
V2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3KiwgRXhlY1N0YXRlKik7CisgICAgU2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OwogfTsKIAogI2RlZmluZSBD
UkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzgsNiArMTQyLDcgQEAgc3RydWN0
IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAog
ICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJy
YXlTdG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNz
IEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVy
ZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgp
IHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xl
bmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3Jk
OyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBl
ZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1
ZmZlcikgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAg
IHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7
CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVy
Zmx5KSAtIDE7CkBAIC0xMTcsNiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50
MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBv
biB0aGUgYXJyYXkgdHlwZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJl
aW5nIHRoZSBwdWJsaWNseSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAg
ICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBw
cm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBv
biB0aGlzLCBhbmQgdGhlIHR5cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAg
ICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU0FycmF5QnVmZmVyVmll
dzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRT
aXplKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKKyAg
ICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBh
bGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxl
bmd0aCAqIGVsZW1lbnRTaXplOworICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBt
X21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQor
ICAgICAgICAgICAgYXNXb3Jkc1tpXSA9IDA7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBh
IHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gNEdCIG9uIDMyLWJpdCBzeXN0ZW1zLAorICAg
IC8vIGZvciBmZWFyIHRoYXQgZmFzdENhbGxvYygpIGRvZXNuJ3QgZGVmZW5kIGFnYWluc3QgbGVu
Z3RoICogZWxlbWVudAorICAgIC8vIG92ZXJmbG93LiBJIG1lYW4sIG9mIGNvdXJzZSBpdCBwcm9i
YWJseSBkb2VzLCBidXQgc2luY2Ugbm90IGRvaW5nCisgICAgLy8gdGhpcyBjaGVjayBoYXMgaG9y
cmlmaWMgc2VjdXJpdHkgaW1wbGljYXRpb25zLCB3ZSBzaG91bGQgYmUKKyAgICAvLyBwYXJhbm9p
ZC4KKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA8IDggJiYgbGVuZ3RoID4gVUlOVF9NQVggLyBlbGVt
ZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFJlc2VydmUgc3BhY2Ugd2Ug
d2lsbCBuZWVkLCBpZiB3ZSBldmVyIG5lZWQgdG8gc2xvdyBkb3duIGFuZCB3YXN0ZQorICAgIC8v
IG1lbW9yeS4KKyAgICBJbmRleGluZ0hlYWRlciBoZWFkZXI7CisgICAgaGVhZGVyLnNldEFycmF5
QnVmZmVyKDApOworICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAs
IDAsIHRydWUsIGhlYWRlciwgMCk7CisgICAgCisgICAgbV92ZWN0b3IgPSBmYXN0Q2FsbG9jKGxl
bmd0aCwgZWxlbWVudFNpemUpOworICAgIGlmICghbV92ZWN0b3IpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6
ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0
Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7CisgICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVjdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6ZGlzb3duKCkKK3sKKyAgICBtX3N0cnVjdHVy
ZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0s
IENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0
cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52
ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUo
Y29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNz
IHNlcnZlcyB0d28gcHVycG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMg
b2YgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRl
bXBsYXRlIHBhcmFtZXRlcnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNv
cmUtdmlzaWJsZSAiSlNBcnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29k
ZSB1c2VzIHdoZW4gaXQgd2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1
ZmZlcgorLy8gICAgd2l0aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZp
ZXcuCisvLworLy8gVGhlc2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBq
dXN0IGEgbWF0dGVyIG9mIG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkg
aGF2aW5nIGFzIG11Y2ggY29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1Ympl
Y3QgdG8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBv
ZgorLy8gc2VtYW50aWNzOyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIg
b2Ygb2JleWluZyBhIGNvbnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0
IG5vdy4KKy8vCisvLyBPbmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9v
IG11Y2ggY3JhenkgaXMgdGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFi
bGUsIGRlc3BpdGUgaGF2aW5nIGEgImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgor
CisvLyBUeXBlZCBhcnJheSB2aWV3cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24g
aG93IGJpZyB0aGV5IGFyZSBhbmQKKy8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhp
bmcgdGhhdCByZXF1aXJlcyBhIHNlcGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9N
LXNwZWNpZmllZCBuZXV0ZXJpbmcgY2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7
CisgICAgLy8gU21hbGwgYW5kIGZhc3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50
cyB0byBhIHZlY3RvcgorICAgIC8vIGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0g
RmFzdFR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJl
bHkgYnkgdGhlIHZpZXcncyBsaXZlbmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAg
ICAvLyBBIGxhcmdlIHR5cGVkIGFycmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3Rl
IHRvbyBtdWNoCisgICAgLy8gbWVtb3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEg
c2xvdCB0aGF0IGNvdWxkIGhvbGQgYQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0
byBhIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0g
T3ZlcnNpemVUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBi
eQorICAgIC8vIHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZp
bmFsaXplciB0byBkZWxldGUgVi4KKyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAg
Ly8gQSB0eXBlZCBhcnJheSB0aGF0IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5k
ZXhpbmdIZWFkZXIKKyAgICAvLyBpcyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRv
IHRoZSBuYXRpdmUgYXJyYXkgYnVmZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkg
dmlldyBwb2ludHMgYmFjayB0byB0aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZl
Y3RvciBhbGxvY2F0ZWQgdXNpbmcgd2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBl
ZEFycmF5LgorICAgIC8vIFRoZSB2aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLgorICAgIFdh
c3RlZnVsVHlwZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1
ZmZlclZpZXcsIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJy
YXlCdWZmZXJWaWV3IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24g
YW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhl
IEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFs
d2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNs
YXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhp
c3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJW
aWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNp
emVMaW1pdCA9IDEwMDA7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250
ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7
CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYs
IFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpOworICAg
ICAgICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9y
OworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9t
b2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAg
SlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgCisgICAgLy8gQWxs
b2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVm
ZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vz
c2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeShFeGVjU3Rh
dGUqKTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlclZpZXcqIGltcGwoKTsgLy8gUkVMRUFTRV9BU1NF
UlRzIHRoYXQgd2UgaGF2ZSBhIG5hdGl2ZSB2aWV3LgorICAgIEFycmF5QnVmZmVyVmlldyogaW1w
bChFeGVjU3RhdGUqIGV4ZWMpOyAvLyBDcmVhdGVzIGEgbmF0aXZlIHZpZXcgaWYgdGhlcmUgaXNu
J3Qgb25lLgorICAgIHZvaWQgcmVsZWFzZUltcGwoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3Zl
Y3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBp
ZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzLCBleGVjKTsKK30KKworaW5saW5lIEFycmF5QnVm
ZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIFJFTEVBU0VfQVNTRVJU
KG1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+
aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXJWaWV3KCk7Cit9CisKK2lubGluZSBBcnJheUJ1
ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoZXhlYyk7CisgICAgcmV0dXJuIGlt
cGwoKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnJlbGVhc2VJbXBsKCkK
K3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJu
OworICAgIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlclZpZXcoKS0+
cmVsZWFzZSgpOworICAgIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5zZXRBcnJheUJ1
ZmZlclZpZXcoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNCArMjM1LDkgQEAgYm9v
bCBKU0NlbGw6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKUwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAordm9pZCBKU0NlbGw6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZp
ZXcqLCBFeGVjU3RhdGUqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Cisg
ICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyos
IEV4ZWNTdGF0ZSopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlv
biBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZv
ciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhl
cmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8K
Ky8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAg
ICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmpl
Y3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBl
ZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3Vy
IHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMh
CisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9u
YWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9p
bnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBv
aW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBo
ZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBi
eSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5
b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNp
ZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0
CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0
aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRo
ZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6Cisv
LworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAg
ICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05h
dGl2ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7Cisv
LyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRv
dWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKworcHJvdGVj
dGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4
dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIAorICAgIGJv
b2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
aSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1
bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9Cisg
ICAgCisgICAgQWRhcHRvcjo6VHlwZSBnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKHVuc2ln
bmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIG1fdmVjdG9yW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5
QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0Rv
dWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAg
SlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVy
biBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25l
ZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xl
bmd0aCk7CisgICAgICAgIG1fdmVjdG9yW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRp
dmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1v
biBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8v
IG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFw
LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSgpOworICAgIAorICAgIC8vIEFsbCBv
ZiB0aGVzZSBjYXVzZSB1cyB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICBBZGFw
dG9yOjpWaWV3VHlwZSogbmF0aXZlVmlldygpOworICAgIEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVy
KCk7CisgICAgQXJyYXlCdWZmZXIqIG5hdGl2ZUJ1ZmZlcigpOworICAgIAorcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAg
IAorICAgIEFkYXB0b3I6OlR5cGUqIG1fdmVjdG9yOworICAgIHVpbnQzMl90IG1fbGVuZ3RoOwor
ICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2
bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBBU1NFUlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6
ZVR5cGVkQXJyYXkpOworICAgIGlmIChtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAg
ICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0
aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9v
bCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKK30KKworCisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21v
ZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1
bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBl
ZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTgsNiArMjU4LDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRv
cHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJ
bml0aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBp
bml0aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVk
QXJyYXlPYnNlcnZlciA9IGFkb3B0UmVmKG5ldyBUeXBlZEFycmF5T2JzZXJ2ZXIoKSk7CiB9CiAK
IFZNOjp+Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
NTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1
bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5T2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1
ZGUgIldlYWtSYW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4K
QEAgLTM4MSw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9m
aWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJh
c2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlPYnNl
cnZlcj4gbV90eXBlZEFycmF5T2JzZXJ2ZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4
cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208037</attachid>
            <date>2013-08-02 11:43:56 -0700</date>
            <delta_ts>2013-08-02 15:21:49 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43493</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKworI2luY2x1
ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwgcmVmZXJl
bmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJvbSB0aGUgaGVhcCwg
d2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qga25vd3MgaXRzIGlu
Y29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZlIHRoZSBpbnZhcmlh
bnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8gdGhlIEdDCisvLyBo
ZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWQg
OiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgorICAgIEdDSW5jb21p
bmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDApCisgICAgeworICAg
IH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsKKyAgICAgICAgaWYg
KGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsKKyAgICB9CisgICAg
CisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgaWYgKGhhc1Np
bmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAgICAgIHJl
dHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxs
cygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2VuZXJhbGx5IG5vdCBh
IGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRoaXMKKyAgICAvLyBy
ZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIEdD
J3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjphZGRSZWZlcmVu
Y2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKik7Cisg
ICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHdlIHdpc2ggdG8g
a2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxzZSBpZiB3ZSBkb24n
dC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlmIGl0IGRvZXMgc28s
IHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2FudAorICAgIC8vIHRv
IHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGZhbHNlIHVu
bGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlzdC4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBmaWx0ZXJJbmNvbWlu
Z1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0KKyAgICAKKyAgICBi
b29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5jb2RlZFBvaW50ZXIg
JiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWluZygpIGNvbnN0IHsg
cmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2luZ2xldG9uKCkgY29u
c3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZDZWxscygpOyB9Cisg
ICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPiht
X2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQorICAgIAorICAgIFZl
Y3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxWZWN0
b3I8SlNDZWxsKj4gPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gU2lu
Z2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAvLyBTaW5nbGV0b24g
ZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBjZWxscy4KKyAg
ICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiSGVh
cC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJ
bmNvbWluZ1JlZkNvdW50ZWQ8VD46OmFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRl
ciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIHwgc2luZ2xldG9uRmxhZygpOworICAg
ICAgICBzZXRJc0RlZmVycmVkKHRydWUpOworICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKEhlYXA6Omhl
YXAoaW5jb21pbmdSZWZlcmVuY2VBdCgwKSkgPT0gSGVhcDo6aGVhcChjZWxsKSk7CisgICAgCisg
ICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9y
ID0gbmV3IFZlY3RvcjxKU0NlbGwqPigpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChzaW5nbGV0
b24oKSk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKGNlbGwpOworICAgICAgICBtX2VuY29kZWRQ
b2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmVjdG9yKTsKKyAgICAgICAgQVNTRVJU
KGhhc1ZlY3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgdmVjdG9yT2ZDZWxscygpLT5hcHBlbmQoY2VsbCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rp
b25UeXBlPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6ZmlsdGVySW5jb21pbmdSZWZl
cmVuY2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYgZmlsdGVyRnVuY3Rpb24pCit7CisgICAgaWYgKCFo
YXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZWZlcnJlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKHJlZkNvdW50KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
ICAgICAKKyAgICBBU1NFUlQoaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgCisgICAgaWYgKGhhc1Np
bmdsZXRvbigpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbihzaW5nbGV0b24oKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgbV9lbmNvZGVk
UG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAg
IHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9CisgICAgICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoZmlsdGVyRnVuY3Rpb24odmVjdG9yT2ZDZWxscygpLT5hdChpKSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5hdChpLS0pID0gdmVjdG9yT2ZD
ZWxscygpLT5sYXN0KCk7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+cmVtb3ZlTGFzdCgpOwor
ICAgIH0KKyAgICAgICAgCisgICAgaWYgKHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpID49IDIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKHZlY3Rvck9mQ2VsbHMoKS0+
aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgICAgIG1f
ZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOwor
ICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAg
ICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmVjdG9yT2ZDZWxs
cygpLT5hdCgwKSkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigp
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKKyNpbmNsdWRlICJHQ0lu
Y29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVCA9IHNvbWUgc3Vi
dHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291
bnRlZFNldCgpIHsgfQorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIAorICAg
IHZvaWQgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAg
ICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxUKj4g
bV92ZWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNl
dElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46
On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVj
dG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVm
ZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0lu
Y29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2Jq
ZWN0KQoreworICAgIGlmICghb2JqZWN0LT5hZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6c3dlZXAoKQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3Iu
bGFzdCgpOworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3Zl
QWxsKEpTQ2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwq
IGNlbGwpCit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNp
b24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFibGU7
CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdhc3Rl
TWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
R2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0VHlwZWRBcnJh
eUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hF
Q0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewog
ICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFuZFdhc3RlTWVt
b3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwKICAgICB9LCBc
CiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTMz
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1YmxpYzoKICAg
ICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
OyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyB1Lmxlbmd0
aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVmZmVyKiBhcnJh
eUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2b2lkIHNldEFy
cmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZm
ZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmlu
ZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpT
QXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGgg
KGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRo
ZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXpl
IG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAgICB9
IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJyYXlC
dWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9IHU7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVj
dGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAg
LCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7
CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBsZW5ndGggKiBlbGVtZW50U2l6ZTsKKyAgICAgICAgaWYg
KCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1f
dmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8g
c2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgIGFzV29yZHNbaV0gPSAwOworI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDRH
QiBvbiAzMi1iaXQgc3lzdGVtcywKKyAgICAvLyBmb3IgZmVhciB0aGF0IGZhc3RDYWxsb2MoKSBk
b2Vzbid0IGRlZmVuZCBhZ2FpbnN0IGxlbmd0aCAqIGVsZW1lbnQKKyAgICAvLyBvdmVyZmxvdy4g
SSBtZWFuLCBvZiBjb3Vyc2UgaXQgcHJvYmFibHkgZG9lcywgYnV0IHNpbmNlIG5vdCBkb2luZwor
ICAgIC8vIHRoaXMgY2hlY2sgaGFzIGhvcnJpZmljIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgd2Ug
c2hvdWxkIGJlCisgICAgLy8gcGFyYW5vaWQuCisgICAgaWYgKHNpemVvZih2b2lkKikgPCA4ICYm
IGxlbmd0aCA+IFVJTlRfTUFYIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBSZXNlcnZlIHNwYWNlIHdlIHdpbGwgbmVlZCwgaWYgd2UgZXZlciBuZWVkIHRvIHNs
b3cgZG93biBhbmQgd2FzdGUKKyAgICAvLyBtZW1vcnkuCisgICAgSW5kZXhpbmdIZWFkZXIgaGVh
ZGVyOworICAgIGhlYWRlci5zZXRBcnJheUJ1ZmZlcigwKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1
dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBoZWFkZXIsIDApOworICAgIAorICAg
IG1fdmVjdG9yID0gZmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKTsKKyAgICBpZiAoIW1f
dmVjdG9yKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVy
Vmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6fkNvbnN0cnVjdGlvbkNvbnRleHQoKQoreworICAg
IGlmICghKnRoaXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmYXN0RnJlZShtX3ZlY3Rv
cik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OmRp
c293bigpCit7CisgICAgbV9zdHJ1Y3R1cmUgPSAwOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6
SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQor
ICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkK
KyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0
Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQoreworICAgIGNvbnRleHQu
ZGlzb3duKCk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9
PSBPdmVyc2l6ZVR5cGVkQXJyYXkpOworICAgIGlmIChtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFy
cmF5KQorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4oY2VsbCk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5
cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAg
IGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Fy
cmF5QnVmZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZlcyB0
d28gcHVycG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRlIHBh
cmFtZXRlcnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlzaWJs
ZSAiSlNBcnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2VzIHdo
ZW4gaXQgd2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgorLy8g
ICAgd2l0aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisvLwor
Ly8gVGhlc2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEgbWF0
dGVyIG9mIG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5nIGFz
IG11Y2ggY29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8gdGVt
cGxhdGUgc3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8gc2Vt
YW50aWNzOyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2JleWlu
ZyBhIGNvbnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4KKy8v
CisvLyBPbmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2ggY3Jh
enkgaXMgdGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRlc3Bp
dGUgaGF2aW5nIGEgImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBUeXBl
ZCBhcnJheSB2aWV3cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJpZyB0
aGV5IGFyZSBhbmQKKy8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhhdCBy
ZXF1aXJlcyBhIHNlcGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNpZmll
ZCBuZXV0ZXJpbmcgY2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAgLy8g
U21hbGwgYW5kIGZhc3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBhIHZl
Y3RvcgorICAgIC8vIGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5cGVk
QXJyYXkuIFYncyBsaXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhl
IHZpZXcncyBsaXZlbmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIGxh
cmdlIHR5cGVkIGFycmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBtdWNo
CisgICAgLy8gbWVtb3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0aGF0
IGNvdWxkIGhvbGQgYQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZlY3Rv
ciBhbGxvY2F0ZWQgdXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNpemVU
eXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAgIC8v
IHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXplciB0
byBkZWxldGUgVi4KKyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0eXBl
ZCBhcnJheSB0aGF0IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdIZWFk
ZXIKKyAgICAvLyBpcyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRp
dmUgYXJyYXkgYnVmZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2lu
dHMgYmFjayB0byB0aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxv
Y2F0ZWQgdXNpbmcgd2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5Lgor
ICAgIC8vIFRoZSB2aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLgorICAgIFdhc3RlZnVsVHlw
ZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcs
IGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZmZXJW
aWV3IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdhc3Rp
bmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRlcmZs
eS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2aWEg
dGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MKKy8v
IGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3ZSBj
b3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9
IDEwMDA7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAg
IAorICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVy
ZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpOworICAgICAgICAKKyAg
ICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAg
ICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAg
ICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1
ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZv
aWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJv
cGVydHlTbG90Jik7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
ID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgCisgICAgLy8gQWxsb2NhdGVzIHRo
ZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNv
CisgICAgLy8gbW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAg
ICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFy
cmF5QnVmZmVyKiBidWZmZXIoKTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlclZpZXcqIGltcGwoKTsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
d0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkK
K3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9k
VGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5
QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRl
eGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3
KiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCkt
PmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDQg
KzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShK
U0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHNs
b3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOwogCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJh
eSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBz
ZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3
IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6
CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0
ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8g
ICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmll
bGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBN
YWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBi
dXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25l
IG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBh
cnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGll
ZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdz
IGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNp
bXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2lu
dGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBp
cyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBl
LgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4g
QWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBj
b252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1
c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAg
IHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7
CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBp
bnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50
OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGludDhfdCk7CisvLyB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcg
OiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJh
eUJ1ZmZlclZpZXcgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNp
emVMaW1pdCA9IDEwMDA7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CisgICAgCitwdWJsaWM6CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICAKKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkg
PCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltpXTsKKyAgICB9CisgICAgCisg
ICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAg
ICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1
ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVk
IGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVp
Y2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVp
Y2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICBtX3ZlY3RvcltpXSA9IHZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvRG91YmxlKHVuc2ln
bmVkIGksIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0
aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZShleGVjLCB2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIAorICAgIC8vIEFsbG9j
YXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMg
aGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVz
IGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnko
SlNUeXBlZEFycmF5VmlldyopOworICAgIHN0YXRpYyB2b2lkIGdldFR5ZXBkQXJyYXlJbXBsKEpT
VHlwZWRBcnJheVZpZXcqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcoVk0m
IHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4
dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJv
cGVydHlOYW1lID0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90
LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1
OCwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYg
KGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdM
aXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3Qs
IGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxm
CisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5T2JzZXJ2ZXIgPSBhZG9w
dFJlZihuZXcgVHlwZWRBcnJheU9ic2VydmVyKCkpOwogfQogCiBWTTo6flZNKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBA
QAogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheU9ic2Vy
dmVyLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAj
aW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC0zODEsNiArMzgyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2Zp
bGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJv
ZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5T2JzZXJ2ZXI+IG1fdHlwZWRBcnJheU9i
c2VydmVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVt
cFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZl
cnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEg
dmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBi
ZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlv
dSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFs
ICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmlj
YWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywg
b3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4K
KworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFs
SW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAg
ICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJv
b2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09
IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1f
cmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5j
cmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFz
ZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAg
ICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3Jl
ZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBk
ZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9y
ZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJy
YWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2
b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0
SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVk
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJv
dGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVS
ZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208049</attachid>
            <date>2013-08-02 15:21:49 -0700</date>
            <delta_ts>2013-08-02 23:17:42 -0700</delta_ts>
            <desc>ugh so much code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74464</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7
CisgICAgICAgIHZpZXctPm5ldXRlcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEFycmF5QnVmZmVyVmlldzsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CitwdWJsaWM6Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQorICAgICAgICAs
IG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250
ZW50cygpOworICAgIAorICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKworcHJpdmF0
ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7CisgICAgICAgIFplcm9Jbml0aWFsaXplLAor
ICAgICAgICBEb250SW5pdGlhbGl6ZQorICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOworICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOworICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCitj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4geworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7
CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgLy8gT25seSBm
b3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgorICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKworICAgIGlu
bGluZSB2b2lkKiBkYXRhKCk7CisgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsK
KyAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Cisg
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7
CisgICAgCisgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQorCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworCisgICAgaW5s
aW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQp
IGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CisgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CisKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OworICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKK307CisKK2ludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7CisgICAg
aWYgKHggPCBsZWZ0KQorICAgICAgICB4ID0gbGVmdDsKKyAgICBpZiAocmlnaHQgPCB4KQorICAg
ICAgICB4ID0gcmlnaHQ7CisgICAgcmV0dXJuIHg7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3Ro
ZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorewor
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0lu
aXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcg
QXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJj
ZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShjb250ZW50cyk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5t
X2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9waW5Db3VudCgwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOworfQorCit2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOworfQorCitjb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwor
fQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAoreworICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOworfQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoaW5kZXggPCAwKQorICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKKyAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5
QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOworfQorCit2b2lkIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQoreworICAgIC8vIERvIG5vdCBh
bGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCisgICAgLy8gRklYTUU6IFdo
eSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1
bWVudHMsCisgICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNv
IHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCisgICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSBy
ZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIGlmIChudW1FbGVtZW50cykgeworICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7CisgICAgaWYg
KHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKKyAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9
IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBE
b250SW5pdGlhbGl6ZSk7CisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5t
X2RhdGEpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7CisgICAgICAg
IHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Cit9CisKK0FycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKK3sKKyAgICBXVEY6OmZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlC
dWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
U2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93
bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyB1Lmxlbmd0aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2
b2lkIHNldEFycmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9
IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJl
KDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6
ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6
ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRl
bXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBl
ZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdWludDY0X3QqIGFzV29y
ZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8g
dXNlIG1vcmUgdGhhbiA0R0Igb24gMzItYml0IHN5c3RlbXMsCisgICAgLy8gZm9yIGZlYXIgdGhh
dCBmYXN0Q2FsbG9jKCkgZG9lc24ndCBkZWZlbmQgYWdhaW5zdCBsZW5ndGggKiBlbGVtZW50Cisg
ICAgLy8gb3ZlcmZsb3cuIEkgbWVhbiwgb2YgY291cnNlIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBz
aW5jZSBub3QgZG9pbmcKKyAgICAvLyB0aGlzIGNoZWNrIGhhcyBob3JyaWZpYyBzZWN1cml0eSBp
bXBsaWNhdGlvbnMsIHdlIHNob3VsZCBiZQorICAgIC8vIHBhcmFub2lkLgorICAgIGlmIChzaXpl
b2Yodm9pZCopIDwgOCAmJiBsZW5ndGggPiBVSU5UX01BWCAvIGVsZW1lbnRTaXplKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxlbWVudFNp
emUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHZtLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVs
ZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21v
ZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1
Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVjdG9yKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6ZGlzb3duKCkKK3sKKyAg
ICBtX3N0cnVjdHVyZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVy
VmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZt
LCBjb250ZXh0LnN0cnVjdHVyZSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkK
KyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5t
b2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEFTU0VSVChtX21vZGUgPT0gRmFz
dFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgaWYgKG1f
bW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVy
KHRoaXMsIGZpbmFsaXplKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUo
SlNDZWxsKiBjZWxsKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhpc09iamVj
dC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0g
V2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJz
aXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1
ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRl
cyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVu
ZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRz
IHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gK
Ky8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcg
b2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwg
dHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZl
cmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQg
bGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5v
dAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1v
c3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBp
dCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRo
IFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2
ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3IiIGFuZCBhCisv
LyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50IG1vZGVz
IGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUgdXNlciBo
YXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZworLy8gYnVm
ZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitlbnVtIFR5
cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4gQiBpcyB1
bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNvcGllZCBz
cGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAgLy8gZGV0
ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RUeXBlZEFy
cmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBhdHRlbXB0
cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlhbGl6ZWQg
dG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVyIHBvaW50
ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9jKCksCisg
ICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBkZXRlcm1p
bmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRoZSB2aWV3
IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlwZWRBcnJh
eSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29tZSBjcmF6
eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNvbnRhaW4g
YSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8vIG5hdGl2
ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBvaW50cyB0
byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwgYW5kIE0g
PSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3duIHRoZSB2
ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJDb3JlIHVz
ZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdldCB0aGUg
bmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVpcmVz
IHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3Npbmcg
dGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVyVmll
dworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9kVGFi
bGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5vIG5l
ZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUgaW50
byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xhc3Mg
SlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNp
emVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
LSAxKQorICAgICAgICAgICAgJiB+c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAgIHB1Ymxp
YzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90
IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpOworICAgICAgICAKKyAgICAgICAgfkNvbnN0
cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkaXNvd24o
KTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fc3Ry
dWN0dXJlOworICAgICAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5n
dGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKKyAgICB9OworICAgIAorICAgIEpT
QXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIC8vIEFsbG9j
YXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZl
cjsgYWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3Nh
cnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAK
KyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7CisgICAgQXJyYXlCdWZmZXJWaWV3KiBpbXBsKCk7
CisgICAgdm9pZCBuZXV0ZXIoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6
ZShKU0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Q
cm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3Zl
Y3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdh
c3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZl
clZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZl
cigpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6aW1w
bCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMp
OworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBt
X2xlbmd0aCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNCArMjM1LDE0IEBAIGJv
b2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJW
aWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpT
Q2VsbDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE1MzM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTksNiArMTU5LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyB2b2lkIGdldFR5cGVkQXJy
YXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHR5cGVkIGFycmF5IHZpZXcgaXMgb3Vy
IHJlcHJlc2VudGF0aW9uIG9mIGEgdHlwZWQgYXJyYXkgb2JqZWN0IGFzIHNlZW4KKy8vIGZyb20g
SmF2YVNjcmlwdC4gRm9yIGV4YW1wbGU6CisvLworLy8gdmFyIG8gPSBuZXcgSW50OEFycmF5KDEw
MCk7CisvLworLy8gSGVyZSwgJ28nIHBvaW50cyB0byBhIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PGludDhfdD4uCisvLworLy8gVmlld3MgY29udGFpbiBmaXZlIGZpZWxkczoKKy8vCisvLyAgICAg
U3RydWN0dXJlKiBTICAgICAvLyBmcm9tIEpTQ2VsbAorLy8gICAgIEJ1dHRlcmZseSogQiAgICAg
Ly8gZnJvbSBKU09iamVjdAorLy8gICAgIEVsZW1lbnRUeXBlKiBWCisvLyAgICAgdWludDMyX3Qg
TAorLy8gICAgIFR5cGVkQXJyYXlNb2RlIE0KKy8vCisvLyBUaGVzZSBmaWVsZHMgdGFrZSB1cCBh
IHRvdGFsIG9mIGZvdXIgcG9pbnRlci13aWR0aCB3b3Jkcy4gRklYTUU6IE1ha2UKKy8vIGl0IHRh
a2UgbGVzcyB3b3JkcyEKKy8vCisvLyBCIGlzIHVzdWFsbHkgdW51c2VkIGJ1dCBtYXkgc3RvcmVk
IHNvbWUgYWRkaXRpb25hbCAib3ZlcmZsb3ciIGRhdGEgZm9yCisvLyBvbmUgb2YgdGhlIG1vZGVz
LiBWIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHR5cGVkIGFycmF5J3MgZGF0YSwK
Ky8vIGFuZCBtYXkgcG9pbnQgdG8gZWl0aGVyIEdDLW1hbmFnZWQgY29waWVkIHNwYWNlLCBvciBk
YXRhIGluIHRoZSBDIGhlYXA7CisvLyB3aGljaCBvZiB0aG9zZSB0aGluZ3MgaXQgcG9pbnRzIHRv
IGlzIGdvdmVybmVkIGJ5IHRoZSBtb2RlIGFsdGhvdWdoIGZvcgorLy8gc2ltcGxlIGFjY2Vzc2Vz
IHRvIHRoZSB2aWV3IHlvdSBjYW4ganVzdCByZWFkIGZyb20gdGhlIHBvaW50ZXIgZWl0aGVyCisv
LyB3YXkuIE0gc3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSB2aWV3LiBMIGlzIHRoZSBsZW5ndGgs
IGluIHVuaXRzIHRoYXQKKy8vIGRlcGVuZCBvbiB0aGUgdmlldydzIHR5cGUuCisKKy8vIFRoZSBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyBpcyB0ZW1wbGF0aXplZCBieSBhbiBBZGFwdG9yIHRoYXQg
Y29udHJvbHMKKy8vIHRoZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBpdCdzIGNvbnZlcnRlZDsgaXQg
c2hvdWxkIG9iZXkgdGhlIGZvbGxvd2luZworLy8gaW50ZXJmYWNlOyBJIHVzZSBpbnQ4X3QgYXMg
YW4gZXhhbXBsZToKKy8vCisvLyBzdHJ1Y3QgQWRhcHRvciB7CisvLyAgICAgdHlwZWRlZiBpbnQ4
X3QgVHlwZTsKKy8vICAgICB0eXBlZGVmIEludDhBcnJheSBWaWV3VHlwZTsKKy8vICAgICBzdGF0
aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2
ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpT
VmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAg
IHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0Fy
cmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBC
YXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAw
MDsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1
YmxpYzoKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQor
ICAgIAorICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAg
ICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBib29sIGNhblNldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0
aDsKKyAgICB9CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSBnZXRJbmRleFF1aWNrbHlBc05hdGl2
ZVZhbHVlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0
SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBB
ZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVW
YWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIG1fdmVjdG9yW2ldID0gdmFsdWU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFw
dG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhR
dWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBw
dXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxs
LW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAg
Ly8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhl
YXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlW
aWV3Kik7CisgICAgc3RhdGljIHZvaWQgZ2V0VHllcGRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmll
dyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcoVk0mIHZtLCBDb25zdHJ1
Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShK
U1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMg
dG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxp
dHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdn
ZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdv
b2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRp
bmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBi
dWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQg
Y291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UK
KyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0
IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRo
ZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAv
LyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cg
ZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkg
Zm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAg
Ly8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJr
IGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFs
bG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9
IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpo
ZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkp
OworCisgICAgc2l6ZV90IHNpemUgPSBzaXplT2YodGhpc09iamVjdC0+bV9sZW5ndGgsIHNpemVv
ZihBZGFwdG9yOjpUeXBlKSk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJlY29y
ZCwgaW4gdGhlIGJ1dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAorICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYgIW1fYnV0dGVy
Zmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAvLyBSZXVz
ZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICBt
X2J1dHRlcmZseSA9IHN0YXRpY19jYXN0PEluZGV4aW5nSGVhZGVyKj4obV92ZWN0b3IpLT5idXR0
ZXJmbHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LCBoZWFwLT52
bSgpLCB0aGlzT2JqZWN0LCBzdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUp
IHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCBzaXplKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvciwgc2l6ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBidXR0ZXJm
bHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVu
Y2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJy
YXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKworICAgIHJldHVybiBBZGFwdG9yOjpWaWV3VHlwZTo6Y3JlYXRlKHRoaXNP
YmplY3QtPmJ1ZmZlcigpLCAvLyBGSVhNRQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCwx
MCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNh
blVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZl
ZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFz
IGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisg
ICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5T2JzZXJ2ZXIgPSBhZG9wdFJl
ZihuZXcgVHlwZWRBcnJheU9ic2VydmVyKCkpOwogfQogCiBWTTo6flZNKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAog
I2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1
ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheU9ic2VydmVy
LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5j
bHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC0zODEsNiArMzgyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVy
OwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmls
ZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5T2JzZXJ2ZXI+IG1fdHlwZWRBcnJheU9ic2Vy
dmVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVtcFBv
aW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KLSNpbmNsdWRlICJBcnJheUJ1ZmZl
clZpZXcuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1ib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+
JiBuZXV0ZXJlZFZpZXdzKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4ga2VlcEFsaXZlKHRo
aXMpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzLm1fZGF0YSkgewotICAgICAgICByZXN1bHQubV9k
YXRhID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgYWxsVmll
d3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1f
Zmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1
dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSkKLSAgICAgICAgbV9jb250ZW50
cy50cmFuc2ZlcihyZXN1bHQpOwotICAgIGVsc2UgewotICAgICAgICBtX2NvbnRlbnRzLmNvcHlU
byhyZXN1bHQpOwotICAgICAgICBpZiAoIXJlc3VsdC5tX2RhdGEpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFy
cmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3
KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQt
PmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAg
IG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17
Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwot
ICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcp
Ci0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0Vmll
dyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBp
ZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2Vmll
dyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAg
IHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlm
IChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4
dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQot
Ci19CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9X
VEYvd3RmL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEFycmF5QnVmZmVyX2gKLSNkZWZpbmUgQXJyYXlCdWZmZXJfaAotCi0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgV1RGIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci1jbGFzcyBBcnJheUJ1ZmZlclZpZXc7
Ci0KLWNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEFycmF5QnVmZmVyQ29udGVudHMpOwotcHVibGljOgotICAgIEFycmF5QnVmZmVyQ29udGVudHMo
KSAKLSAgICAgICAgOiBtX2RhdGEoMCkKLSAgICAgICAgLCBtX3NpemVJbkJ5dGVzKDApCi0gICAg
eyB9Ci0KLSAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMoKTsKLQotICAgIHZvaWQqIGRh
dGEoKSB7IHJldHVybiBtX2RhdGE7IH0KLSAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0
dXJuIG1fc2l6ZUluQnl0ZXM7IH0KLQotcHJpdmF0ZToKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
KHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKSAKLSAgICAgICAgOiBtX2RhdGEoZGF0
YSkKLSAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQotICAgIHsgfQotCi0gICAg
ZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotCi0gICAgZW51bSBJbml0aWFsaXphdGlvblBvbGlj
eSB7Ci0gICAgICAgIFplcm9Jbml0aWFsaXplLAotICAgICAgICBEb250SW5pdGlhbGl6ZQotICAg
IH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFy
cmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICB2b2lkIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmIG90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOwotICAgICAg
ICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7Ci0gICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBt
X3NpemVJbkJ5dGVzOwotICAgICAgICBtX2RhdGEgPSAwOwotICAgICAgICBtX3NpemVJbkJ5dGVz
ID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlUbyhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhl
cikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3RoZXIubV9kYXRhKTsKLSAgICAgICAgQXJyYXlC
dWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9zaXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSwgb3RoZXIpOwotICAgICAgICBpZiAo
IW90aGVyLm1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbWVtY3B5KG90aGVy
Lm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVzKTsKLSAgICAgICAgb3RoZXIubV9zaXplSW5C
eXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgfQotCi0gICAgdm9pZCogbV9kYXRhOwotICAgIHVu
c2lnbmVkIG1fc2l6ZUluQnl0ZXM7Ci19OwotCi1jbGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVk
IGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFy
cmF5QnVmZmVyQ29udGVudHMmKTsKLQotICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1w
ZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMs
IHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0KLSAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwot
ICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7Ci0gICAgaW5saW5lIHVuc2lnbmVk
IGJ5dGVMZW5ndGgoKSBjb25zdDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OwotCi0gICAgdm9pZCBhZGRWaWV3
KEFycmF5QnVmZmVyVmlldyopOwotICAgIHZvaWQgcmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcq
KTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29u
dGVudHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7
Ci0gICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9Ci0K
LSAgICB+QXJyYXlCdWZmZXIoKSB7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSk7Ci0KLSAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwot
ICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVn
aW4sIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0gICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgo
aW50IGluZGV4KSBjb25zdDsKLSAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4
LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKLQotICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250
ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OwotfTsKLQotaW50IEFycmF5
QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQotewotICAgIEFT
U0VSVChsZWZ0IDw9IHJpZ2h0KTsKLSAgICBpZiAoeCA8IGxlZnQpCi0gICAgICAgIHggPSBsZWZ0
OwotICAgIGlmIChyaWdodCA8IHgpCi0gICAgICAgIHggPSByaWdodDsKLSAgICByZXR1cm4geDsK
LX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewotICAgIHJldHVybiBj
cmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6
WmVyb0luaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKLXsKLSAgICByZXR1cm4gQXJyYXlCdWZmZXI6
OmNyZWF0ZShvdGhlci0+ZGF0YSgpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2Us
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50
czsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShieXRlTGVuZ3RoLCAxLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSwgY29udGVudHMpOwotICAgIGlmICgh
Y29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotICAgIG1l
bWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBieXRlTGVuZ3RoKTsKLSAgICByZXR1cm4gYnVm
ZmVyLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6
OmNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1l
bnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1F
bGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQotewotICAgIEFycmF5QnVm
ZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2Nh
dGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7Ci0gICAg
aWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKLX0KLQotQXJyYXlCdWZmZXI6OkFycmF5
QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZpZXco
MCkKLXsKLSAgICBjb250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKLX0KLQotdm9pZCogQXJy
YXlCdWZmZXI6OmRhdGEoKQotewotICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKLX0KLQot
Y29uc3Qgdm9pZCogQXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBtX2Nv
bnRlbnRzLm1fZGF0YTsKLX0KLQotdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBj
b25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Ci19Ci0KLVBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJ
bmRleChlbmQpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNs
aWNlKGludCBiZWdpbikgY29uc3QKLXsKLSAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgo
YmVnaW4pLCBieXRlTGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6c2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKLSAg
ICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YSgpKSArIGJlZ2luLCBzaXplKTsKLX0KLQotdW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5k
ZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRl
TGVuZ3RoKCk7Ci0gICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgaW5kZXggPSBjdXJyZW50TGVu
Z3RoICsgaW5kZXg7Ci0gICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5n
dGgpOwotfQotCi12b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVu
dHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVz
dWx0KQotewotICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFs
IHNpemUuCi0gICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9u
IGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCi0gICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0
aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCi0gICAgLy8g
cmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPwotICAgIGlmIChu
dW1FbGVtZW50cykgewotICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAq
IGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9
IGVsZW1lbnRCeXRlU2l6ZSkgewotICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYm9vbCBhbGxvY2F0aW9uU3Vj
Y2VlZGVkID0gZmFsc2U7Ci0gICAgaWYgKHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKLSAgICAg
ICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywg
ZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKHBvbGljeSA9PSBEb250SW5pdGlhbGl6ZSk7Ci0gICAgICAgIGFsbG9jYXRp
b25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0
ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpOwotICAgIH0KLQotICAgIGlmIChhbGxvY2F0
aW9uU3VjY2VlZGVkKSB7Ci0gICAgICAgIHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVu
dHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcmVzdWx0
Lm1fZGF0YSA9IDA7Ci19Ci0KLUFycmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRl
bnRzKCkKLXsKLSAgICBXVEY6OmZhc3RGcmVlKG1fZGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdURgotCi11c2luZyBXVEY6OkFycmF5QnVmZmVyOwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJf
aApJbmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJs
ZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVm
ZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0
aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0
IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlm
IGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVp
dGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRp
b25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2Ugewor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbmV0ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2
b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNy
ZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISEobV9yZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAg
IAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDog
bV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVy
ZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50Owor
ICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVy
cmVkQmFzZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAg
ICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJl
dHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
cmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJl
ZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVm
QmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoIXNldElzRGVmZXJyZWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7
IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVm
ZXJyYWJsZVJlZkNvdW50ZWRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208056</attachid>
            <date>2013-08-02 23:17:42 -0700</date>
            <delta_ts>2013-08-03 11:27:35 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77951</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7
CisgICAgICAgIHZpZXctPm5ldXRlcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEFycmF5QnVmZmVyVmlldzsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CitwdWJsaWM6Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQorICAgICAgICAs
IG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250
ZW50cygpOworICAgIAorICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKworcHJpdmF0
ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7CisgICAgICAgIFplcm9Jbml0aWFsaXplLAor
ICAgICAgICBEb250SW5pdGlhbGl6ZQorICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOworICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOworICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCitj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4geworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7
CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgLy8gT25seSBm
b3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgorICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKworICAgIGlu
bGluZSB2b2lkKiBkYXRhKCk7CisgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsK
KyAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Cisg
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7
CisgICAgCisgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQorCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworCisgICAgaW5s
aW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQp
IGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CisgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CisKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OworICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKK307CisKK2ludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7CisgICAg
aWYgKHggPCBsZWZ0KQorICAgICAgICB4ID0gbGVmdDsKKyAgICBpZiAocmlnaHQgPCB4KQorICAg
ICAgICB4ID0gcmlnaHQ7CisgICAgcmV0dXJuIHg7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3Ro
ZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorewor
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0lu
aXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcg
QXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJj
ZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShjb250ZW50cyk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5t
X2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9waW5Db3VudCgwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOworfQorCit2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOworfQorCitjb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwor
fQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAoreworICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOworfQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoaW5kZXggPCAwKQorICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKKyAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5
QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOworfQorCit2b2lkIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQoreworICAgIC8vIERvIG5vdCBh
bGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCisgICAgLy8gRklYTUU6IFdo
eSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1
bWVudHMsCisgICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNv
IHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCisgICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSBy
ZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIGlmIChudW1FbGVtZW50cykgeworICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7CisgICAgaWYg
KHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKKyAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9
IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBE
b250SW5pdGlhbGl6ZSk7CisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5t
X2RhdGEpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7CisgICAgICAg
IHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Cit9CisKK0FycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKK3sKKyAgICBXVEY6OmZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlC
dWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
U2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93
bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyB1Lmxlbmd0aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2
b2lkIHNldEFycmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9
IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJl
KDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6
ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6
ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRl
bXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBl
ZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdWludDY0X3QqIGFzV29y
ZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8g
dXNlIG1vcmUgdGhhbiA0R0Igb24gMzItYml0IHN5c3RlbXMsCisgICAgLy8gZm9yIGZlYXIgdGhh
dCBmYXN0Q2FsbG9jKCkgZG9lc24ndCBkZWZlbmQgYWdhaW5zdCBsZW5ndGggKiBlbGVtZW50Cisg
ICAgLy8gb3ZlcmZsb3cuIEkgbWVhbiwgb2YgY291cnNlIGl0IHByb2JhYmx5IGRvZXMsIGJ1dCBz
aW5jZSBub3QgZG9pbmcKKyAgICAvLyB0aGlzIGNoZWNrIGhhcyBob3JyaWZpYyBzZWN1cml0eSBp
bXBsaWNhdGlvbnMsIHdlIHNob3VsZCBiZQorICAgIC8vIHBhcmFub2lkLgorICAgIGlmIChzaXpl
b2Yodm9pZCopIDwgOCAmJiBsZW5ndGggPiBVSU5UX01BWCAvIGVsZW1lbnRTaXplKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxlbWVudFNp
emUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHZtLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVs
ZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21v
ZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1
Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7CisgICAgaWYgKCEqdGhpcykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVjdG9yKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6ZGlzb3duKCkKK3sKKyAg
ICBtX3N0cnVjdHVyZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVy
VmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZt
LCBjb250ZXh0LnN0cnVjdHVyZSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkK
KyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5t
b2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEFTU0VSVChtX21vZGUgPT0gRmFz
dFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgaWYgKG1f
bW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVy
KHRoaXMsIGZpbmFsaXplKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJv
cGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zm
c2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpwdXQoCisgICAg
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJy
YXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcq
PihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZU9mZnNldCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUo
KSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5
LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7
CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkgfHwg
dGhpc09iamVjdC0+bV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgaWYgKHRoaXNP
YmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIGZhc3RGcmVlKHRo
aXNPYmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmll
d19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZlcyB0d28gcHVycG9zZXM6
CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRlIHBhcmFtZXRlcnMuCisv
LworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlzaWJsZSAiSlNBcnJheUJ1
ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2VzIHdoZW4gaXQgd2FudHMg
dG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgorLy8gICAgd2l0aG91dCBj
b25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisvLworLy8gVGhlc2UgdHdv
IHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEgbWF0dGVyIG9mIG9wdGlt
aXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5nIGFzIG11Y2ggY29kZSBh
bmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8gdGVtcGxhdGUgc3BlY2lh
bGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8gc2VtYW50aWNzOyBpbmRl
ZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2JleWluZyBhIGNvbnRyYWN0
CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4KKy8vCisvLyBPbmUgY29u
dmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2ggY3JhenkgaXMgdGhhdAor
Ly8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRlc3BpdGUgaGF2aW5nIGEg
ImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBUeXBlZCBhcnJheSB2aWV3
cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJpZyB0aGV5IGFyZSBhbmQK
Ky8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBhIHNl
cGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNpZmllZCBuZXV0ZXJpbmcg
Y2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAgLy8gU21hbGwgYW5kIGZh
c3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBhIHZlY3RvcgorICAgIC8v
IGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5cGVkQXJyYXkuIFYncyBs
aXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIHZpZXcncyBsaXZl
bmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIGxhcmdlIHR5cGVkIGFy
cmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBtdWNoCisgICAgLy8gbWVt
b3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0aGF0IGNvdWxkIGhvbGQg
YQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZlY3RvciBhbGxvY2F0ZWQg
dXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNpemVUeXBlZEFycmF5LiBW
J3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAgIC8vIHRoZSB2aWV3J3Mg
bGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXplciB0byBkZWxldGUgVi4K
KyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0eXBlZCBhcnJheSB0aGF0
IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdIZWFkZXIKKyAgICAvLyBp
cyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgYXJyYXkgYnVm
ZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2ludHMgYmFjayB0byB0
aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcg
d2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5LgorICAgIC8vIFRoZSB2
aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLiBOb3RlIHRoYXQgIm1vZGUgLSBXYXN0ZWZ1bFR5
cGVkQXJyYXkiCisgICAgLy8gaXMgdGhlIGJ5dGUgb2Zmc2V0LgorICAgIFdhc3RlZnVsVHlwZWRB
cnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcsIGl0
IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZmZXJWaWV3
IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdhc3Rpbmcg
bWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRlcmZseS4g
V2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2aWEgdGhl
IHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MKKy8vIGlt
cGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3ZSBjb3Vs
ZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcg
aWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEw
MDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50
MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVu
dFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3Ry
dWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlv
bkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlvbkNv
bnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRT
aXplKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmU7IH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgZGlzb3duKCk7CisgICAgICAgIAorICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgICAg
IHZvaWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgICAgIHVpbnQz
Ml90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFR5cGVkQXJy
YXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92
ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9k
ZSBtX21vZGU7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0
cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgCisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7CisgICAgCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZm
ZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRh
dGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsK
KyAgICBBcnJheUJ1ZmZlclZpZXcqIGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigpOworICAgIAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
dm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAg
ICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5
TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJy
YXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gK
KyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAo
bV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyVmlldyog
SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigp
LT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVm
ZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJy
YXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVy
KCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5QnVm
ZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3RlZnVs
VHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbW9kZSAtIFdhc3Rl
ZnVsVHlwZWRBcnJheTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw0ICsyMzUsMTQgQEAg
Ym9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKUwogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBKU0NlbGw6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZl
clZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
SlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1OSw2ICsxNTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdh
c3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIHZvaWQgZ2V0VHlwZWRB
cnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBv
dXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJv
bSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXko
MTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAg
ICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAg
ICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJf
dCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVw
IGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQg
dGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9y
ZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9k
ZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRh
LAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9y
IGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMg
dG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNz
ZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIK
Ky8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0
aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhl
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhh
dCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBp
dCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBh
cyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGlu
dDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHN0
YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0
aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAg
ICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpT
QXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3
IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAx
MDAwOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoVk0mLCBDb25z
dHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAor
cHVibGljOgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9
CisgICAgCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuU2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVu
Z3RoOworICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0
aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgp
OworICAgICAgICByZXR1cm4gbV92ZWN0b3JbaV07CisgICAgfQorICAgIAorICAgIGRvdWJsZSBn
ZXRJbmRleFF1aWNrbHlBc0RvdWJsZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEFkYXB0b3I6OnRvRG91YmxlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAg
IH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRvSlNWYWx1ZShnZXRJbmRleFF1aWNrbHlBc05hdGl2
ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb05hdGl2
ZVZhbHVlKHVuc2lnbmVkIGksIEFkYXB0b3I6OlR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgbV92ZWN0b3JbaV0gPSB2YWx1ZTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3Vi
bGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFk
YXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRl
eFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZl
VmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgIAorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUg
YnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2Fy
eS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0
YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopOworICAg
IHN0YXRpYyB2b2lkIGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4
dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
Ym9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBs
YXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJv
bSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3Ig
dGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVy
ZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRp
bmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2Yg
Yml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9y
eSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsg
dGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZv
b3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4g
b3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdz
CisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3Ug
Y3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhp
bmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4K
KyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBi
ZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICph
bnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93Cisg
ICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBH
QyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3Qp
OworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0g
c2l6ZU9mKHRoaXNPYmplY3QtPm1fbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAg
IAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdo
YXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZh
c3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJ
bmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVt
b3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNfY2Fz
dDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQo
CisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3RydWN0
dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFs
c2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOworICAg
IAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRB
cnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5t
X3ZlY3Rvciwgc2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJz
aXplVHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0
ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHNpemUpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnV0dGVyZmx5KCktPnNldEFycmF5QnVmZmVyKGJ1
ZmZlci5nZXQoKSk7CisgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5n
ZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3
KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisKKyAgICBBcnJh
eUJ1ZmZlciogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fbW9kZSA+PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIHJldHVybiBBZGFwdG9y
OjpWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09i
amVjdC0+bV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
OCw2ICsyNTgsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZH
OjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhp
cyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9u
IGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlwZWRBcnJheU9ic2VydmVy
ID0gYWRvcHRSZWYobmV3IFR5cGVkQXJyYXlPYnNlcnZlcigpKTsKIH0KIAogVk06On5WTSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMu
aCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJy
YXlPYnNlcnZlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRv
bS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgpAQCAtMzgxLDYgKzM4
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJs
ZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRl
Y29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheU9ic2VydmVyPiBtX3R5cGVk
QXJyYXlPYnNlcnZlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAg
ICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
QXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJh
eUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAi
QXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBBcnJheUJ1ZmZlcjo6dHJh
bnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtl
ZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEpIHsKLSAgICAgICAg
cmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBi
b29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZlclZp
ZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAgaWYg
KCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9
IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCi0gICAgICAg
IG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9jb250
ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2ZpcnN0Vmlldykgewot
ICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAg
cmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8
fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigp
OwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3ByZXZW
aWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYgKG1f
Zmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0gICAg
bV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3KEFy
cmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1ZmZl
cik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZpZXct
Pm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZWaWV3
KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0Vmll
dzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9maXJzdFZpZXcgPSB2
aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRWaWV3
ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTMzNTIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0jZGVmaW5lIEFycmF5QnVm
ZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotY2xhc3MgQXJyYXlC
dWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoKLSAgICBBcnJheUJ1ZmZl
ckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAgICwgbV9zaXplSW5CeXRl
cygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0KLSAg
ICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZUluQnl0
ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXJyYXlCdWZm
ZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykgCi0gICAgICAgIDog
bV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKLSAgICB7
IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAgIGVudW0gSW5pdGlhbGl6
YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAgICAgICAgRG9udEluaXRp
YWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFsbG9jYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEluaXRpYWxpemF0aW9u
UG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0cmFuc2ZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3RoZXIubV9kYXRh
KTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAgICBvdGhlci5tX3NpemVJ
bkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgbV9z
aXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8oQXJyYXlCdWZmZXJDb250
ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAg
ICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6ZUluQnl0ZXMsIHNpemVv
ZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUsIG90aGVyKTsKLSAg
ICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1l
bWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7Ci0gICAgICAgIG90aGVy
Lm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQotICAgIHZvaWQqIG1fZGF0
YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xhc3MgQXJyYXlCdWZmZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBPbmx5IGZvciB1c2UgYnkg
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0gICAgaW5saW5lIHZvaWQq
IGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwotICAgIGlubGlu
ZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBjb25zdDsKLQotICAgIHZv
aWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlC
dWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRl
cmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1f
ZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlh
bGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29u
dGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVu
c2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBj
bGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBW
YWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKLX07Ci0K
LWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkK
LXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHggPCBsZWZ0KQotICAgICAg
ICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4ID0gcmlnaHQ7Ci0gICAg
cmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVh
dGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVy
Q29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
QXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17Ci0gICAgcmV0dXJuIEFy
cmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoY29uc3Qgdm9p
ZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxl
bmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUsIGNvbnRlbnRzKTsK
LSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMp
KTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Ci0gICAg
cmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotfQotCi1QYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewotICAgIHJldHVybiBj
cmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6
RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUs
IEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKLXsKLSAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6
OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVu
dHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19Ci0KLUFycmF5QnVm
ZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6IG1f
Zmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7Ci19Ci0K
LXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2Rh
dGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRl
TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwot
fQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2lu
LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdp
biksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5
QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1wbChj
bGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5k
KSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBlbmQgPyBlbmQgLSBiZWdp
biA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVy
OjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGVu
Z3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4ID0g
Y3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBj
dXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29u
dGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9m
IHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxv
YyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxs
IGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUg
YQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8K
LSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVt
RWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1F
bGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEg
PSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgYWxs
b2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxp
emUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVt
RWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0YSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRpYWxpemUpOwotICAgICAg
ICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICog
ZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAgICB9Ci0KLSAgICBp
ZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9
IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlC
dWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2RhdGEpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsKLQotI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5l
IERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQg
YWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVs
bCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBh
cworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2Fu
IGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJl
IHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBz
b21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50
ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJs
aWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJ
bmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8g
bm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOwor
ICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQor
ICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAg
CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbElu
Y3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wg
c2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkg
eworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOwor
ICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1
bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERl
ZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAg
IGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhp
cyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZD
b3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2Vu
ZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208067</attachid>
            <date>2013-08-03 11:27:35 -0700</date>
            <delta_ts>2013-08-03 23:35:22 -0700</delta_ts>
            <desc>slowly...</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80519</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7
CisgICAgICAgIHZpZXctPm5ldXRlcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEFycmF5QnVmZmVyVmlldzsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CitwdWJsaWM6Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQorICAgICAgICAs
IG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250
ZW50cygpOworICAgIAorICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKworcHJpdmF0
ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7CisgICAgICAgIFplcm9Jbml0aWFsaXplLAor
ICAgICAgICBEb250SW5pdGlhbGl6ZQorICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOworICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOworICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCitj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4geworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7
CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgLy8gT25seSBm
b3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgorICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKworICAgIGlu
bGluZSB2b2lkKiBkYXRhKCk7CisgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsK
KyAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Cisg
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7
CisgICAgCisgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQorCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworCisgICAgaW5s
aW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQp
IGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CisgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CisKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OworICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKK307CisKK2ludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7CisgICAg
aWYgKHggPCBsZWZ0KQorICAgICAgICB4ID0gbGVmdDsKKyAgICBpZiAocmlnaHQgPCB4KQorICAg
ICAgICB4ID0gcmlnaHQ7CisgICAgcmV0dXJuIHg7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3Ro
ZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorewor
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0lu
aXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcg
QXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJj
ZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShjb250ZW50cyk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5t
X2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9waW5Db3VudCgwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOworfQorCit2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOworfQorCitjb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwor
fQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAoreworICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOworfQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoaW5kZXggPCAwKQorICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKKyAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5
QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOworfQorCit2b2lkIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQoreworICAgIC8vIERvIG5vdCBh
bGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCisgICAgLy8gRklYTUU6IFdo
eSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1
bWVudHMsCisgICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNv
IHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCisgICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSBy
ZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIGlmIChudW1FbGVtZW50cykgeworICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7CisgICAgaWYg
KHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKKyAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9
IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBE
b250SW5pdGlhbGl6ZSk7CisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5t
X2RhdGEpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7CisgICAgICAg
IHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Cit9CisKK0FycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKK3sKKyAgICBXVEY6OmZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlC
dWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
U2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93
bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyB1Lmxlbmd0aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2
b2lkIHNldEFycmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9
IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJl
KDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6
ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6
ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRl
bXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBl
ZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdWludDY0X3QqIGFzV29y
ZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8g
dXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBpZiAobGVuZ3RoID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBlZEFycmF5KSAvIGVsZW1l
bnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxl
bmd0aCwgZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVj
dG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
ZGlzb3duKCkKK3sKKyAgICBtX3N0cnVjdHVyZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQp
CisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpKQorICAgICwgbV92ZWN0b3IoY29u
dGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBt
X21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEFTU0VS
VChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJh
eSk7CisgICAgaWYgKG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIHZtLmhl
YXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJW
aWV3OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xv
dC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVk
IGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBw
cm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9
CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6
ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAg
ICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZl
cyB0d28gcHVycG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRl
IHBhcmFtZXRlcnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlz
aWJsZSAiSlNBcnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2Vz
IHdoZW4gaXQgd2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgor
Ly8gICAgd2l0aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisv
LworLy8gVGhlc2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEg
bWF0dGVyIG9mIG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5n
IGFzIG11Y2ggY29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8g
dGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8g
c2VtYW50aWNzOyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2Jl
eWluZyBhIGNvbnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4K
Ky8vCisvLyBPbmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2gg
Y3JhenkgaXMgdGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRl
c3BpdGUgaGF2aW5nIGEgImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBU
eXBlZCBhcnJheSB2aWV3cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJp
ZyB0aGV5IGFyZSBhbmQKKy8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhh
dCByZXF1aXJlcyBhIHNlcGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNp
ZmllZCBuZXV0ZXJpbmcgY2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAg
Ly8gU21hbGwgYW5kIGZhc3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBh
IHZlY3RvcgorICAgIC8vIGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5
cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkg
dGhlIHZpZXcncyBsaXZlbmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBB
IGxhcmdlIHR5cGVkIGFycmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBt
dWNoCisgICAgLy8gbWVtb3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0
aGF0IGNvdWxkIGhvbGQgYQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZl
Y3RvciBhbGxvY2F0ZWQgdXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNp
emVUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAg
IC8vIHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXpl
ciB0byBkZWxldGUgVi4KKyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0
eXBlZCBhcnJheSB0aGF0IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdI
ZWFkZXIKKyAgICAvLyBpcyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBu
YXRpdmUgYXJyYXkgYnVmZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBw
b2ludHMgYmFjayB0byB0aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBh
bGxvY2F0ZWQgdXNpbmcgd2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5
LgorICAgIC8vIFRoZSB2aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLiBOb3RlIHRoYXQgIm1v
ZGUgLSBXYXN0ZWZ1bFR5cGVkQXJyYXkiCisgICAgLy8gaXMgdGhlIGJ5dGUgb2Zmc2V0LgorICAg
IFdhc3RlZnVsVHlwZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJh
eUJ1ZmZlclZpZXcsIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8g
QXJyYXlCdWZmZXJWaWV3IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRv
d24gYW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEg
dGhlIEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlz
IGFsd2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlz
IGNsYXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4g
ZXhpc3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJWaWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFz
dFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMy
X3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAo
bGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAg
ICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAg
IENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVp
bnQzMl90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250
ZXh0KCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFzdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZGlzb3duKCk7CisgICAgICAg
IAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlOyB9CisgICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yOyB9
CisgICAgICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Cisg
ICAgICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAg
ICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAg
ICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVy
VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRU
aHJvdyk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlID0gRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxs
LW9uIG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAg
Ly8gbW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lk
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFycmF5QnVm
ZmVyKiBidWZmZXIoKTsKKyAgICBBcnJheUJ1ZmZlclZpZXcqIGltcGwoKTsKKyAgICB2b2lkIG5l
dXRlcigpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsK
KyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBpZiAobV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0
aG9kVGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFy
cmF5QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5p
bmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJW
aWV3KiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxl
KCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNp
Z25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
bW9kZSA8IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IG1fbW9kZSAtIFdhc3RlZnVsVHlwZWRBcnJheTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
NSw0ICsyMzUsMTQgQEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKUwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBKU0NlbGw6OnNsb3dEb3duQW5kV2FzdGVNZW1v
cnkoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmll
dyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2
aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGlj
IHZvaWQgZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAor
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQg
YXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3Qg
YXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9
IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmll
bGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAg
QnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYK
Ky8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNl
IGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhN
RTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVz
ZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8v
IG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlw
ZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBj
b3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRo
aW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisv
LyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUg
cG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcu
IEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3Mg
dHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5
IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0
J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7
IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8v
ICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdU
eXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0
aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRp
dmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVl
KGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
QXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZh
c3RTaXplTGltaXQgPSAxMDAwOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIAorcHVibGljOgorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpOyB9CisgICAgY29uc3QgQWRhcHRvcjo6
VHlwZSogdHlwZWRWZWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorICAgIEFkYXB0b3I6
OlR5cGUqIHR5cGVkVmVjdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxB
ZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIG1lYW50IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdAor
ICAgIC8vIHN1cHBvcnRzIC0gaGVuY2UgdGhlIHNsaWdodCByZWR1bmRhbmN5LgorICAgIGJvb2wg
Y2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8
IG1fbGVuZ3RoOworICAgIH0KKyAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
QWRhcHRvcjo6VHlwZSBnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKHVuc2lnbmVkIGkpCisg
ICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVk
VmVjdG9yKClbaV07CisgICAgfQorICAgIAorICAgIGRvdWJsZSBnZXRJbmRleFF1aWNrbHlBc0Rv
dWJsZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRvRG91Ymxl
KGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICBKU1Zh
bHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFk
YXB0b3I6OnRvSlNWYWx1ZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKHVuc2lnbmVkIGks
IEFkYXB0b3I6OlR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3Ro
KTsKKyAgICAgICAgdHlwZWRWZWN0b3IoKVtpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldEluZGV4UXVpY2tseVRvRG91YmxlKHVuc2lnbmVkIGksIGRvdWJsZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRp
dmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0
aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRJbmRleFF1aWNrbHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9y
Ojp0b05hdGl2ZShleGVjLCB2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBw
dXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAg
CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRh
dGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBu
ZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIHZvaWQgZ2V0VHlw
ZWRBcnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmlu
ZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQor
ICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5
U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5n
dGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBz
bG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgo
KSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAg
IGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAo
aW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4UXVpY2ts
eShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmlyZWZv
eCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxlbmd0
aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRvIHRo
ZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBtYXRjaGlu
ZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRlbXB0
cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMgb24g
dHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CisgICAgLy8gb2YgYm91bmRzLgorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
KyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8g
d3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9w
ZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5Vmlldyogb2Jq
ZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdl
IHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4g
ZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSog
b3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkg
aGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291
bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQg
b2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1l
bW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVh
cDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFw
IGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcg
YW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhh
dCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5
b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5v
dGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9y
eS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJs
ZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRv
ICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93
CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2ls
bCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmpl
Y3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNT
RVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXpl
ID0gc2l6ZU9mKHRoaXNPYmplY3QtPm1fbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHks
IHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09
IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVv
ZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQg
bWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5Umln
aHQoCisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3Ry
dWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
ZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwor
ICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlw
ZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0
LT5tX3ZlY3Rvciwgc2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92
ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFk
b3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHNpemUpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnV0dGVyZmx5KCktPnNldEFycmF5QnVmZmVy
KGJ1ZmZlci5nZXQoKSk7CisgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZl
ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlW
aWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisKKyAgICBB
cnJheUJ1ZmZlciogYnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgQVNTRVJUKHRo
aXNPYmplY3QtPm1fbW9kZSA+PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIHJldHVybiBBZGFw
dG9yOjpWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhp
c09iamVjdC0+bV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTMzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1OCw2ICsyNTgsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcg
REZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8vIEluaXRpYWxpemUg
dGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZNIGluaXRpYWxpemF0
aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlwZWRBcnJheU9ic2Vy
dmVyID0gYWRvcHRSZWYobmV3IFR5cGVkQXJyYXlPYnNlcnZlcigpKTsKIH0KIAogVk06On5WTSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MzM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRv
cnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlPYnNlcnZlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1Jh
bmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgpAQCAtMzgxLDYg
KzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2Vu
YWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJC
eXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheU9ic2VydmVyPiBtX3R5
cGVkQXJyYXlPYnNlcnZlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAg
ICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEpIHsKLSAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZl
clZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAg
aWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJs
ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCi0gICAg
ICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9j
b250ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2ZpcnN0Vmlldykg
ewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAg
ICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJs
ZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRl
cigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3By
ZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYg
KG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0g
ICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3
KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1
ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZp
ZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZW
aWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0
VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9maXJzdFZpZXcg
PSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRW
aWV3ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTMzNTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0jZGVmaW5lIEFycmF5
QnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotY2xhc3MgQXJy
YXlCdWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoKLSAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAgICwgbV9zaXplSW5C
eXRlcygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0K
LSAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXJyYXlC
dWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykgCi0gICAgICAg
IDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKLSAg
ICB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAgIGVudW0gSW5pdGlh
bGl6YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAgICAgICAgRG9udElu
aXRpYWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFsbG9jYXRlKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEluaXRpYWxpemF0
aW9uUG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0cmFuc2ZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3RoZXIubV9k
YXRhKTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAgICBvdGhlci5tX3Np
emVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAg
bV9zaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8oQXJyYXlCdWZmZXJD
b250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0g
ICAgICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6ZUluQnl0ZXMsIHNp
emVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUsIG90aGVyKTsK
LSAgICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1lbWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7Ci0gICAgICAgIG90
aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQotICAgIHZvaWQqIG1f
ZGF0YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xhc3MgQXJyYXlCdWZm
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGljOgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1l
bnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNp
Z25lZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBPbmx5IGZvciB1c2Ug
YnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0gICAgaW5saW5lIHZv
aWQqIGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwotICAgIGlu
bGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBjb25zdDsKLQotICAg
IHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJy
YXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihB
cnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5l
dXRlcmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRz
Lm1fZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVy
Q29udGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBs
KHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25l
ZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGluZSBpbnQgY2xh
bXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBBcnJheUJ1ZmZlckNv
bnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKLX07
Ci0KLWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdo
dCkKLXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHggPCBsZWZ0KQotICAg
ICAgICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4ID0gcmlnaHQ7Ci0g
ICAgcmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpj
cmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKLXsK
LSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVm
ZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17Ci0gICAgcmV0dXJu
IEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7
Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoY29uc3Qg
dm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFycmF5QnVmZmVyQ29u
dGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0
ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUsIGNvbnRlbnRz
KTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVu
dHMpKTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotfQotCi1QYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewotICAgIHJldHVy
biBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50
czo6RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKLXsK
LSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVu
dHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29u
dGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19Ci0KLUFycmF5
QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6
IG1fZmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7Ci19
Ci0KLXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5t
X2RhdGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpi
eXRlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVz
OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJl
Z2luLCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChi
ZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1w
bChjbGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQg
ZW5kKSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBlbmQgPyBlbmQgLSBi
ZWdpbiA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVm
ZmVyOjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50
TGVuZ3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4
ID0gY3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4LCAw
LCBjdXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxv
Y2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVy
Q29udGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93
IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENh
bGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3
aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1
ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVy
ZT8KLSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0g
bnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBu
dW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wg
YWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kgPT0gWmVyb0luaXRp
YWxpemUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2Mo
bnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0YSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRpYWxpemUpOwotICAg
ICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRz
ICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAgICB9Ci0KLSAg
ICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQubV9zaXplSW5CeXRl
cyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2RhdGEpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsKLQotI2VuZGlmIC8v
IEFycmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVm
aW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRo
YXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4g
dGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJh
bCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3Ug
Y2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2Fu
IGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZv
ciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitw
dWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3Jt
YWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50
IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcp
OworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2Uo
KQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1h
bEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJv
b2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFn
OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAg
ICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4o
dGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVS
ZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKwor
I2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208078</attachid>
            <date>2013-08-03 23:35:22 -0700</date>
            <delta_ts>2013-08-04 12:06:16 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90612</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7
CisgICAgICAgIHZpZXctPm5ldXRlcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEFycmF5QnVmZmVyVmlldzsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CitwdWJsaWM6Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQorICAgICAgICAs
IG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250
ZW50cygpOworICAgIAorICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKworcHJpdmF0
ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7CisgICAgICAgIFplcm9Jbml0aWFsaXplLAor
ICAgICAgICBEb250SW5pdGlhbGl6ZQorICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOworICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOworICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCitj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4geworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7
CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgLy8gT25seSBm
b3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgorICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKworICAgIGlu
bGluZSB2b2lkKiBkYXRhKCk7CisgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsK
KyAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Cisg
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7
CisgICAgCisgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQorCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworCisgICAgaW5s
aW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQp
IGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CisgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CisKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OworICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKK307CisKK2ludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7CisgICAg
aWYgKHggPCBsZWZ0KQorICAgICAgICB4ID0gbGVmdDsKKyAgICBpZiAocmlnaHQgPCB4KQorICAg
ICAgICB4ID0gcmlnaHQ7CisgICAgcmV0dXJuIHg7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3Ro
ZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorewor
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0lu
aXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcg
QXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJj
ZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShjb250ZW50cyk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5t
X2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9waW5Db3VudCgwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOworfQorCit2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOworfQorCitjb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwor
fQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAoreworICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOworfQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoaW5kZXggPCAwKQorICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKKyAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5
QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOworfQorCit2b2lkIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQoreworICAgIC8vIERvIG5vdCBh
bGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCisgICAgLy8gRklYTUU6IFdo
eSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1
bWVudHMsCisgICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNv
IHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCisgICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSBy
ZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIGlmIChudW1FbGVtZW50cykgeworICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7CisgICAgaWYg
KHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKKyAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9
IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBE
b250SW5pdGlhbGl6ZSk7CisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5t
X2RhdGEpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7CisgICAgICAg
IHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Cit9CisKK0FycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKK3sKKyAgICBXVEY6OmZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlC
dWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
U2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93
bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyB1Lmxlbmd0aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2
b2lkIHNldEFycmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9
IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJl
KDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6
ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6
ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRl
bXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBl
ZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdWludDY0X3QqIGFzV29y
ZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8g
dXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBpZiAobGVuZ3RoID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBlZEFycmF5KSAvIGVsZW1l
bnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxl
bmd0aCwgZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVj
dG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
ZGlzb3duKCkKK3sKKyAgICBtX3N0cnVjdHVyZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQp
CisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpKQorICAgICwgbV92ZWN0b3IoY29u
dGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBt
X21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEFTU0VS
VChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJh
eSk7CisgICAgaWYgKG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIHZtLmhl
YXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJW
aWV3OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xv
dC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVk
IGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBw
cm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9
CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQor
Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAg
IAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBs
ZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0
KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsK
KyAgICB9CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6
ZmluYWxpemUoSlNDZWxsKiBjZWxsKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQo
dGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5t
X21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2Rl
ID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92
ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUg
SlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJ
dCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRv
bid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCBy
ZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlw
ZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3Vu
ZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRo
ZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1
aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29t
cGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBv
c3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIp
IGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVy
eSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2Ug
aGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5n
IHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZl
clZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3Ii
IGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVy
ZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0
aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2lu
ZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMu
CitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJh
eS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGlu
IGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisg
ICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZh
c3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGls
bCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5p
dGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVm
ZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2Fs
bG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBp
cyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5k
IHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXpl
VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4g
c29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRv
IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAg
IC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBW
IHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hh
dCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qg
b3duIHRoZSB2ZWN0b3IuIE5vdGUgdGhhdCAibW9kZSAtIFdhc3RlZnVsVHlwZWRBcnJheSIKKyAg
ICAvLyBpcyB0aGUgYnl0ZSBvZmZzZXQuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKwor
Ly8gV2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBi
ZSBhYmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBl
bHNlLiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBh
bmQgdGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMg
YSBKU0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9k
cyBpbiB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24g
b2YgdGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1l
IHNpbmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29u
dmVuaWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRT
aXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAgJiB+c2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7Cisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0
cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpOworICAgICAg
ICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICAg
ICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKKyAg
ICB9OworICAgIAorICAgIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4
dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU1RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICAv
LyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciwgbmF0aXZlIHZpZXcsIGFuZCBK
UyBidWZmZXI7IGFsc28KKyAgICAvLyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYg
bmVjZXNzYXJ5LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7
CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIEFycmF5QnVmZmVyVmlldyog
aW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCop
OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHZvaWQqIG1fdmVjdG9yOworICAg
IHVpbnQzMl90IG1fbGVuZ3RoOworICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdh
c3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPj0gV2FzdGVmdWxUeXBl
ZEFycmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRo
aXMpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6YnVm
ZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICBy
ZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisK
K2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sKKyAg
ICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisKK2lu
bGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3RoID0g
MDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNp
b24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJ
bXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVj
dFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZl
clZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVy
VmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBh
IHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFt
cGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdv
JyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZp
ZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8g
ZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8v
ICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5
TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50
ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLwor
Ly8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92
ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRv
IHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRv
IGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOwor
Ly8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUg
bW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2Fu
IGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0
aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBk
ZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxl
bWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xs
b3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8g
c3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlw
ZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShk
b3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7CisvLyAgICAg
c3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKy8vICAgICBzdGF0
aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRvRG91
YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3Mg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisKK3Byb3RlY3RlZDoKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAor
ICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOwor
ICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRo
b2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVk
dW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7
CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7Cisg
ICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUg
Z2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVy
biBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7
CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRp
dmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRp
dmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBp
LCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBz
ZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRv
TmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpKTsKKyAgICB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENv
cHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBu
YXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5l
Y2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgor
ICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5Vmlldyop
OworICAgIHN0YXRpYyB2b2lkIGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUo
anNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5sZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVp
Y2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNO
dW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihnZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7
CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVt
cHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4g
c3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Q
cm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAg
IAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxh
ciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBm
b3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91
dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5
IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BldHlOYW1lLmFzSW5kZXgoKSAhPSBQ
cm9wZXJ0eU5hbWUuTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAg
IHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
c2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5
TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdl
dEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFt
ZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91
bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCgKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICghY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgLy8gWWVzLCBy
ZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRocm93aW5nIGFueXRoaW5nIGlmIHlvdSBz
dG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5kcy4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBzZXRJbmRleFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJv
cGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXks
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXks
IG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsK
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFz
dFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlw
ZWRBcnJheVZlY3RvclRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVy
c2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdl
KHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJh
Y2tpbmdTdG9yZSgKKyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5
VG9rZW4gdG9rZW4pCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0
b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlz
aXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBt
ZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
ICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5k
aWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAor
ICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBv
YmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8g
V2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZl
biBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRl
KiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9y
eSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNj
b3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29y
dCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUg
bWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBo
ZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhl
YXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGlu
ZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBU
aGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlm
IHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQg
bm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVt
b3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91
YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3Ug
ZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtu
b3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3
aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09i
amVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBB
U1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNp
emUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNo
b3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAK
KyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYm
ICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAg
ICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4K
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVj
dG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1dHRlcmZs
eSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVj
dC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVU
eXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxp
a2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5j
ZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2Ug
cmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBidXR0ZXJmbHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgp
KTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gQWRhcHRvcjo6
Vmlld1R5cGU6OmNyZWF0ZSh0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9m
ZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwxMCArMjY0
LDYgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogCiBib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgLy8gTkIuIFRo
ZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdl
IGltcGxpZXMgdGhhdCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJy
aWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCi0gICAgLy8g
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkgPiBNQVhfQVJS
QVlfSU5ERVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gK
KworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnPgorc3RydWN0IEludGVncmFs
VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVk
ZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3Vi
bGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGlj
X2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9O
YXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsK
KyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05h
dGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1Zh
bHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBl
QXJnPgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFy
ZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgCisgICAgc3Rh
dGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9O
YXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1
ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0
aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFs
dWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIo
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Cisg
ICAgfQorfTsKKworY2xhc3MgSW50OEFycmF5OworY2xhc3MgSW50MTZBcnJheTsKK2NsYXNzIElu
dDMyQXJyYXk7CitjbGFzcyBVaW50OEFycmF5OworY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Citj
bGFzcyBVaW50MTZBcnJheTsKK2NsYXNzIFVpbnQzMkFycmF5OworY2xhc3MgRmxvYXQzMkFycmF5
OworY2xhc3MgRmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5
cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5PiB7IH07CitzdHJ1Y3QgSW50MTZBZGFw
dG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5PiB7IH07
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0b3JzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTgsNiArMjU4LDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQdHIo
bmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJbml0aWFs
aXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBpbml0aWFs
aXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVkQXJyYXlP
YnNlcnZlciA9IGFkb3B0UmVmKG5ldyBUeXBlZEFycmF5T2JzZXJ2ZXIoKSk7CiB9CiAKIFZNOjp+
Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTMzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJU
eXBlZEFycmF5T2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldl
YWtSYW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTM4
MSw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9maWxlciog
bV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1f
cGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlPYnNlcnZlcj4g
bV90eXBlZEFycmF5T2JzZXJ2ZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hl
OwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApJbmRl
eDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93
dGYvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQotI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWJvb2wgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBrZWVwQWxpdmUodGhpcyk7Ci0KLSAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7Ci0g
ICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAgIGZvciAoQXJyYXlC
dWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0gICAg
ICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxWaWV3c0FyZU5ldXRl
cmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQot
ICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7Ci0gICAgICAgIGlmICghcmVzdWx0Lm1fZGF0YSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB3aGlsZSAobV9maXJzdFZp
ZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZpZXc7Ci0g
ICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0FyZU5ldXRl
cmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJyZW50LT5u
ZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyOjphZGRWaWV3KEFycmF5QnVm
ZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+
bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmlyc3RWaWV3OwotICAg
IGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJldlZpZXcgPSB2aWV3
OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3Zl
VmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+
bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAgICB2aWV3LT5tX25l
eHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBpZiAodmlldy0+bV9w
cmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0VmlldyA9IHZpZXctPm1f
bmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAgICAgIG1fZmlyc3RW
aWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9u
ZXh0VmlldyA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMTUz
MzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJfaAotI2RlZmluZSBB
cnJheUJ1ZmZlcl9oCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLWNsYXNz
IEFycmF5QnVmZmVyVmlldzsKLQotY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7Ci1wdWJsaWM6Ci0gICAgQXJy
YXlCdWZmZXJDb250ZW50cygpIAotICAgICAgICA6IG1fZGF0YSgwKQotICAgICAgICAsIG1fc2l6
ZUluQnl0ZXMoMCkKLSAgICB7IH0KLQotICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygp
OwotCi0gICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQotICAgIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQotCi1wcml2YXRlOgotICAgIEFy
cmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUluQnl0ZXMpIAotICAg
ICAgICA6IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMp
Ci0gICAgeyB9Ci0KLSAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLSAgICBlbnVtIElu
aXRpYWxpemF0aW9uUG9saWN5IHsKLSAgICAgICAgWmVyb0luaXRpYWxpemUsCi0gICAgICAgIERv
bnRJbml0aWFsaXplCi0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBJbml0aWFs
aXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOwotICAgIHZvaWQgdHJhbnNmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVy
Lm1fZGF0YSk7Ci0gICAgICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0YTsKLSAgICAgICAgb3RoZXIu
bV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1fZGF0YSA9IDA7Ci0gICAg
ICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLQotICAgIHZvaWQgY29weVRvKEFycmF5QnVm
ZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFvdGhlci5tX2RhdGEp
OwotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVz
LCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplLCBvdGhl
cik7Ci0gICAgICAgIGlmICghb3RoZXIubV9kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEsIG1fc2l6ZUluQnl0ZXMpOwotICAgICAg
ICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICB9Ci0KLSAgICB2b2lk
KiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKLX07Ci0KLWNsYXNzIEFycmF5
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwg
dW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOwotCi0gICAgLy8gT25seSBmb3Ig
dXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKLQotICAgIGlubGlu
ZSB2b2lkKiBkYXRhKCk7Ci0gICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsKLSAg
ICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OwotCi0gICAgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Ci0gICAg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7Ci0K
LSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3
KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJhbnNm
ZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+
JiBuZXV0ZXJlZFZpZXdzKTsKLSAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250
ZW50cy5tX2RhdGE7IH0KLQotICAgIH5BcnJheUJ1ZmZlcigpIHsgfQotCi1wcml2YXRlOgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQotICAgIGlubGluZSBBcnJheUJ1ZmZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJik7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNl
SW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBjb25zdDsKLSAgICBpbmxpbmUgdW5z
aWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwotICAgIHN0YXRpYyBpbmxpbmUgaW50
IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwotCi0gICAgQXJyYXlCdWZm
ZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7
Ci19OwotCi1pbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQg
cmlnaHQpCi17Ci0gICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwotICAgIGlmICh4IDwgbGVmdCkK
LSAgICAgICAgeCA9IGxlZnQ7Ci0gICAgaWYgKHJpZ2h0IDwgeCkKLSAgICAgICAgeCA9IHJpZ2h0
OwotICAgIHJldHVybiB4OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVyKQotewotICAgIHJl
dHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCksIG90aGVyLT5ieXRlTGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNv
bnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBBcnJheUJ1ZmZl
ckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRl
KGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplLCBjb250
ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNv
bnRlbnRzKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgp
OwotICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKLX0KLQot
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29u
dGVudHM6OkRvbnRJbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJy
YXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3kp
Ci17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKLSAgICBBcnJheUJ1ZmZlckNv
bnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBwb2xpY3ks
IGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotfQotCi1B
cnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi0g
ICAgOiBtX2ZpcnN0VmlldygwKQotewotICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMp
OwotfQotCi12b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCi17Ci0gICAgcmV0dXJuIG1fY29udGVu
dHMubV9kYXRhOwotfQotCi1jb25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi11bnNpZ25lZCBBcnJheUJ1ZmZl
cjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5C
eXRlczsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGlu
dCBiZWdpbiwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5k
ZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBjb25zdAotewotICAgIHJldHVybiBzbGlj
ZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2ln
bmVkIGVuZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gYmVnaW4gPD0gZW5kID8gZW5k
IC0gYmVnaW4gOiAwOwotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNpemUpOwotfQotCi11bnNpZ25lZCBBcnJh
eUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgY3Vy
cmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBp
bmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKLSAgICByZXR1cm4gY2xhbXBWYWx1ZShpbmRl
eCwgMCwgY3VycmVudExlbmd0aCk7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5
QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwg
QXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1
ZmZlckNvbnRlbnRzJiByZXN1bHQpCi17Ci0gICAgLy8gRG8gbm90IGFsbG93IDMyLWJpdCBvdmVy
ZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5vdD8gVGhlIHRyeUZh
c3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50cywKLSAgICAvLyBh
bmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5IHNob3VsZCB3ZSBp
bmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNr
IGhlcmU/Ci0gICAgaWYgKG51bUVsZW1lbnRzKSB7Ci0gICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6
ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBpZiAodG90YWxTaXpl
IC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7Ci0gICAgICAgICAgICByZXN1bHQu
bV9kYXRhID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBi
b29sIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBpZiAocG9saWN5ID09IFplcm9J
bml0aWFsaXplKQotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0Q2Fs
bG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEp
OwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocG9saWN5ID09IERvbnRJbml0aWFsaXplKTsK
LSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdURjo6dHJ5RmFzdE1hbGxvYyhudW1FbGVt
ZW50cyAqIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0YSk7Ci0gICAgfQot
Ci0gICAgaWYgKGFsbG9jYXRpb25TdWNjZWVkZWQpIHsKLSAgICAgICAgcmVzdWx0Lm1fc2l6ZUlu
Qnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICByZXN1bHQubV9kYXRhID0gMDsKLX0KLQotQXJyYXlCdWZmZXJDb250ZW50czo6
fkFycmF5QnVmZmVyQ29udGVudHMoKQotewotICAgIFdURjo6ZmFzdEZyZWUobV9kYXRhKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXJyYXlCdWZmZXI7Ci0KLSNlbmRp
ZiAvLyBBcnJheUJ1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291
bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVk
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAor
I2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2YgUmVmQ291bnRl
ZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQsCisvLyBhbmQg
Y2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5rIG9mIGEgZGVm
ZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhjZXB0IHRoYXQg
eW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVuZWQgLSB0aGlz
IGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21ldGltZXMgZXZl
biBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERlZmVycmFibGVS
ZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVycmVkRmxhZyA9
IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVuZXQgPSAyOworICAg
IAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgKz0g
bm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZWZD
b3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlZmVycmVk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVmZXJyZWRG
bGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAtPSBu
b3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisKKyAg
ICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVycmVk
RmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZEJh
c2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgewor
ICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZCh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJh
YmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ7
CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208097</attachid>
            <date>2013-08-04 12:06:16 -0700</date>
            <delta_ts>2013-08-04 21:11:59 -0700</delta_ts>
            <desc>finished the adaptors</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>92729</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7
CisgICAgICAgIHZpZXctPm5ldXRlcigpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEFycmF5QnVmZmVyVmlldzsKKworY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CitwdWJsaWM6Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAorICAgICAgICA6IG1fZGF0YSgwKQorICAgICAgICAs
IG1fc2l6ZUluQnl0ZXMoMCkKKyAgICB7IH0KKworICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250
ZW50cygpOworICAgIAorICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKyAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KKworcHJpdmF0
ZToKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQorICAgIHsgfQorCisgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOworCisg
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7CisgICAgICAgIFplcm9Jbml0aWFsaXplLAor
ICAgICAgICBEb250SW5pdGlhbGl6ZQorICAgIH07CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7CisgICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOworICAgICAgICBtX2RhdGEg
PSAwOworICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKKyAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOworICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7CisgICAgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Cit9OworCitj
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZl
cj4geworcHVibGljOgorICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyKik7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
Y29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7
CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgLy8gT25seSBm
b3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgorICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKKworICAgIGlu
bGluZSB2b2lkKiBkYXRhKCk7CisgICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsK
KyAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7Cisg
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7
CisgICAgCisgICAgdm9pZCBwaW4oKTsKKyAgICB2b2lkIHVucGluKCk7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQorCisgICAgfkFycmF5QnVmZmVy
KCkgeyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOworCisgICAgaW5s
aW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQp
IGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CisgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CisKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OworICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKK307CisKK2ludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCkKK3sKKyAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7CisgICAg
aWYgKHggPCBsZWZ0KQorICAgICAgICB4ID0gbGVmdDsKKyAgICBpZiAocmlnaHQgPCB4KQorICAg
ICAgICB4ID0gcmlnaHQ7CisgICAgcmV0dXJuIHg7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKK30KKworUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCit7CisgICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3Ro
ZXItPmJ5dGVMZW5ndGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorewor
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50
czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0lu
aXRpYWxpemUsIGNvbnRlbnRzKTsKKyAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcg
QXJyYXlCdWZmZXIoY29udGVudHMpKTsKKyAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJj
ZSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShjb250ZW50cyk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Cit9CisKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5p
dGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7CisgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSwgcG9saWN5LCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5t
X2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKK30KKworQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQorICAgIDogbV9waW5Db3VudCgwKQoreworICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOworfQorCit2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOworfQorCitjb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwor
fQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAoreworICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOworICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOworfQorCit1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKKyAgICBp
ZiAoaW5kZXggPCAwKQorICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKKyAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Cit9CisKK3ZvaWQg
QXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5
QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOworfQorCit2b2lkIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQoreworICAgIC8vIERvIG5vdCBh
bGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCisgICAgLy8gRklYTUU6IFdo
eSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1
bWVudHMsCisgICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNv
IHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCisgICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSBy
ZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIGlmIChudW1FbGVtZW50cykgeworICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKKyAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7CisgICAgaWYg
KHBvbGljeSA9PSBaZXJvSW5pdGlhbGl6ZSkKKyAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9
IFdURjo6dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1
ZShyZXN1bHQubV9kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBE
b250SW5pdGlhbGl6ZSk7CisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RNYWxsb2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5t
X2RhdGEpOworICAgIH0KKworICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7CisgICAgICAg
IHJlc3VsdC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Cit9CisKK0FycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKK3sKKyAgICBXVEY6OmZhc3RG
cmVlKG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQXJyYXlC
dWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBI
YXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05NSw2ICs5NiwxMiBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlv
blB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgq
U2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93
bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVi
bGljTGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkg
eyB1Lmxlbmd0aHMucHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVm
ZmVyKiBhcnJheUJ1ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2
b2lkIHNldEFycmF5QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgcmV0dXJuIHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9
IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJl
KDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6
ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9p
ZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6
ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRl
bXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBl
ZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgdWludDY0X3QqIGFzV29y
ZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8g
dXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBpZiAobGVuZ3RoID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBlZEFycmF5KSAvIGVsZW1l
bnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxl
bmd0aCwgZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp+Q29uc3RydWN0aW9uQ29udGV4dCgpCit7Cisg
ICAgaWYgKCEqdGhpcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZhc3RGcmVlKG1fdmVj
dG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
ZGlzb3duKCkKK3sKKyAgICBtX3N0cnVjdHVyZSA9IDA7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQp
CisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpKQorICAgICwgbV92ZWN0b3IoY29u
dGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBt
X21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEFTU0VS
VChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJh
eSk7CisgICAgaWYgKG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIHZtLmhl
YXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJW
aWV3OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xv
dC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVk
IGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBw
cm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9
CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQor
Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAg
IAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBs
ZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0
KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsK
KyAgICB9CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6
ZmluYWxpemUoSlNDZWxsKiBjZWxsKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQo
dGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5t
X21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2Rl
ID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92
ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUg
SlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJ
dCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRv
bid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCBy
ZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlw
ZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3Vu
ZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRo
ZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1
aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29t
cGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBv
c3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIp
IGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVy
eSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2Ug
aGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5n
IHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZl
clZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3Ii
IGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVy
ZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0
aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2lu
ZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMu
CitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJh
eS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGlu
IGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisg
ICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZh
c3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGls
bCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5p
dGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVm
ZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2Fs
bG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBp
cyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5k
IHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXpl
VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4g
c29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRv
IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAg
IC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBW
IHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hh
dCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qg
b3duIHRoZSB2ZWN0b3IuIE5vdGUgdGhhdCAibW9kZSAtIFdhc3RlZnVsVHlwZWRBcnJheSIKKyAg
ICAvLyBpcyB0aGUgYnl0ZSBvZmZzZXQuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKwor
Ly8gV2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBi
ZSBhYmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBl
bHNlLiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBh
bmQgdGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMg
YSBKU0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9k
cyBpbiB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24g
b2YgdGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1l
IHNpbmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29u
dmVuaWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAg
ICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRT
aXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAgJiB+c2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7Cisg
ICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0
cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpOworICAgICAg
ICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICAg
ICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKKyAg
ICB9OworICAgIAorICAgIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4
dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU1RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICAv
LyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciwgbmF0aXZlIHZpZXcsIGFuZCBK
UyBidWZmZXI7IGFsc28KKyAgICAvLyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYg
bmVjZXNzYXJ5LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7
CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIEFycmF5QnVmZmVyVmlldyog
aW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCop
OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05v
dFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHZvaWQqIG1fdmVjdG9yOworICAg
IHVpbnQzMl90IG1fbGVuZ3RoOworICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdh
c3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPj0gV2FzdGVmdWxUeXBl
ZEFycmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRo
aXMpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6YnVm
ZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICBy
ZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisK
K2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sKKyAg
ICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisKK2lu
bGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3RoID0g
MDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNp
b24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJ
bXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVj
dFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZl
clZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVy
VmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBh
IHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFt
cGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdv
JyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZp
ZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8g
ZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8v
ICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5
TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50
ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLwor
Ly8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92
ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRv
IHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRv
IGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOwor
Ly8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUg
bW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2Fu
IGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0
aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBk
ZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxl
bWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xs
b3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8g
c3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlw
ZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShk
b3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7CisvLyAgICAg
c3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKy8vICAgICBzdGF0
aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRvRG91
YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3Mg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisKK3Byb3RlY3RlZDoKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAor
ICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOwor
ICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRo
b2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVk
dW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7
CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7Cisg
ICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUg
Z2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVy
biBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7
CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRp
dmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRp
dmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBp
LCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBz
ZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRv
TmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpKTsKKyAgICB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENv
cHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBu
YXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5l
Y2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgor
ICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5Vmlldyop
OworICAgIHN0YXRpYyB2b2lkIGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUo
anNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5sZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVp
Y2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNO
dW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihnZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7
CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVt
cHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4g
c3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Q
cm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAg
IAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxh
ciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBm
b3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91
dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hv
dWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5
IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BldHlOYW1lLmFzSW5kZXgoKSAhPSBQ
cm9wZXJ0eU5hbWUuTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAg
IHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
c2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5
TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdl
dEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFt
ZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91
bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCgKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICghY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgLy8gWWVzLCBy
ZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRocm93aW5nIGFueXRoaW5nIGlmIHlvdSBz
dG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5kcy4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBzZXRJbmRleFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJv
cGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXks
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXks
IG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsK
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFz
dFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlw
ZWRBcnJheVZlY3RvclRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVy
c2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdl
KHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJh
Y2tpbmdTdG9yZSgKKyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5
VG9rZW4gdG9rZW4pCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0
b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlz
aXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBt
ZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
ICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5k
aWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAor
ICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBv
YmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8g
V2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZl
biBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRl
KiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9y
eSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNj
b3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29y
dCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUg
bWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBo
ZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhl
YXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGlu
ZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBU
aGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlm
IHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQg
bm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVt
b3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91
YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3Ug
ZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtu
b3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3
aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09i
amVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBB
U1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNp
emUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNo
b3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAK
KyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYm
ICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAg
ICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4K
KyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVj
dG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1dHRlcmZs
eSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVj
dC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVU
eXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxp
a2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5j
ZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2Ug
cmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBidXR0ZXJmbHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgp
KTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gQWRhcHRvcjo6
Vmlld1R5cGU6OmNyZWF0ZSh0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9m
ZnNldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwxMCArMjY0
LDYgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogCiBib29sIEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgLy8gTkIuIFRo
ZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdl
IGltcGxpZXMgdGhhdCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJy
aWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCi0gICAgLy8g
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkgPiBNQVhfQVJS
QVlfSU5ERVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gK
KworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUg
Vmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBW
aWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlw
ZTsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRp
dmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFs
dWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5
cGVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBl
QXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVm
IEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2
ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4o
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFz
cyBJbnQ4QXJyYXk7CitjbGFzcyBJbnQxNkFycmF5OworY2xhc3MgSW50MzJBcnJheTsKK2NsYXNz
IFVpbnQ4QXJyYXk7CitjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKK2NsYXNzIFVpbnQxNkFycmF5
OworY2xhc3MgVWludDMyQXJyYXk7CitjbGFzcyBGbG9hdDMyQXJyYXk7CitjbGFzcyBGbG9hdDY0
QXJyYXk7CisKK2NsYXNzIEpTSW50OEFycmF5OworY2xhc3MgSlNJbnQxNkFycmF5OworY2xhc3Mg
SlNJbnQzMkFycmF5OworY2xhc3MgSlNVaW50OEFycmF5OworY2xhc3MgSlNVaW50OENsYW1wZWRB
cnJheTsKK2NsYXNzIEpTVWludDE2QXJyYXk7CitjbGFzcyBKU1VpbnQzMkFycmF5OworY2xhc3Mg
SlNGbG9hdDMyQXJyYXk7CitjbGFzcyBKU0Zsb2F0NjRBcnJheTsKKworc3RydWN0IEludDhBZGFw
dG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4X3QsIEludDhBcnJheSwgSlNJbnQ4
QXJyYXk+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheT4geyB9Oworc3RydWN0IEludDMy
QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwg
SlNJbnQzMkFycmF5PiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFy
cmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXk+IHsgfTsKK3N0cnVj
dCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWlu
dDE2QXJyYXksIEpTVWludDE2QXJyYXk+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJy
YXk+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8
ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXk+IHsgfTsKK3N0cnVjdCBGbG9hdDY0
QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpT
RmxvYXQ2NEFycmF5PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1wZWRBZGFwdG9yIHsKKyAgICB0
eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZpZXdU
eXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAgIAor
ICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZh
bHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3Vi
bGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90IGNs
YW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJl
dHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7Cisg
ICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5QWRh
cHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1OCw2ICsyNTgsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBh
ZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8v
IEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZN
IGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlw
ZWRBcnJheU9ic2VydmVyID0gYWRvcHRSZWYobmV3IFR5cGVkQXJyYXlPYnNlcnZlcigpKTsKIH0K
IAogVk06On5WTSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJU
aHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlPYnNlcnZlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5j
bHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5o
PgpAQCAtMzgxLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRh
YmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheU9i
c2VydmVyPiBtX3R5cGVkQXJyYXlPYnNlcnZlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVn
RXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9y
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgotCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBB
cnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2Rh
dGEpIHsKLSAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9y
IChBcnJheUJ1ZmZlclZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcp
IHsKLSAgICAgICAgaWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdz
QXJlTmV1dGVyYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRl
cmFibGUpCi0gICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsK
LSAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQu
bV9kYXRhKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlICht
X2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0
VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdz
QXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1
cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXco
QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAg
ICB2aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZp
ZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2Vmll
dyA9IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVy
OjpyZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9
PSB2aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZp
ZXctPm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2
aWV3LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0g
dmlldy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAg
bV9maXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2
aWV3LT5tX25leHRWaWV3ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0j
ZGVmaW5lIEFycmF5QnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVy
OwotY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoK
LSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAg
ICwgbV9zaXplSW5CeXRlcygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNv
bnRlbnRzKCk7Ci0KLSAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5z
aWduZWQgc2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6
Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRl
cykgCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXpl
SW5CeXRlcykKLSAgICB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAg
IGVudW0gSW5pdGlhbGl6YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAg
ICAgICAgRG9udEluaXRpYWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRy
eUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUs
IEluaXRpYWxpemF0aW9uUG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghb3RoZXIubV9kYXRhKTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAg
ICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0g
MDsKLSAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8o
QXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVy
Lm1fZGF0YSk7Ci0gICAgICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6
ZUluQnl0ZXMsIHNpemVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxp
emUsIG90aGVyKTsKLSAgICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1lbWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7
Ci0gICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQot
ICAgIHZvaWQqIG1fZGF0YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xh
c3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBP
bmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0g
ICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNv
bnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBj
b25zdDsKLQotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJl
bW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJu
ICFtX2NvbnRlbnRzLm1fZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJD
b250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlu
bGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlu
bGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2Zp
cnN0VmlldzsKLX07Ci0KLWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxl
ZnQsIGludCByaWdodCkKLXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHgg
PCBsZWZ0KQotICAgICAgICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4
ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17
Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5
dGVMZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpj
cmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5
QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxp
emUsIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0
ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29u
dGVudHMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQot
ewotICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5
QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUs
IHBvbGljeSwgY29udGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
Ci19Ci0KLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250
ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9j
b250ZW50cyk7Ci19Ci0KLXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4g
bV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFy
cmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5t
X3NpemVJbkJ5dGVzOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6
c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwo
Y2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBl
bmQgPyBlbmQgLSBiZWdpbiA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2ln
bmVkIEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNp
Z25lZCBjdXJyZW50TGVuZ3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0g
ICAgICAgIGluZGV4ID0gY3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZh
bHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ks
IEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzIt
Yml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBU
aGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAot
ICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hv
dWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3Rp
dmUgY2hlY2sgaGVyZT8KLSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQg
dG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0
b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kg
PT0gWmVyb0luaXRpYWxpemUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRy
eUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0
Lm1fZGF0YSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRp
YWxpemUpOwotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9j
KG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsK
LSAgICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQu
bV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNv
bnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2Rh
dGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsK
LQotI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFi
bGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZD
b3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291
bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBS
ZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwK
Ky8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsg
b2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNl
cHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5l
ZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0
aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJy
ZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9
IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZD
b3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVm
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlz
RGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBk
ZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVm
Q291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNv
dW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAg
IH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+
ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZD
b3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50
ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkK
KyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChi
b29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208108</attachid>
            <date>2013-08-04 21:11:59 -0700</date>
            <delta_ts>2013-08-05 14:21:53 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106388</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1
Y3QgSGFzaFRhYmxlOwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAg
c3RydWN0IE1ldGhvZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5
RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVu
Y3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9p
ZCAoKlNsb3dEb3duQW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5
cGVkZWYgdm9pZCAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0FycmF5QnVmZmVyVmlldyopOworICAg
IEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBsOwogfTsKIAogI2RlZmluZSBDUkVB
VEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzgsNiArMTQ1LDggQEAgc3RydWN0IE1l
dGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAogICAgICAgICAmQ2xhc3NOYW1l
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRUeXBlZEFycmF5SW1w
bCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAko
cmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdIZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBA
QCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhz
LnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdv
cmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJh
eUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9Cisg
ICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHJldHVybiB1LnR5
cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3RhdGljIEluZGV4aW5nSGVh
ZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKQEAgLTExNyw2
ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aDsg
Ly8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLCBi
dXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcgdGhlIHB1YmxpY2x5IHZp
c2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAgdWludDMyX3QgdmVjdG9y
TGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuIFRo
ZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRoaXMsIGFuZCB0aGUgdHlw
ZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIEFycmF5QnVmZmVyVmlldyogYnVmZmVyOworICAgICAgICB9IHR5cGVkQXJyYXk7CiAg
ICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUpCiAgICAgeworICAgICAgICAvLyBGSVhNRTogaG1tLCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxk
IGJlIHByZXR0eSBhd2Vzb21lIHRvIGdldCBzX2luZm8KKyAgICAgICAgLy8gdG8gYmUgYSBzdGF0
aWMuIE5vdCBzdXJlIGlmIHRoYXQgd29ya3MuCiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgaW5kZXhpbmdUeXBlKTsKICAgICB9CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rp
b25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxl
bmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQoreworICAgIGlmIChsZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgewor
ICAgICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24uCisgICAgICAgIHZvaWQqIHRlbXA7Cisg
ICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOworICAgICAg
ICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAg
ICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNp
emUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgYXNXb3Jkc1tpXSA9IDA7
CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRo
YW4gNEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBlbGVtZW50U2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1l
bnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkg
KiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
bV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6fkNvbnN0cnVjdGlvbkNvbnRleHQoKQoreworICAgIGlmICghKnRo
aXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmYXN0RnJlZShtX3ZlY3Rvcik7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OmRpc293bigpCit7
CisgICAgbV9zdHJ1Y3R1cmUgPSAwOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1
ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFz
ZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9y
KCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRl
eHQubW9kZSgpKQoreworICAgIGNvbnRleHQuZGlzb3duKCk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1
ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09
IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpOworICAgIGlm
IChtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICB2bS5oZWFwLmFkZEZpbmFs
aXplcih0aGlzLCBmaW5hbGl6ZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihj
ZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRBcnJheUNvbnRyb2xs
ZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0
YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAg
fHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAg
ICAgcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRl
IHRvIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blBy
b3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwg
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFk
LW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
ZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9w
ZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBsZW5ndGgvYnl0ZU9mZnNldC9ieXRlTGVuZ3Ro
IGFyZSBEb250RW51bSwgYXQgbGVhc3QgaW4gRmlyZWZveC4KKyAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZU9mZnNldCk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnVmZmVyKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQoreworICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsK
KyAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0
aGlzT2JqZWN0LT5tX21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09i
amVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhp
c09iamVjdC0+bV92ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3
X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoK
Ky8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8v
CisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVm
ZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0
byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNv
bmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28g
cm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1p
emluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFu
ZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFs
aXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVl
ZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QK
Ky8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252
ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0Cisv
LyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAi
Y29uc3RydWN0b3IiIGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdz
IGhhdmUgZGlmZmVyZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAor
Ly8gd2hldGhlciB0aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2Vw
YXJhdGUgYmFja2luZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBj
YXBhYmlsaXRpZXMuCitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFz
dCB0eXBlZCBhcnJheS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8g
YWxsb2NhdGVkIGluIGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxp
dmVuZXNzIGlzCisgICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVu
ZXNzLgorICAgIEZhc3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJy
YXkgdGhhdCBzdGlsbCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1v
cnkuIEIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBh
CisgICAgLy8gYnVmZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1
c2luZyBmYXN0Q2FsbG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYn
cyBsaXZlbmVzcyBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBs
aXZlbmVzcywgYW5kIHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgor
ICAgIE92ZXJzaXplVHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQg
d2FzIHVzZWQgaW4gc29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlz
IGhpamFja2VkIHRvIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZm
ZXIuIFRoZQorICAgIC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRo
ZSBKUyB2aWV3LiBWIHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3
aG8ta25vd3Mtd2hhdCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZp
ZXcgZG9lcyBub3Qgb3duIHRoZSB2ZWN0b3IuIE5vdGUgdGhhdCAibW9kZSAtIFdhc3RlZnVsVHlw
ZWRBcnJheSIKKyAgICAvLyBpcyB0aGUgYnl0ZSBvZmZzZXQuCisgICAgV2FzdGVmdWxUeXBlZEFy
cmF5LAorfTsKKworLy8gV2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQg
ZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcg
YW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBt
ZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBX
aGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUg
dXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1w
bGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxk
IGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBp
ZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgY2xhc3MgSlNOb25GaW5hbE9iamVjdCBC
YXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAw
MDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50
U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAgJiB+c2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1
Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9u
Q29udGV4dCk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgQ29uc3RydWN0aW9uQ29u
dGV4dChWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNp
emUpOworICAgICAgICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBkaXNvd24oKTsKKyAgICAgICAgCisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAg
dm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMy
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJh
eU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICB2b2lkKiBtX3Zl
Y3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2Rl
IG1fbW9kZTsKKyAgICB9OworICAgIAorICAgIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU1RhdGUqLCBQcm9wZXJ0eU5hbWUp
OworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICAKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciwgbmF0aXZl
IHZpZXcsIGFuZCBKUyBidWZmZXI7IGFsc28KKyAgICAvLyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRo
ZSBDIGhlYXAgaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlm
TmVjZXNzYXJ5KCk7CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIEFycmF5
QnVmZmVyVmlldyogaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7CisgICAgCisgICAgdW5zaWdu
ZWQgYnl0ZU9mZnNldCgpIGNvbnN0OworCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShK
U0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHZvaWQqIG1fdmVjdG9yOwor
ICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVm
ZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPj0gV2FzdGVmdWxU
eXBlZEFycmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5
KHRoaXMpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6
YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAg
ICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9
CisKK2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sK
KyAgICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisK
K2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3Ro
ID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2
aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2Vs
bDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJy
YXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBA
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVm
ZmVyVmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBv
ZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBl
eGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUs
ICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8v
IFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAg
Ly8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QK
Ky8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFy
cmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBv
aW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisv
LworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwg
Im92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRz
IHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50
IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFw
OworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0
aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3Ug
Y2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmll
cyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0Cisv
LyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUg
ZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBm
b2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLwor
Ly8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAg
dHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2
ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7CisvLyAg
ICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKy8vICAgICBz
dGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRv
RG91YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xh
c3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRl
eHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRy
PEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVf
dCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9y
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBZGFwdG9y
OjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3Rv
cigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KG1f
dmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRj
aCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAt
IGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9
CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0
SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlB
c05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUo
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVk
VmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNr
bHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJ
bmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6
OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywg
dmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8sIE5vbkFycmF5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
KyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwg
Q29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVy
IGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90
ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2
b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopOworICAgIHN0YXRp
YyB2b2lkIGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4
dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAq
IHNpemVvZihBZGFwdG9yOjpUeXBlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0SW5kZXhRdWlja2x5
KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShpbmRleCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09i
amVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
CisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAqIHNpemVvZihBZGFw
dG9yOjpUeXBlKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihn
ZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAg
ICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRvIHN0b3Jl
IHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUu
IEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmpl
Y3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29s
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAg
ICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFRo
aXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0
cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBw
cm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9m
IGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJB
dHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIp
OworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoCisgICAgICAgIHx8IHByb3BldHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWUu
Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNl
OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3Qs
IGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAg
fQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5
SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJB
WV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCgKKyAgICAgICAgICAgIHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUs
IHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghY2FuU2V0SW5k
ZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHkuIEZpcmVm
b3ggcmV0dXJucyB3aXRob3V0IHRocm93aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBiZXlvbmQK
KyAgICAgICAgLy8gdGhlIGJvdW5kcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBzZXRJbmRleFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lID4g
TUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2Rl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6
IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3Rv
clRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJy
YXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3Qt
PmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJhY2tpbmdTdG9yZSgK
KyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHRva2Vu
ID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRo
aXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0
ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBtZW1jcHkobmV3VmVj
dG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZl
Y3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIEJhc2U6OmNv
cHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlz
IGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNl
cyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0s
IGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQg
aXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0
CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJv
IGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3
aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisg
ICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50
IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6
ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAv
LyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVk
IGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQg
Y2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8v
IEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0
aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5n
KiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0
aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJv
cHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNP
YmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2Jq
ZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQs
IGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZs
eSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2Ug
YWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9i
dXR0ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVy
Zmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNy
ZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0o
KSwgdGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7
CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5Ogor
ICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxpa2UgInN1YnRyYWN0
aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5jZSByaWdodCBub3cg
dGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2UgcmVhbGxvY2F0ZWQK
KyAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVM
ZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBidXR0ZXJmbHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICBoZWFw
LT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNy
ZWF0ZSh0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwxMCArMjY0LDYgQEAgU3RyaW5n
IEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogCiBib29sIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgLy8gTkIuIFRoZSBmYWN0IHRoYXQg
d2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGltcGxpZXMgdGhh
dCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRlIGdldE93blBy
b3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCi0gICAgLy8gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZp
bmUgSlNUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50
MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBK
U1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBl
ZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFz
c1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
OjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVy
KiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJh
eUJ1ZmZlciogYnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biBidWZmZXI7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGV4ZWMsIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2Vh
ayhyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Np
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5l
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBU
aGUgZGVmYXVsdCBjb250cm9sbGVyIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAg
YmV0d2VlbgorLy8gYXJyYXkgYnVmZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlw
dENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBK
U0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBs
ZToKKy8vCisvLyAtIElmIHRoZSBKU0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5
QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBm
b3IgYSBKU0FycmF5QnVmZmVyIGFmdGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0
ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisK
K2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250
cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAg
IHZpcnR1YWwgflNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVh
bCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlC
dWZmZXIqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJh
eUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZUFy
ZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmc+CitzdHJ1Y3Qg
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7Cisg
ICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVB
cmcgSlNWaWV3VHlwZTsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2
NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBy
ZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1Zh
bHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVu
YW1lIEpTVmlld1R5cGVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAg
dHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsK
KyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICAKKyAgICBzdGF0aWMg
VHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2
ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFz
TnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUo
dmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0
b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9
Cit9OworCitjbGFzcyBJbnQ4QXJyYXk7CitjbGFzcyBJbnQxNkFycmF5OworY2xhc3MgSW50MzJB
cnJheTsKK2NsYXNzIFVpbnQ4QXJyYXk7CitjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKK2NsYXNz
IFVpbnQxNkFycmF5OworY2xhc3MgVWludDMyQXJyYXk7CitjbGFzcyBGbG9hdDMyQXJyYXk7Citj
bGFzcyBGbG9hdDY0QXJyYXk7CisKK2NsYXNzIEpTSW50OEFycmF5OworY2xhc3MgSlNJbnQxNkFy
cmF5OworY2xhc3MgSlNJbnQzMkFycmF5OworY2xhc3MgSlNVaW50OEFycmF5OworY2xhc3MgSlNV
aW50OENsYW1wZWRBcnJheTsKK2NsYXNzIEpTVWludDE2QXJyYXk7CitjbGFzcyBKU1VpbnQzMkFy
cmF5OworY2xhc3MgSlNGbG9hdDMyQXJyYXk7CitjbGFzcyBKU0Zsb2F0NjRBcnJheTsKKworc3Ry
dWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4X3QsIEludDhB
cnJheSwgSlNJbnQ4QXJyYXk+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5
cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheT4geyB9Owor
c3RydWN0IEludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwg
SW50MzJBcnJheSwgSlNJbnQzMkFycmF5PiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXk+
IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1
aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXk+IHsgfTsKK3N0cnVjdCBVaW50MzJB
ZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXks
IEpTVWludDMyQXJyYXk+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRB
cnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXk+IHsgfTsKK3N0
cnVjdCBGbG9hdDY0QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9h
dDY0QXJyYXksIEpTRmxvYXQ2NEFycmF5PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1wZWRBZGFw
dG9yIHsKKyAgICB0eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBl
ZEFycmF5IFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdU
eXBlOworICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0
dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1
ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOwor
ICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBk
b3VibGUgdG9Eb3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRp
YyB1aW50OF90IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUg
PCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAg
ICAgICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90
Pih2YWx1ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBU
eXBlZEFycmF5QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJv
bGxlcjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+
VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFycmF5
QnVmZmVyOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKK2NsYXNzIEpT
R2xvYmFsT2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgVHlwZWRBcnJheUNv
bnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAor
ICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5j
bHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUg
IlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxB
Y3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtMjU4LDYgKzI1OSwx
MCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNh
blVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZl
ZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFz
IGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisg
ICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0
UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYg
KzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiV2F0
Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCkBAIC0zODEsNiArMzgyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVy
OwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmls
ZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29u
dHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1
bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlC
dWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQXJyYXlC
dWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2
ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEpIHsKLSAgICAgICAgcmVzdWx0
Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGFs
bFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZlclZpZXcqIGkg
PSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAgaWYgKCFpLT5p
c05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCi0gICAgICAgIG1fY29u
dGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9jb250ZW50cy5j
b3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2ZpcnN0VmlldykgewotICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAgcmVtb3Zl
VmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJy
ZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigpOwotICAg
ICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0g
MDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RW
aWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0gICAgbV9maXJz
dFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3KEFycmF5QnVm
ZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1ZmZlcik7Ci0g
ICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZpZXctPm1fcHJl
dlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZWaWV3KQotICAg
ICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAg
ICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9maXJzdFZpZXcgPSB2aWV3LT5t
X25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRWaWV3ID0gMDsK
LX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0jZGVmaW5lIEFycmF5QnVmZmVyX2gK
LQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
bmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotY2xhc3MgQXJyYXlCdWZmZXJW
aWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoKLSAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAgICwgbV9zaXplSW5CeXRlcygwKQot
ICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0KLSAgICB2b2lk
KiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSB7
IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXJyYXlCdWZmZXJDb250
ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykgCi0gICAgICAgIDogbV9kYXRh
KGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKLSAgICB7IH0KLQot
ICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAgIGVudW0gSW5pdGlhbGl6YXRpb25Q
b2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAgICAgICAgRG9udEluaXRpYWxpemUK
LSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEluaXRpYWxpemF0aW9uUG9saWN5
LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNv
bnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3RoZXIubV9kYXRhKTsKLSAg
ICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVz
ID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgbV9zaXplSW5C
eXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8oQXJyYXlCdWZmZXJDb250ZW50cyYg
b3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIEFy
cmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6ZUluQnl0ZXMsIHNpemVvZihjaGFy
KSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUsIG90aGVyKTsKLSAgICAgICAg
aWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1lbWNweShv
dGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7Ci0gICAgICAgIG90aGVyLm1fc2l6
ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQotICAgIHZvaWQqIG1fZGF0YTsKLSAg
ICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNp
Z25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0
ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1l
bnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0gICAgaW5saW5lIHZvaWQqIGRhdGEo
KTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwotICAgIGlubGluZSB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBjb25zdDsKLQotICAgIHZvaWQgYWRk
VmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJW
aWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZl
ckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmll
d3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsg
fQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRp
b25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMm
KTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVk
IGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcElu
ZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShp
bnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1f
Y29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKLX07Ci0KLWludCBB
cnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKLXsKLSAg
ICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHggPCBsZWZ0KQotICAgICAgICB4ID0g
bGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4ID0gcmlnaHQ7Ci0gICAgcmV0dXJu
IHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVu
dHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17Ci0gICAgcmV0dXJuIEFycmF5QnVm
ZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7Ci19Ci0KLVBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291
cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29u
dGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwg
MSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUsIGNvbnRlbnRzKTsKLSAgICBp
ZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKLSAg
ICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJu
IGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotfQotCi1QYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewotICAgIHJldHVybiBjcmVhdGUo
bnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udElu
aXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5
QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKLXsKLSAgICBBcnJh
eUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFs
bG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOwot
ICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19Ci0KLUFycmF5QnVmZmVyOjpB
cnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6IG1fZmlyc3RW
aWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7Ci19Ci0KLXZvaWQq
IEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19
Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3Ro
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwotfQotCi1Q
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGNs
YW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcElu
ZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
QXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBjb25z
dAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBlbmQgPyBlbmQgLSBiZWdpbiA6IDA7
Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpjbGFt
cEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0g
Ynl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4ID0gY3VycmVu
dExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBjdXJyZW50
TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNv
bnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMm
IHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0
b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5j
dGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwg
aWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAg
IC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KLSAgICBp
ZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVu
dHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50
cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgYWxsb2NhdGlv
blN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCi0g
ICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVu
dHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0YSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRpYWxpemUpOwotICAgICAgICBhbGxv
Y2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVu
dEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxs
b2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVs
ZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJl
c3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJD
b250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2RhdGEpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsKLQotI2VuZGlmIC8vIEFycmF5QnVm
ZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVy
cmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dz
IHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3Ug
aWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8g
anVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVj
dCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1
bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFk
ZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6Cisg
ICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1l
bnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJl
ZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFs
SW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAg
ICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
fkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29s
IGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVu
dDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNE
ZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAg
ICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAg
ICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFi
bGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChk
ZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFzZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVk
KCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8v
IERlZmVycmFibGVSZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208145</attachid>
            <date>2013-08-05 14:21:53 -0700</date>
            <delta_ts>2013-08-06 15:38:59 -0700</delta_ts>
            <desc>more!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>146091</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5
QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZp
ZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVyaWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNU
eXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4g
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFy
cmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAg
IEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9y
OjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBk
YXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEpLAorICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpU
eXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUp
LCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OworCisgICAgQWRhcHRvcjo6VHlw
ZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGluZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOwor
ICAgICAgICBkYXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0K
KyAgICAKKyAgICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBwb3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5n
dGgoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBv
ZmZzZXQgKyBwb3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAg
ICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0
VHlwZSgpOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZp
bmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5
VmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5
dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IEFkYXB0b3I6OlR5
cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFy
cmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0
YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5l
cmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRl
KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghdmVyaWZ5U3ViUmFuZ2UoYnVmLCBieXRlT2Zm
c2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEdlbmVyaWNUeXBlZEFycmF5VmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlw
ZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0
aWFsaXplZCgKKyAgICB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsK
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYg
KzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUu
bGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJf
dCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisg
ICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZl
cjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1
cm4gdS50eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRl
eGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBA
IC0xMTcsNiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNM
ZW5ndGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkg
dHlwZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJs
aWNseSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90
IHZlY3Rvckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9y
YWdlLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQg
dGhlIHR5cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFy
cmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2VlbXMgbGlrZSBp
dCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAgIC8vIHRvIGJl
IGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAgICAgfQogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29u
c3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50
MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkK
KyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGlt
aXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0
ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsK
KyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJy
YXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgIGFzV29yZHNb
aV0gPSAwOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2Ug
bW9yZSB0aGFuIDRHQiBsZXNzIGEgZmV3IGJ5dGVzLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oVUlOVF9NQVggLSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIC8gZWxlbWVudFNp
emUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3Ro
LCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpICogZWxlbWVudFNpemUpOworICAgIAorICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJl
OworICAgIG1fbW9kZSA9IE92ZXJzaXplVHlwZWRBcnJheTsKK30KKworSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6On5Db25zdHJ1Y3Rpb25Db250ZXh0KCkKK3sKKyAgICBp
ZiAoISp0aGlzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZmFzdEZyZWUobV92ZWN0b3Ip
OworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpkaXNv
d24oKQoreworICAgIG1fc3RydWN0dXJlID0gMDsKK30KKworSlNBcnJheUJ1ZmZlclZpZXc6OkpT
QXJyYXlCdWZmZXJWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAg
ICA6IEJhc2Uodm0sIGNvbnRleHQuc3RydWN0dXJlKCkpCisgICAgLCBtX3ZlY3Rvcihjb250ZXh0
LnZlY3RvcigpKQorICAgICwgbV9sZW5ndGgoY29udGV4dC5sZW5ndGgoKSkKKyAgICAsIG1fbW9k
ZShjb250ZXh0Lm1vZGUoKSkKK3sKKyAgICBjb250ZXh0LmRpc293bigpOworfQorCit2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQVNTRVJUKG1f
bW9kZSA9PSBGYXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KTsK
KyAgICBpZiAobV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgdm0uaGVhcC5h
ZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmpl
Y3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLnR5cGVkQXJyYXlD
b250cm9sbGVyLT50b0pTKAorICAgICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLCB0aGlzT2JqZWN0LT5idWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJW
aWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVP
ZmZzZXQoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZt
KCkudHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwK
KyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAg
ICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0Cisg
ICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7
CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0
byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZp
bmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAg
fHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAg
ICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVs
ZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8
IHByb2VwcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGws
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0
ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUg
PT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wg
SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
Y2VsbCk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJy
YXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgaWYg
KHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIGZhc3RG
cmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVm
ZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZlcyB0d28gcHVy
cG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRlIHBhcmFtZXRl
cnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlzaWJsZSAiSlNB
cnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2VzIHdoZW4gaXQg
d2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgorLy8gICAgd2l0
aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisvLworLy8gVGhl
c2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEgbWF0dGVyIG9m
IG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5nIGFzIG11Y2gg
Y29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8gdGVtcGxhdGUg
c3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8gc2VtYW50aWNz
OyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2JleWluZyBhIGNv
bnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4KKy8vCisvLyBP
bmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2ggY3JhenkgaXMg
dGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRlc3BpdGUgaGF2
aW5nIGEgImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBUeXBlZCBhcnJh
eSB2aWV3cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJpZyB0aGV5IGFy
ZSBhbmQKKy8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhhdCByZXF1aXJl
cyBhIHNlcGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNpZmllZCBuZXV0
ZXJpbmcgY2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAgLy8gU21hbGwg
YW5kIGZhc3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBhIHZlY3Rvcgor
ICAgIC8vIGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5cGVkQXJyYXku
IFYncyBsaXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIHZpZXcn
cyBsaXZlbmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIGxhcmdlIHR5
cGVkIGFycmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBtdWNoCisgICAg
Ly8gbWVtb3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0aGF0IGNvdWxk
IGhvbGQgYQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZlY3RvciBhbGxv
Y2F0ZWQgdXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNpemVUeXBlZEFy
cmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAgIC8vIHRoZSB2
aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXplciB0byBkZWxl
dGUgVi4KKyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0eXBlZCBhcnJh
eSB0aGF0IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdIZWFkZXIKKyAg
ICAvLyBpcyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgYXJy
YXkgYnVmZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2ludHMgYmFj
ayB0byB0aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxvY2F0ZWQg
dXNpbmcgd2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5LgorICAgIC8v
IFRoZSB2aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLiBOb3RlIHRoYXQgIm1vZGUgLSBXYXN0
ZWZ1bFR5cGVkQXJyYXkiCisgICAgLy8gaXMgdGhlIGJ5dGUgb2Zmc2V0LgorICAgIFdhc3RlZnVs
VHlwZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZp
ZXcsIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZm
ZXJWaWV3IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdh
c3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRl
cmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2
aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MK
Ky8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3
ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1p
dCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3Ro
LCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICog
ZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYg
fnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3Mg
Q29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0
cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVj
dGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVs
ZW1lbnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7Cisg
ICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1
cmU7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZGlzb3duKCk7CisgICAgICAgIAorICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9Cisg
ICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgICAg
IHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFR5
cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgdm9p
ZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBlZEFy
cmF5TW9kZSBtX21vZGU7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYs
IENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cisg
ICAgCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1NUYXRlKiwgUHJvcGVy
dHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIs
IG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEg
aW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0OworCisgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAg
IHZvaWQqIG1fdmVjdG9yOworICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgIFR5cGVkQXJyYXlN
b2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJh
eUJ1ZmZlclZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAor
I2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmICht
X21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93
RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBK
U0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5
SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCkt
PmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
SlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgpLT5n
ZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWduZWQg
SlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKSBjb25zdAoreworICAgIGlmIChtX21vZGUg
PCBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX21v
ZGUgLSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNCAr
MjM1LDE0IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpT
QXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyB2b2lk
IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHR5cGVkIGFycmF5
IHZpZXcgaXMgb3VyIHJlcHJlc2VudGF0aW9uIG9mIGEgdHlwZWQgYXJyYXkgb2JqZWN0IGFzIHNl
ZW4KKy8vIGZyb20gSmF2YVNjcmlwdC4gRm9yIGV4YW1wbGU6CisvLworLy8gdmFyIG8gPSBuZXcg
SW50OEFycmF5KDEwMCk7CisvLworLy8gSGVyZSwgJ28nIHBvaW50cyB0byBhIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PGludDhfdD4uCisvLworLy8gVmlld3MgY29udGFpbiBmaXZlIGZpZWxkczoK
Ky8vCisvLyAgICAgU3RydWN0dXJlKiBTICAgICAvLyBmcm9tIEpTQ2VsbAorLy8gICAgIEJ1dHRl
cmZseSogQiAgICAgLy8gZnJvbSBKU09iamVjdAorLy8gICAgIEVsZW1lbnRUeXBlKiBWCisvLyAg
ICAgdWludDMyX3QgTAorLy8gICAgIFR5cGVkQXJyYXlNb2RlIE0KKy8vCisvLyBUaGVzZSBmaWVs
ZHMgdGFrZSB1cCBhIHRvdGFsIG9mIGZvdXIgcG9pbnRlci13aWR0aCB3b3Jkcy4gRklYTUU6IE1h
a2UKKy8vIGl0IHRha2UgbGVzcyB3b3JkcyEKKy8vCisvLyBCIGlzIHVzdWFsbHkgdW51c2VkIGJ1
dCBtYXkgc3RvcmVkIHNvbWUgYWRkaXRpb25hbCAib3ZlcmZsb3ciIGRhdGEgZm9yCisvLyBvbmUg
b2YgdGhlIG1vZGVzLiBWIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHR5cGVkIGFy
cmF5J3MgZGF0YSwKKy8vIGFuZCBtYXkgcG9pbnQgdG8gZWl0aGVyIEdDLW1hbmFnZWQgY29waWVk
IHNwYWNlLCBvciBkYXRhIGluIHRoZSBDIGhlYXA7CisvLyB3aGljaCBvZiB0aG9zZSB0aGluZ3Mg
aXQgcG9pbnRzIHRvIGlzIGdvdmVybmVkIGJ5IHRoZSBtb2RlIGFsdGhvdWdoIGZvcgorLy8gc2lt
cGxlIGFjY2Vzc2VzIHRvIHRoZSB2aWV3IHlvdSBjYW4ganVzdCByZWFkIGZyb20gdGhlIHBvaW50
ZXIgZWl0aGVyCisvLyB3YXkuIE0gc3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSB2aWV3LiBMIGlz
IHRoZSBsZW5ndGgsIGluIHVuaXRzIHRoYXQKKy8vIGRlcGVuZCBvbiB0aGUgdmlldydzIHR5cGUu
CisKKy8vIFRoZSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpcyB0ZW1wbGF0aXplZCBieSBhbiBB
ZGFwdG9yIHRoYXQgY29udHJvbHMKKy8vIHRoZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBpdCdzIGNv
bnZlcnRlZDsgaXQgc2hvdWxkIG9iZXkgdGhlIGZvbGxvd2luZworLy8gaW50ZXJmYWNlOyBJIHVz
ZSBpbnQ4X3QgYXMgYW4gZXhhbXBsZToKKy8vCisvLyBzdHJ1Y3QgQWRhcHRvciB7CisvLyAgICAg
dHlwZWRlZiBpbnQ4X3QgVHlwZTsKKy8vICAgICB0eXBlZGVmIEludDhBcnJheSBWaWV3VHlwZTsK
Ky8vICAgICB0eXBlZGVmIEpTSW50OEFycmF5IEpTVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGlu
dDhfdCB0b05hdGl2ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNW
YWx1ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKKy8vICAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0
aWMgZG91YmxlIHRvRG91YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1
ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0
cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUq
LCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpOyB9Cisg
ICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZU9mKG1fbGVuZ3RoLCBzaXpl
b2YoQWRhcHRvcjo6VHlwZSkpOyB9CisgICAgCisgICAgY29uc3QgQWRhcHRvcjo6VHlwZSogdHlw
ZWRWZWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorICAgIEFkYXB0b3I6OlR5cGUqIHR5
cGVkVmVjdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpU
eXBlKj4obV92ZWN0b3IpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50
IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdAorICAgIC8vIHN1
cHBvcnRzIC0gaGVuY2UgdGhlIHNsaWdodCByZWR1bmRhbmN5LgorICAgIGJvb2wgY2FuR2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3Ro
OworICAgIH0KKyAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgQWRhcHRvcjo6
VHlwZSBnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKHVuc2lnbmVkIGkpCisgICAgeworICAg
ICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVkVmVjdG9yKClb
aV07CisgICAgfQorICAgIAorICAgIGRvdWJsZSBnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSh1bnNp
Z25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRvRG91YmxlKGdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRv
SlNWYWx1ZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKHVuc2lnbmVkIGksIEFkYXB0b3I6
OlR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAg
ICAgdHlwZWRWZWN0b3IoKVtpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
ZGV4UXVpY2tseVRvRG91YmxlKHVuc2lnbmVkIGksIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUo
QWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRl
eFF1aWNrbHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZShleGVjLCB2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbywgTm9uQXJyYXkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBjb25zdCBU
eXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFwdG9yOjp0eXBlVmFsdWU7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJ
c05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpOworCisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJh
Y2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICAvLyBB
bGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRo
ZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9j
YXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4
dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0
KHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5s
ZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFk
YXB0b3I6OlR5cGUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Cisg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5n
dGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAg
ICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2ts
eShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4UXVp
Y2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmly
ZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxl
bmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRv
IHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywg
aSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBtYXRj
aGluZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRl
bXB0cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMg
b24gdHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CisgICAgLy8gb2YgYm91bmRzLgor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQ
cm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAg
ICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZS5Ob3RBbkluZGV4
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVBy
b3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1B
WF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFjYW5HZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KHByb3BlcnR5
TmFtZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
Pgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKKyAg
ICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7
CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFjYW5TZXRJbmRleFF1aWNrbHko
cHJvcGVydHlOYW1lKSkgeworICAgICAgICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5z
IHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAv
LyB0aGUgYm91bmRzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHNldEluZGV4
UXVpY2tseShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlf
SU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0
ZVByb3BlcnR5KAorICAgICAgICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUg
PT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheTogeworICAgICAg
ICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yVG9rZW4sIHRo
aXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheTogeworICAg
ICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2Vs
bCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlwZWRB
cnJheVZlY3RvclRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+
bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVj
dG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2Uo
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZl
Y3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVj
dG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlz
T2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdT
dG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93
bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBXZSBwbGF5IHRoaXMgZ2FtZSBiZWNh
dXNlIHdlIHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVuIGZyb20gcGxhY2VzIHRoYXQKKyAg
ICAvLyBkb24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUqIG9yIHRoZSBWTSwgYW5kIHdlIG9u
bHkgYWxsb2NhdGUgc28gbGl0dGxlCisgICAgLy8gbWVtb3J5IGhlcmUgdGhhdCBpdCdzIG5vdCBu
ZWNlc3NhcnkgdG8gdHJpZ2dlciBhIEdDIC0ganVzdCBhY2NvdW50aW5nIHdoYXQKKyAgICAvLyB3
ZSBoYXZlIGRvbmUgaXMgZ29vZCBlbm91Z2guIFRoZSBzb3J0IG9mIGJpemFycm8gZXhjZXB0aW9u
IHRvIHRoZSAiYWxsb2NhdGluZworICAgIC8vIGxpdHRsZSBtZW1vcnkiIGlzIHdoZW4gd2UgdHJh
bnNmZXIgYSBiYWNraW5nIGJ1ZmZlciBpbnRvIHRoZSBDIGhlYXA7IHRoaXMKKyAgICAvLyB3aWxs
IHRlbXBvcmFyaWx5IGdldCBjb3VudGVkIHRvd2FyZHMgaGVhcCBmb290cHJpbnQgKGluY29ycmVj
dGx5LCBpbiB0aGUgY2FzZQorICAgIC8vIG9mIGFkb3B0aW5nIGFuIG92ZXJzaXplIHR5cGVkIGFy
cmF5KSBidXQgd2UgZG9uJ3QgR0MgaGVyZSBhbnl3YXkuIFRoYXQncworICAgIC8vIGFsbW9zdCBj
ZXJ0YWlubHkgZmluZS4gVGhlIHdvcnN0IGNhc2UgaXMgaWYgeW91IGNyZWF0ZWQgYSB0b24gb2Yg
ZmFzdCB0eXBlZAorICAgIC8vIGFycmF5cywgYW5kIGRpZCBub3RoaW5nIGJ1dCBjYXVzZWQgYWxs
IG9mIHRoZW0gdG8gc2xvdyBkb3duIGFuZCB3YXN0ZSBtZW1vcnkuCisgICAgLy8gSW4gdGhhdCBj
YXNlLCB5b3VyIG1lbW9yeSBmb290cHJpbnQgd2lsbCBkb3VibGUgYmVmb3JlIHRoZSBHQyByZWFs
aXplcyB3aGF0J3MKKyAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhpbmcqIHRvIHRyaWdn
ZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdworICAgIC8vIHRoYXQgeW91ICpo
YWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBwcm9wcmlhdGVseS4K
KyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAgICBEZWZlckdDRm9y
QVdoaWxlIGRlZmVyR0MoKmhlYXApOworICAgIAorICAgIEFTU0VSVCghdGhpc09iamVjdC0+aGFz
SW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IHRoaXNPYmplY3QtPmJ5dGVT
aXplKCk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJlY29yZCwgaW4gdGhlIGJ1
dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5t
X21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYgIW1fYnV0dGVyZmx5ICYmIHNpemUg
Pj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFs
bG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICBtX2J1dHRlcmZseSA9
IHN0YXRpY19jYXN0PEluZGV4aW5nSGVhZGVyKj4obV92ZWN0b3IpLT5idXR0ZXJmbHkoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93
QXJyYXlSaWdodCgKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5LCBoZWFwLT52bSgpLCB0aGlzT2Jq
ZWN0LCBzdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNl
IEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRo
aXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIC8v
IEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20g
ZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ug
d2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAorICAgICAgICAv
LyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
QWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJ1dHRl
cmZseSgpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIGhlYXAtPmFkZFJlZmVy
ZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBBZGFwdG9y
OjpWaWV3VHlwZTo6Y3JlYXRlKHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRl
T2Zmc2V0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDEwICsy
NjQsNiBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjCiAKIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICAvLyBOQi4g
VGhlIGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3Jh
Z2UgaW1wbGllcyB0aGF0IGl0IGlzIG5vdAotICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3Zl
cnJpZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKLSAgICAv
LyBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCi0gICAgCiAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+IE1BWF9B
UlJBWV9JTkRFWCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxh
dGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFy
cmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lO
Rk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFL
RV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5G
TyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3Jz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNV
aW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0
b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQYXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkg
eyB9CitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyKCkgeyB9CisKK0pTQXJyYXlCdWZmZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0
b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciog
bmF0aXZlKQoreworICAgIGlmIChKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBuYXRpdmUtPm1fd3Jh
cHBlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAKKyAgICBKU0FycmF5QnVm
ZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoZXhlYywgbmF0aXZlKTsKKyAgICBu
YXRpdmUtPm1fd3JhcHBlciA9IFBhc3NXZWFrKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
CisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZWZhdWx0IGNvbnRyb2xsZXIgdXNlZCBmb3Ig
bWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisvLyBhcnJheSBidWZmZXJzIGFuZCB0
aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29yZS4gVGhpcyBpc24ndCB3aGF0CisvLyBXZWJD
b3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1c2VzIHdoZW4gcnVubmluZyBzdGFuZGFsb25l
LiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgorLy8KKy8vIC0gSWYgdGhlIEpTQXJyYXlCdWZm
ZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZmZXIgc3RheXMgYWxpdmUuCisvLworLy8gLSBJ
ZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBhIEpTQXJyYXlCdWZmZXIgYWZ0ZXIgb25lIGhh
ZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgaXQgZGlkbid0IGRpZSwgdGhlbiB5b3Ug
Z2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xhc3MgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+U2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eUFkYXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5QWRh
cHRvcnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5
cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBl
QXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAg
IHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisK
KyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZh
bHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFz
SW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAg
IHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdU
eXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBGbG9hdFR5
cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVm
IFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdU
eXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFs
dWVBcmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91
YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFwdG9yOworc3Ry
dWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3QgVWludDhBZGFw
dG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsK
K3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOworc3RydWN0IEZs
b2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmlj
VHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRv
cj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9y
PiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9y
PiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9y
PiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVk
QWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpT
VWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQx
NkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCitzdHJ1Y3Qg
SW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5
LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheSwg
VHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5
QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJbnQzMj4geyB9
Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDhf
dCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0cnVjdCBVaW50
MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWludDE2QXJy
YXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9y
IDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWlu
dDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0
VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXksIFR5
cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlB
ZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+
IHsgfTsKKworc3RydWN0IFVJbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVkZWYgdWludDhf
dCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7CisgICAgdHlw
ZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5
cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAgCisgICAgc3Rh
dGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHN0
ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJ
bnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05h
dGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1Zh
bHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZSh1aW50
OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFs
dWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50
MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1
NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlBZGFwdG9yc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29u
dHJvbGxlcigpIHsgfQorVHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxl
cigpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVj
U3RhdGU7CitjbGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2Ns
YXNzIFR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNv
bnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZp
cnR1YWwgflR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5
QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZl
ciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJh
eUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlw
ZWRBcnJheURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5m
bzsKLQotZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlw
ZWRBcnJheUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwK
LSAgICBUeXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBU
eXBlZEFycmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZs
b2F0MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJ
bmZvKDApCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhP
ZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9m
ZnNldCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9y
YWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3Ro
T2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsK
LSAgICBzaXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsK
LX07Ci0KLWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXks
Ci0gICAgVW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewot
ICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZUludDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVJbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0
LnByaW50KCJUeXBlVWludDhDbGFtcGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVVaW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5w
cmludCgiVHlwZUZsb2F0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0
NjQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5VHlwZV9o
CisjZGVmaW5lIFR5cGVkQXJyYXlUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBUeXBlZEFycmF5VHlwZSB7CisgICAgTm90VHlw
ZWRBcnJheSwKKyAgICBUeXBlSW50OCwKKyAgICBUeXBlVWludDgsCisgICAgVHlwZVVpbnQ4Q2xh
bXBlZCwKKyAgICBUeXBlSW50MTYsCisgICAgVHlwZVVpbnQxNiwKKyAgICBUeXBlSW50MzIsCisg
ICAgVHlwZVVpbnQzMiwKKyAgICBUeXBlRmxvYXQzMiwKKyAgICBUeXBlRmxvYXQ2NCwKKyAgICBU
eXBlRGF0YVZpZXcKK307CisKK2lubGluZSBib29sIGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBl
IHR5cGUpIGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c0ludChUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWlu
dDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAg
ICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lu
bGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJyYXlUeXBlIHR5cGUp
IGNvbnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQ2xh
bXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHJldHVybiB0eXBlID09IFR5
cGVVaW50OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RG
IHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlw
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTMzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJl
Z0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgi
CiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxp
bmVzLmgiCkBAIC0yNTgsNiArMjU5LDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRv
cHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJ
bml0aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBp
bml0aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVk
QXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KCkpOwogfQogCiBWTTo6flZNKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5o
IgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtSYW5kb20uaCIK
QEAgLTM4MSw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9m
aWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJh
c2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250
cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9y
ZWdFeHBDYWNoZTsKICAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0
b3I7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNv
dXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVy
LmgiCi0KLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1ib29s
IEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3Rv
cjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKQotewotICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4ga2VlcEFsaXZlKHRoaXMpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzLm1f
ZGF0YSkgewotICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBm
b3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0Vmll
dykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmll
d3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGFsbFZpZXdzQXJlTmV1
dGVyYWJsZSkKLSAgICAgICAgbV9jb250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwotICAgIGVsc2Ug
ewotICAgICAgICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQpOwotICAgICAgICBpZiAoIXJlc3Vs
dC5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgd2hpbGUg
KG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmly
c3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmll
d3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAg
Y3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmll
dyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOwot
ICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0
VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZW
aWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZm
ZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0aGlz
ID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAgICAg
dmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAgaWYg
KHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcg
PSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAgICAg
ICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9
IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJh
eUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgJKHJl
dmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFycmF5QnVmZmVyX2gK
LSNkZWZpbmUgQXJyYXlCdWZmZXJfaAotCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgQXJyYXlCdWZm
ZXI7Ci1jbGFzcyBBcnJheUJ1ZmZlclZpZXc7Ci0KLWNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwotcHVibGlj
OgotICAgIEFycmF5QnVmZmVyQ29udGVudHMoKSAKLSAgICAgICAgOiBtX2RhdGEoMCkKLSAgICAg
ICAgLCBtX3NpemVJbkJ5dGVzKDApCi0gICAgeyB9Ci0KLSAgICBpbmxpbmUgfkFycmF5QnVmZmVy
Q29udGVudHMoKTsKLQotICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KLSAgICB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KLQotcHJpdmF0
ZToKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKSAKLSAgICAgICAgOiBtX2RhdGEoZGF0YSkKLSAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNp
emVJbkJ5dGVzKQotICAgIHsgfQotCi0gICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotCi0g
ICAgZW51bSBJbml0aWFsaXphdGlvblBvbGljeSB7Ci0gICAgICAgIFplcm9Jbml0aWFsaXplLAot
ICAgICAgICBEb250SW5pdGlhbGl6ZQotICAgIH07Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgSW5pdGlhbGl6YXRpb25Qb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICB2b2lk
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCFvdGhlci5tX2RhdGEpOwotICAgICAgICBvdGhlci5tX2RhdGEgPSBtX2RhdGE7Ci0gICAg
ICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgICAgICBtX2RhdGEg
PSAwOwotICAgICAgICBtX3NpemVJbkJ5dGVzID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvcHlU
byhBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3Ro
ZXIubV9kYXRhKTsKLSAgICAgICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobV9z
aXplSW5CeXRlcywgc2l6ZW9mKGNoYXIpLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlh
bGl6ZSwgb3RoZXIpOwotICAgICAgICBpZiAoIW90aGVyLm1fZGF0YSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbWVtY3B5KG90aGVyLm1fZGF0YSwgbV9kYXRhLCBtX3NpemVJbkJ5dGVz
KTsKLSAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgfQot
Ci0gICAgdm9pZCogbV9kYXRhOwotICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Ci19OwotCi1j
bGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lk
KiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKLQotICAgIC8v
IE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4K
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7Ci0K
LSAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwotICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkg
Y29uc3Q7Ci0gICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLQotICAgIGlu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNv
bnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4p
IGNvbnN0OwotCi0gICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOwotICAgIHZvaWQg
cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBi
b29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Ci0gICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1
cm4gIW1fY29udGVudHMubV9kYXRhOyB9Ci0KLSAgICB+QXJyYXlCdWZmZXIoKSB7IH0KLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZl
ckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSk7Ci0KLSAgICBpbmxpbmUgQXJyYXlCdWZm
ZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwotICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3Q7Ci0gICAg
aW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsKLSAgICBzdGF0aWMg
aW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKLQotICAg
IEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1f
Zmlyc3RWaWV3OwotfTsKLQotaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4LCBpbnQg
bGVmdCwgaW50IHJpZ2h0KQotewotICAgIEFTU0VSVChsZWZ0IDw9IHJpZ2h0KTsKLSAgICBpZiAo
eCA8IGxlZnQpCi0gICAgICAgIHggPSBsZWZ0OwotICAgIGlmIChyaWdodCA8IHgpCi0gICAgICAg
IHggPSByaWdodDsKLSAgICByZXR1cm4geDsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
QXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVu
dEJ5dGVTaXplKQotewotICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRl
U2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUpOwotfQotCi1QYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikK
LXsKLSAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShvdGhlci0+ZGF0YSgpLCBvdGhlci0+
Ynl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6
OmNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAg
QXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShieXRlTGVuZ3RoLCAxLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlh
bGl6ZSwgY29udGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGFkb3B0UmVmKG5ldyBBcnJh
eUJ1ZmZlcihjb250ZW50cykpOwotICAgIG1lbWNweShidWZmZXItPmRhdGEoKSwgc291cmNlLCBi
eXRlTGVuZ3RoKTsKLSAgICByZXR1cm4gYnVmZmVyLnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJiBj
b250ZW50cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRz
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVk
IGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xp
Y3kgcG9saWN5KQotewotICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6
ZSwgcG9saWN5LCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMp
KTsKLX0KLQotQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNv
bnRlbnRzKQotICAgIDogbV9maXJzdFZpZXcoMCkKLXsKLSAgICBjb250ZW50cy50cmFuc2Zlciht
X2NvbnRlbnRzKTsKLX0KLQotdm9pZCogQXJyYXlCdWZmZXI6OmRhdGEoKQotewotICAgIHJldHVy
biBtX2NvbnRlbnRzLm1fZGF0YTsKLX0KLQotY29uc3Qgdm9pZCogQXJyYXlCdWZmZXI6OmRhdGEo
KSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKLX0KLQotdW5zaWduZWQg
QXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRz
Lm1fc2l6ZUluQnl0ZXM7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1w
bChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsKLX0KLQotUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRlTGVuZ3RoKCkpOwotfQotCi1Q
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2VJbXBsKHVuc2lnbmVkIGJl
Z2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGJlZ2luIDw9
IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKLSAgICByZXR1cm4gQXJyYXlCdWZmZXI6OmNyZWF0ZShz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2luLCBzaXplKTsKLX0KLQotdW5z
aWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4KSBjb25zdAotewotICAgIHVu
c2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Ci0gICAgaWYgKGluZGV4IDwgMCkK
LSAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7Ci0gICAgcmV0dXJuIGNsYW1w
VmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwotfQotCi12b2lkIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGlj
eSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQotewotICAgIC8vIERvIG5vdCBhbGxvdyAz
Mi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCi0gICAgLy8gRklYTUU6IFdoeSBub3Q/
IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMs
Ci0gICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBz
aG91bGQgd2UgaW5jbHVkZSBhCi0gICAgLy8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmlj
dGl2ZSBjaGVjayBoZXJlPwotICAgIGlmIChudW1FbGVtZW50cykgewotICAgICAgICB1bnNpZ25l
ZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYg
KHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgewotICAgICAgICAg
ICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgYm9vbCBhbGxvY2F0aW9uU3VjY2VlZGVkID0gZmFsc2U7Ci0gICAgaWYgKHBvbGlj
eSA9PSBaZXJvSW5pdGlhbGl6ZSkKLSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdURjo6
dHJ5RmFzdENhbGxvYyhudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHBvbGljeSA9PSBEb250SW5p
dGlhbGl6ZSk7Ci0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RNYWxs
b2MobnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJlc3VsdC5tX2RhdGEp
OwotICAgIH0KLQotICAgIGlmIChhbGxvY2F0aW9uU3VjY2VlZGVkKSB7Ci0gICAgICAgIHJlc3Vs
dC5tX3NpemVJbkJ5dGVzID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci19Ci0KLUFycmF5QnVmZmVy
Q29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnRzKCkKLXsKLSAgICBXVEY6OmZhc3RGcmVlKG1f
ZGF0YSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkFycmF5QnVmZmVy
OwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJfaApJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZp
ZXcuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotQXJyYXlCdWZmZXJWaWV3OjpBcnJh
eUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgICAgICA6IG1fYnl0ZU9mZnNldChi
eXRlT2Zmc2V0KQotICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCi0gICAgICAgICwgbV9i
dWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fcHJldlZpZXcoMCkKLSAgICAgICAgLCBtX25leHRW
aWV3KDApCi17Ci0gICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNo
YXIqPihtX2J1ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAwOwotICAgIGlmIChtX2J1
ZmZlcikgCi0gICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwotfQotCi1BcnJheUJ1ZmZl
clZpZXc6On5BcnJheUJ1ZmZlclZpZXcoKQotewotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAg
bV9idWZmZXItPnJlbW92ZVZpZXcodGhpcyk7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJWaWV3Ojpu
ZXV0ZXIoKQotewotICAgIG1fYnVmZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOwotfQot
Ci19CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzMzUyKQorKysg
U291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjA4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEFycmF5QnVmZmVyVmlld19oCi0jZGVmaW5lIEFy
cmF5QnVmZmVyVmlld19oCi0KLSNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXIuaD4KLQotI2luY2x1
ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGlj
IFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci0gIHB1YmxpYzoKLSAgICBlbnVtIFZpZXdU
eXBlIHsKLSAgICAgICAgVHlwZUludDgsCi0gICAgICAgIFR5cGVVaW50OCwKLSAgICAgICAgVHlw
ZVVpbnQ4Q2xhbXBlZCwKLSAgICAgICAgVHlwZUludDE2LAotICAgICAgICBUeXBlVWludDE2LAot
ICAgICAgICBUeXBlSW50MzIsCi0gICAgICAgIFR5cGVVaW50MzIsCi0gICAgICAgIFR5cGVGbG9h
dDMyLAotICAgICAgICBUeXBlRmxvYXQ2NCwKLSAgICAgICAgVHlwZURhdGFWaWV3Ci0gICAgfTsK
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7Ci0KLSAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
YnVmZmVyOwotICAgIH0KLQotICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7Ci0KLSAgICB2
b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQot
ICAgIGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0K
LQotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKLQot
ICBwcm90ZWN0ZWQ6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUg
Ym9vbCBzZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0g
ICAgaW5saW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRh
Qnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCB6ZXJv
UmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOwot
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3Rh
cnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7Ci0K
LSAgICAvLyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJy
YXlCdWZmZXIgaXMKLSAgICAvLyB3aXRoaW4gcmFuZ2UuCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci0gICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVu
dHMpCi0gICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNpemVvZihUKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZm
ZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdW5z
aWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBieXRlT2Zm
c2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gcmVtYWluaW5nRWxl
bWVudHMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMgZnJv
bSB0aGlzIGFycmF5J3MgdmlldzsKLSAgICAvLyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJlciBv
ZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZpZXcuCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51bUVsZW1lbnRzKQot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFYIC0gYXJyYXlCeXRl
T2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgaWYgKCpvZmZzZXQgPiBtYXhPZmZzZXQpIHsK
LSAgICAgICAgICAgICpvZmZzZXQgPSBidWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgICAg
ICpudW1FbGVtZW50cyA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgKm9mZnNldCA9IGFycmF5Qnl0ZU9mZnNldCArICpvZmZzZXQgKiBzaXplb2YoVCk7Ci0gICAg
ICAgICpvZmZzZXQgPSBzdGQ6Om1pbihidWZmZXItPmJ5dGVMZW5ndGgoKSwgKm9mZnNldCk7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IC0gKm9mZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWlu
KHJlbWFpbmluZ0VsZW1lbnRzLCAqbnVtRWxlbWVudHMpOwotICAgIH0KLQotICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBh
ZGRyZXNzIG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zmc2V0
LgotICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVPZmZzZXQg
OiAzMTsKLSAgICBib29sIG1faXNOZXV0ZXJhYmxlIDogMTsKLQotICBwcml2YXRlOgotICAgIGZy
aWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVy
OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9wcmV2VmlldzsKLSAgICBBcnJheUJ1ZmZlclZpZXcq
IG1fbmV4dFZpZXc7Ci19OwotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1
ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQotewotICAgIGlmIChieXRlT2Zm
c2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBhcnJheS0+Ynl0ZUxl
bmd0aCgpID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBhcnJheS0+Ynl0
ZUxlbmd0aCgpIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0
IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgY2hh
ciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsKLSAgICBtZW1tb3Zl
KGJhc2UgKyBieXRlT2Zmc2V0LCBhcnJheS0+YmFzZUFkZHJlc3MoKSwgYXJyYXktPmJ5dGVMZW5n
dGgoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRS
YW5nZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0KQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAg
ICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgoKQotICAgICAg
ICB8fCBieXRlT2Zmc2V0ICsgZGF0YUJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAg
IC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VB
ZGRyZXNzKCkpOwotICAgIG1lbW1vdmUoYmFzZSArIGJ5dGVPZmZzZXQsIGRhdGEsIGRhdGFCeXRl
TGVuZ3RoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onpl
cm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCkK
LXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zm
c2V0ICsgcmFuZ2VCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZz
ZXQgKyByYW5nZUJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAgIC8vIE91dCBvZiBy
YW5nZSBvZmZzZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAKLSAgICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOwot
ICAgIG1lbXNldChiYXNlICsgYnl0ZU9mZnNldCwgMCwgcmFuZ2VCeXRlTGVuZ3RoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFu
ZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwg
dW5zaWduZWQqIGxlbmd0aCkKLXsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCAr
PSBhcnJheVNpemU7Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAg
IGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgKz0gYXJyYXlTaXplOwotICAgIGlmIChlbmQgPCAw
KQotICAgICAgICBlbmQgPSAwOwotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kKSA+
IGFycmF5U2l6ZSkKLSAgICAgICAgZW5kID0gYXJyYXlTaXplOwotICAgIGlmIChlbmQgPCBzdGFy
dCkKLSAgICAgICAgZW5kID0gc3RhcnQ7Ci0gICAgKm9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGFydCk7Ci0gICAgKmxlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQgLSBz
dGFydCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBXVEY6OkFycmF5QnVmZmVy
VmlldzsKLQotI2VuZGlmIC8vIEFycmF5QnVmZmVyVmlld19oCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZl
cnJhYmxlUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJy
YWJsZVJlZkNvdW50ZWRfaAorI2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZh
cmlhbnQgb2YgUmVmQ291bnRlZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUg
ZGVmZXJyZWQsCisvLyBhbmQgY2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3Ug
Y2FuIHRoaW5rIG9mIGEgZGVmZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAi
cmVmIiwgZXhjZXB0IHRoYXQgeW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2Fs
bHkgaGFwcGVuZWQgLSB0aGlzIGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9y
CisvLyBzb21ldGltZXMgZXZlbiBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisK
K2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGRlZmVycmVkRmxhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbElu
Y3JlbWVuZXQgPSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAg
ICAgIG1fcmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29s
IGhhc09uZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAx
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3Jl
ZkNvdW50ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3Jl
bWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2Uo
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAg
ICAgbV9yZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZD
b3VudDsKKyAgICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVm
ZXJyZWRGbGFnOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcmVm
Q291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFi
bGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9p
ZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElz
RGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZCh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVm
Q291bnRlZCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208221</attachid>
            <date>2013-08-06 15:38:59 -0700</date>
            <delta_ts>2013-08-06 20:32:01 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>183652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9h
dDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9o
IgorI2RlZmluZSAiRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgIkZsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdl
bmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdl
bmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVk
OgorICAgIEdlbmVyaWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4g
Y3JlYXRlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUm
IGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFk
ZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBzZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdl
SW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAor
ICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICog
c2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2Uo
dW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHpl
cm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXpl
b2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBz
aXplb2YoQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhp
cy0+bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlu
ZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBk
YXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAg
ICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBw
b3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAg
JiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9
IGNyZWF0ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0
aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZl
cjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlw
ZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAg
ICAgQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRv
cjo6VHlwZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXko
c3RhcnQsIGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxl
bmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCks
ICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRv
cjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJ
KHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkg
QEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Ro
cy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhX
b3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJy
YXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQor
ICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50
eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcs
NiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7
IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwg
YnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2
aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rv
ckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBU
aGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5
cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5Owog
ICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNk
ZWZpbmUgIkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5
X2giCisjZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJ
bnQzMkFycmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEz
MSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwg
aXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisg
ICAgICAgIC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlw
ZSk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkFy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGltcGwpOworICAgIAorcHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlciogbV9pbXBsOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250
ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwg
dWludDMyX3QgZWxlbWVudFNpemUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZh
c3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1l
bnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXpl
LCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFz
dFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB1aW50NjRfdCog
YXNXb3JkcyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAg
IGFzV29yZHNbaV0gPSAwOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJh
eSB0byB1c2UgbW9yZSB0aGFuIDRHQiBsZXNzIGEgZmV3IGJ5dGVzLgorICAgIGlmIChsZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVUlOVF9NQVggLSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIC8g
ZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIXRyeUZhc3RDYWxs
b2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc3RhdGljX2Nhc3Q8
c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNpemUpOworICAgIAorICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgIG1fbW9kZSA9IE92ZXJzaXplVHlwZWRBcnJheTsKK30KKworSlNBcnJh
eUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisg
ICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
ICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5n
dGgpCisgICAgLCBtX21vZGUoYnl0ZU9mZnNldCAtIFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAg
ICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRB
cnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitK
U0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25D
b250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29u
dGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAg
LCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgp
KQoreworICAgIGNvbnRleHQuZGlzb3duKCk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNh
c2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3ZlcnNpemVUeXBl
ZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNl
KHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2Vs
bCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9m
ZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVP
ZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLnR5cGVkQXJyYXlDb250cm9sbGVy
LT50b0pTKAorICAgICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCB0aGlzT2JqZWN0LT5idWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRB
cnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3Zv
aWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAg
IHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0
byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1
cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1v
bmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVsZXRlUHJvcGVy
dHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb2VwcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNB
cnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBh
cmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkgfHwgdGhp
c09iamVjdC0+bV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgaWYgKHRoaXNPYmpl
Y3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIGZhc3RGcmVlKHRoaXNP
YmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld19o
CisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZlcyB0d28gcHVycG9zZXM6Cisv
LworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRlIHBhcmFtZXRlcnMuCisvLwor
Ly8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlzaWJsZSAiSlNBcnJheUJ1ZmZl
clZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2VzIHdoZW4gaXQgd2FudHMgdG8g
cGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgorLy8gICAgd2l0aG91dCBjb25j
ZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisvLworLy8gVGhlc2UgdHdvIHJv
bGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEgbWF0dGVyIG9mIG9wdGltaXpp
bmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5nIGFzIG11Y2ggY29kZSBhbmQg
ZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8gdGVtcGxhdGUgc3BlY2lhbGl6
YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8gc2VtYW50aWNzOyBpbmRlZWQg
YXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2JleWluZyBhIGNvbnRyYWN0Cisv
LyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4KKy8vCisvLyBPbmUgY29udmVu
aWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2ggY3JhenkgaXMgdGhhdAorLy8g
QXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRlc3BpdGUgaGF2aW5nIGEgImNv
bnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBUeXBlZCBhcnJheSB2aWV3cyBo
YXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJpZyB0aGV5IGFyZSBhbmQKKy8v
IHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBhIHNlcGFy
YXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNpZmllZCBuZXV0ZXJpbmcgY2Fw
YWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAgLy8gU21hbGwgYW5kIGZhc3Qg
dHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBhIHZlY3RvcgorICAgIC8vIGFs
bG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5cGVkQXJyYXkuIFYncyBsaXZl
bmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIHZpZXcncyBsaXZlbmVz
cy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIGxhcmdlIHR5cGVkIGFycmF5
IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBtdWNoCisgICAgLy8gbWVtb3J5
LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0aGF0IGNvdWxkIGhvbGQgYQor
ICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZlY3RvciBhbGxvY2F0ZWQgdXNp
bmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNpemVUeXBlZEFycmF5LiBWJ3Mg
bGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAgIC8vIHRoZSB2aWV3J3MgbGl2
ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXplciB0byBkZWxldGUgVi4KKyAg
ICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0eXBlZCBhcnJheSB0aGF0IHdh
cyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdIZWFkZXIKKyAgICAvLyBpcyBo
aWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgYXJyYXkgYnVmZmVy
LiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2ludHMgYmFjayB0byB0aGUg
SlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcgd2hv
LWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5LgorICAgIC8vIFRoZSB2aWV3
IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLiBOb3RlIHRoYXQgIm1vZGUgLSBXYXN0ZWZ1bFR5cGVk
QXJyYXkiCisgICAgLy8gaXMgdGhlIGJ5dGUgb2Zmc2V0LgorICAgIFdhc3RlZnVsVHlwZWRBcnJh
eSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcsIGl0IGV4
cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZmZXJWaWV3IGFu
ZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdhc3RpbmcgbWVt
b3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRlcmZseS4gV2hl
biBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2aWEgdGhlIHVz
dWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MKKy8vIGltcGxl
bWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3ZSBjb3VsZCBh
dCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaWYg
aXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIGNsYXNzIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7
CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJf
dCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNp
emUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0
aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNv
bnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRl
eHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBW
TSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIH5D
b25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9p
ZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1f
dmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1v
ZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAg
CisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIC8vIEFsbG9jYXRl
cyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsg
YWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3Nhcnku
CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAg
ICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQoKSBjb25zdDsKKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisK
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJf
dCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzX2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSkK
KyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30K
KworaW5saW5lIEFycmF5QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7
CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1
dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sK
KyAgICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisK
K2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3Ro
ID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2
aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2Vs
bDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJy
YXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBA
IHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVm
ZmVyVmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQz
MkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDMy
QXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiSlNG
bG9hdDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8v
IEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gK
KyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVw
cmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZh
U2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsK
Ky8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50
OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1
Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBm
cm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisv
LyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90
YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBs
ZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29t
ZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYg
YWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8g
YW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEg
aW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMg
Z292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8g
dGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdh
eS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4g
dW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250
cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91
bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBl
eGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBU
eXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYg
SlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRv
dWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBz
dGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRp
YyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3Vi
bGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIAorcHJvdGVjdGVk
OgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYp
OworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QWRh
cHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogY3JlYXRlKFN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxBZGFwdG9y
OjpWaWV3VHlwZT4gaW1wbCk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBl
KSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7
CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhl
ZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0
aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJv
b2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
aSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVp
Y2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4
UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3Rvcigp
W2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3Vi
bGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJ
bmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBO
b25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5
cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2Vs
bCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVs
bC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAg
IC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBo
ZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5
VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRB
cnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAg
IDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwg
bGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29udGV4dCkgeworICAg
ICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRy
PEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZt
LCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7
CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1
bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBj
b250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90
LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIo
dGhpc09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShn
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jv
b2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+
bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXggJiYgY2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3Zv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVhcnMgdG8gc2ltcGx5IGln
bm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICAv
LyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAg
ICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIElu
IHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3du
UHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYg
dGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0
eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhj
ZXB0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXR5TmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lLk5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAg
IHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisg
ICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhbkdldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5z
ZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAg
IC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGlu
ZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4g
dGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBj
ZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Cisg
ICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
YXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihv
YmplY3QpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytp
KQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVt
YmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAg
ICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNP
YmplY3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlz
aXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yVG9rZW4gJiYgdmlzaXRv
ci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgdm9p
ZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAgICAgIHZvaWQqIG5ld1Zl
Y3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsK
KyAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAg
IHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
IH0KKyAgICAKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNPYmplY3QsIHZpc2l0b3Is
IHRva2VuKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFy
cmF5Vmlldyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAg
IAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNh
bGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRv
IEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAg
ICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0Mg
LSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3Vn
aC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAg
Ly8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGlu
dG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQg
dG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8g
b2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJl
IGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3Qg
Y2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlz
LCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5k
IHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3Rwcmlu
dCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBC
dXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywg
aXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9u
cyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpo
ZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7Cisg
ICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAg
IHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICAvLyBGSVhN
RTogdGhpcyBzaG91bGQgcmVjb3JkLCBpbiB0aGUgYnV0dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQg
aXMuCisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQor
ICAgICAgICAmJiAhbV9idXR0ZXJmbHkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSB7CisgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwg
cG9zc2libGUuCisgICAgICAgIG1fYnV0dGVyZmx5ID0gc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFk
ZXIqPihtX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fYnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAg
bV9idXR0ZXJmbHksIGhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHN0cnVjdHVyZSgpLAorICAgICAg
ICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2gg
KHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAg
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNv
bWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8g
Y29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGlu
ayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAg
ICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVj
dG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnV0dGVyZmx5KCktPnNldEFycmF5QnVmZmVyKGJ1
ZmZlci5nZXQoKSk7CisgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5n
ZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFy
cmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUodGhpc09i
amVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50OEFycmF5X2giCisjZGVmaW5l
ICJKU0ludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYg
Ly8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJ
bnQxNkFycmF5X2giCisjZGVmaW5lICJKU0ludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJKU0ludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MzJBcnJh
eV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTAgKzI2NCw2IEBAIFN0cmluZyBKU09i
amVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWMKIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3Jl
IGRpcmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQg
aXMgbm90Ci0gICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0
eVNsb3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZwotICAgIC8vIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoKS4KLSAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwogICAgIAogICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisj
ZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5m
byBKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbyA9IHsjdHlwZSAiQXJyYXkiLCAmSlMjI3R5cGUjI0Fy
cmF5OjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0Fy
cmF5KX0KKworTUFLRV9TX0lORk8oSW50OCk7CitNQUtFX1NfSU5GTyhJbnQxNik7CitNQUtFX1Nf
SU5GTyhJbnQzMik7CitNQUtFX1NfSU5GTyhVaW50OCk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1w
ZWQpOworTUFLRV9TX0lORk8oVWludDE2KTsKK01BS0VfU19JTkZPKFVpbnQzMik7CitNQUtFX1Nf
SU5GTyhGbG9hdDMyKTsKK01BS0VfU19JTkZPKEZsb2F0NjQpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5c19o
CisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50
OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpT
SW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9y
PiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRh
cHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50
OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0
NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhBcnJheV9oIgor
I2RlZmluZSAiSlNVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisK
KyNlbmRpZiAvLyBKU1VpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorI2RlZmlu
ZSAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmICJKU1VpbnQxNkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQxNkFycmF5
X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQxNkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMy
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDMyQXJy
YXlfaCIKKyNkZWZpbmUgIkpTVWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0Kiwg
QXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0g
bmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisg
ICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMsIG5h
dGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhayhyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlD
b250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9s
bGVyIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkg
YnVmZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qg
d2hhdAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5p
bmcgc3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRo
ZSBKU0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZl
LgorLy8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVy
IGFmdGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBk
aWUsIHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoK
KyAgICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0
b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAg
ICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3
VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdy
YWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlw
ZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNW
aWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlw
ZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVy
biB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5
cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9O
dW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlw
ZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+Citz
dHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7
CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5
cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZh
bHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVj
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3N0cnVjdCBJbnQ4
QWRhcHRvcjsKK3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJBZGFwdG9yOworc3Ry
dWN0IFVpbnQ4QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yOworc3RydWN0IFVp
bnQxNkFkYXB0b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDMyQWRhcHRv
cjsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4g
Y2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVm
IEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50MTZB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBKU0lu
dDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4g
SlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1w
ZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRBcnJh
eTsKKworc3RydWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4
X3QsIEludDhBcnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07CitzdHJ1Y3QgSW50MTZB
ZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5LCBK
U0ludDE2QXJyYXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRhcHRvciA6IEludGVn
cmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJbnQzMkFycmF5LCBU
eXBlSW50MzI+IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yPHVpbnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlwZVVpbnQ4PiB7IH07
CitzdHJ1Y3QgVWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDE2
X3QsIFVpbnQxNkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7IH07CitzdHJ1Y3Qg
VWludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDMyX3QsIFVpbnQz
MkFycmF5LCBKU1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQzMkFk
YXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMyQXJyYXksIEpTRmxv
YXQzMkFycmF5LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRBZGFwdG9yIDogRmxv
YXRUeXBlZEFycmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNGbG9hdDY0QXJyYXks
IFR5cGVGbG9hdDY0PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1wZWRBZGFwdG9yIHsKKyAgICB0
eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZpZXdU
eXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWludDhDbGFtcGVkOwor
ICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1
NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNs
YW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051
bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAg
ICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUg
dG9Eb3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50
OF90IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAg
ICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1
ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFy
cmF5QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlD
b250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxlcjo6
VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRB
cnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlD
b250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFycmF5QnVmZmVy
OworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKK2NsYXNzIEpTR2xvYmFs
T2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3VudGVk
PFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgVHlwZWRBcnJheUNvbnRyb2xs
ZXIoKTsKKyAgICB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZp
cnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNTMz
NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBlZEFycmF5RGVzY3JpcHRvcl9o
Ci0jZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0
cnVjdCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUgewotICAgIFR5cGVkQXJyYXlO
b25lLAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICBUeXBl
ZEFycmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAgIFR5cGVkQXJyYXlVaW50OENs
YW1wZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBlZEFycmF5VWludDMyLAotICAg
IFR5cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDY0Ci19OwotCi1zdHJ1Y3Qg
VHlwZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAg
ICAgOiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldCgwKQotICAgICAg
ICAsIG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZzZXQsIHNp
emVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0luZm8oY2xhc3NJbmZvKQotICAg
ICAgICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQotICAgICAgICAsIG1fbGVuZ3Ro
T2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIGNvbnN0IENsYXNzSW5mbyog
bV9jbGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNldDsKLSAgICBzaXplX3QgbV9s
ZW5ndGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWduZWRuZXNzIHsKLSAgICBTaWdu
ZWRUeXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQotfTsKLWVudW0gVHlwZWRBcnJh
eVJvdW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAgIENsYW1wUm91bmRpbmcKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlwZWRBcnJheURlc2NyaXB0b3Jf
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eVR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJO
b3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgi
VHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVHlwZWRBcnJheVR5cGUg
eworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAg
IFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAg
VHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZs
b2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCitpbmxpbmUgYm9vbCBpc1R5cGVkVmlldyhU
eXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5
cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFy
cmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlw
ZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVk
QXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheXNf
aAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVp
bnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRh
cHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJB
ZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0
MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxG
bG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4
QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCisKKyNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJV
aW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
IlVpbnQxNkFycmF5X2giCisjZGVmaW5lICJVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgIlVpbnQzMkFycmF5X2giCisjZGVmaW5lICJVaW50MzJBcnJheV9oIgor
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdF
eHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgog
I2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgpAQCAtMjU4LDYgKzI1OSwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0
UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5p
dGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5p
dGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFy
cmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigp
KTsKIH0KIAogVk06On5WTSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIK
ICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlw
dG9yLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCkBA
IC0zODEsNiArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmls
ZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNl
PiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJv
bGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVn
RXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9y
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgotCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBB
cnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2Rh
dGEpIHsKLSAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9y
IChBcnJheUJ1ZmZlclZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcp
IHsKLSAgICAgICAgaWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdz
QXJlTmV1dGVyYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRl
cmFibGUpCi0gICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsK
LSAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQu
bV9kYXRhKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlICht
X2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0
VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdz
QXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1
cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXco
QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAg
ICB2aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZp
ZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2Vmll
dyA9IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVy
OjpyZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9
PSB2aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZp
ZXctPm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2
aWV3LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0g
dmlldy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAg
bV9maXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2
aWV3LT5tX25leHRWaWV3ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0j
ZGVmaW5lIEFycmF5QnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVy
OwotY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoK
LSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAg
ICwgbV9zaXplSW5CeXRlcygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNv
bnRlbnRzKCk7Ci0KLSAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5z
aWduZWQgc2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6
Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRl
cykgCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXpl
SW5CeXRlcykKLSAgICB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAg
IGVudW0gSW5pdGlhbGl6YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAg
ICAgICAgRG9udEluaXRpYWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRy
eUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUs
IEluaXRpYWxpemF0aW9uUG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghb3RoZXIubV9kYXRhKTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAg
ICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0g
MDsKLSAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8o
QXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVy
Lm1fZGF0YSk7Ci0gICAgICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6
ZUluQnl0ZXMsIHNpemVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxp
emUsIG90aGVyKTsKLSAgICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1lbWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7
Ci0gICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQot
ICAgIHZvaWQqIG1fZGF0YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xh
c3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGlj
OgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBP
bmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0g
ICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNv
bnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBj
b25zdDsKLQotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJl
bW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJu
ICFtX2NvbnRlbnRzLm1fZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5z
aWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJD
b250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlu
bGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlu
bGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2Zp
cnN0VmlldzsKLX07Ci0KLWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxl
ZnQsIGludCByaWdodCkKLXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHgg
PCBsZWZ0KQotICAgICAgICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4
ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFy
cmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17
Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5
dGVMZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpj
cmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5
QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxp
emUsIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0
ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29u
dGVudHMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykp
OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQot
ewotICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5
IHBvbGljeSkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5
QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUs
IHBvbGljeSwgY29udGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
Ci19Ci0KLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250
ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9j
b250ZW50cyk7Ci19Ci0KLXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4g
bV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFy
cmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5t
X3NpemVJbkJ5dGVzOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6
c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwo
Y2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBl
bmQgPyBlbmQgLSBiZWdpbiA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2ln
bmVkIEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNp
Z25lZCBjdXJyZW50TGVuZ3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0g
ICAgICAgIGluZGV4ID0gY3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZh
bHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ks
IEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzIt
Yml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBU
aGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAot
ICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hv
dWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3Rp
dmUgY2hlY2sgaGVyZT8KLSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQg
dG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0
b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kg
PT0gWmVyb0luaXRpYWxpemUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRy
eUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0
Lm1fZGF0YSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRp
YWxpemUpOwotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9j
KG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsK
LSAgICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQu
bV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNv
bnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2Rh
dGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsK
LQotI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSAiQXJy
YXlCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLUFycmF5QnVmZmVyVmlldzo6QXJyYXlC
dWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0
ZU9mZnNldCkKLSAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICAgICAsIG1fYnVm
ZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX3ByZXZWaWV3KDApCi0gICAgICAgICwgbV9uZXh0Vmll
dygwKQotewotICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFy
Kj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZm
ZXIpIAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKLX0KLQotQXJyYXlCdWZmZXJW
aWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKLXsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1f
YnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMpOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1
dGVyKCkKLXsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKLX0KLQot
fQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNv
dXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlclZpZXdfaAotI2RlZmluZSBBcnJh
eUJ1ZmZlclZpZXdfaAotCi0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0KLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBS
ZWZDb3VudGVkPEFycmF5QnVmZmVyVmlldz4gewotICBwdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlw
ZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVV
aW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAg
ICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQz
MiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0g
ICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1
ZmZlcjsKLSAgICB9Ci0KLSAgICB2b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwotCi0gICAgdm9p
ZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KLSAg
ICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9Ci0K
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7Ci0KLSAg
cHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJv
b2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAg
IGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5
dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQot
ICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0
LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCi0g
ICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5
QnVmZmVyIGlzCi0gICAgLy8gd2l0aGluIHJhbmdlLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
KQotICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChzaXplb2YoVCkgPiAxICYmIGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVy
LT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2ln
bmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNl
dCkgLyBzaXplb2YoVCk7Ci0gICAgICAgIGlmIChudW1FbGVtZW50cyA+IHJlbWFpbmluZ0VsZW1l
bnRzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBJbnB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGVsZW1lbnRzIGZyb20g
dGhpcyBhcnJheSdzIHZpZXc7Ci0gICAgLy8gb3V0cHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2Yg
Ynl0ZXMgZnJvbSB0aGUgdW5kZXJseWluZyBidWZmZXIncyB2aWV3LgotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykKLSAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0ZU9m
ZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7Ci0g
ICAgICAgICAgICAqb2Zmc2V0ID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAq
bnVtRWxlbWVudHMgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
ICpvZmZzZXQgPSBhcnJheUJ5dGVPZmZzZXQgKyAqb2Zmc2V0ICogc2l6ZW9mKFQpOwotICAgICAg
ICAqb2Zmc2V0ID0gc3RkOjptaW4oYnVmZmVyLT5ieXRlTGVuZ3RoKCksICpvZmZzZXQpOwotICAg
ICAgICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAt
ICpvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihy
ZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgYWRk
cmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4K
LSAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwotCi0gICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDog
MzE7Ci0gICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgQXJyYXlCdWZmZXI7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsK
LSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBt
X25leHRWaWV3OwotfTsKLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZm
ZXJWaWV3KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNl
dCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVMZW5n
dGgoKSA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVM
ZW5ndGgoKSA8IGJ5dGVPZmZzZXQpIHsKLSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBv
ciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIq
IGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShi
YXNlICsgYnl0ZU9mZnNldCwgYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3Ro
KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFu
Z2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQg
Ynl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAg
ICB8fCBieXRlT2Zmc2V0ICsgZGF0YUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAv
LyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRk
cmVzcygpKTsKLSAgICBtZW1tb3ZlKGJhc2UgKyBieXRlT2Zmc2V0LCBkYXRhLCBkYXRhQnl0ZUxl
bmd0aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJv
UmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpCi17
Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNl
dCArIHJhbmdlQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0
ICsgcmFuZ2VCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2YgcmFu
Z2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ci0gICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsKLSAg
ICBtZW1zZXQoYmFzZSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRM
ZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVu
c2lnbmVkKiBsZW5ndGgpCi17Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0g
YXJyYXlTaXplOwotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICBp
ZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgMCkK
LSAgICAgICAgZW5kID0gMDsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgPiBh
cnJheVNpemUpCi0gICAgICAgIGVuZCA9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgc3RhcnQp
Ci0gICAgICAgIGVuZCA9IHN0YXJ0OwotICAgICpvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RhcnQpOwotICAgICpsZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3Rh
cnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlclZp
ZXc7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdfaApJbmRleDogU291cmNlL1dURi93dGYv
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZl
cnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFi
bGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJp
YW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRl
ZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNh
biB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJl
ZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5
IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgor
Ly8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitj
bGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNy
ZW1lbmV0ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAg
ICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBo
YXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZD
b3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVy
cmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1l
bnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAg
IG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291
bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVy
cmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3JlZkNv
dW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJy
YWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJhYmxl
UmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQg
ZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJc0Rl
ZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nh
c3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNv
dW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208234</attachid>
            <date>2013-08-06 20:32:01 -0700</date>
            <delta_ts>2013-08-07 10:34:52 -0700</delta_ts>
            <desc>omg</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>194384</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9h
dDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9o
IgorI2RlZmluZSAiRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgIkZsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9H
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdl
bmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdl
bmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVk
OgorICAgIEdlbmVyaWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4g
Y3JlYXRlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUm
IGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFk
ZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBzZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdl
SW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAor
ICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICog
c2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2Uo
dW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHpl
cm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXpl
b2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBz
aXplb2YoQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhp
cy0+bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlu
ZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBk
YXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAg
ICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBw
b3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAg
JiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9
IGNyZWF0ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0
aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZl
cjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlw
ZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAg
ICAgQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRv
cjo6VHlwZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXko
c3RhcnQsIGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxl
bmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCks
ICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRv
cjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJ
KHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkg
QEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Ro
cy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhX
b3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJy
YXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQor
ICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50
eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hl
YWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcs
NiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7
IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwg
YnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2
aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rv
ckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBU
aGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5
cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5Owog
ICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNk
ZWZpbmUgIkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5
X2giCisjZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJ
bnQzMkFycmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEz
MSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwg
aXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisg
ICAgICAgIC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlw
ZSk7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAg
ICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZl
cikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5n
ZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJl
bmNlKHRoaXMsIG1faW1wbC5nZXQoKSk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisg
ICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUq
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFy
cmF5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKwor
I2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJs
aWM6CisgICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNv
bnRzIHsgcmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJpdmF0ZToKKyAg
ICBBcnJheUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3Ojpz
X2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVt
ZW50U2l6ZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisg
ICAgLCBtX2J1dHRlcmZseSgwKQoreworICAgIGlmIChsZW5ndGggPD0gZmFzdFNpemVMaW1pdCkg
eworICAgICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24uCisgICAgICAgIHZvaWQqIHRlbXA7
CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOworICAg
ICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAg
ICAgICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21vZGUgPSBGYXN0VHlwZWRBcnJheTsK
KworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgYXNXb3Jkc1tpXSA9
IDA7CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3Jl
IHRoYW4gNEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBlbGVtZW50U2l6ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVs
ZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0
aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Cisg
ICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6
Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwK
KyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVj
dHVyZSgwKQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVy
LT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1f
bW9kZShieXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVh
ZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFy
cmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZt
LCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJW
aWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRl
eHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZs
eSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNv
bnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29u
dGV4dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2gg
KG1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0
aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZt
LmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5h
cnJheUJ1ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlC
dWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikg
eworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFy
cmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVm
ZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9m
ZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0o
KS50eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAor
ICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwg
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAg
IHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAg
ICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0
ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Q
cm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25s
eSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5l
T3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBz
aG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7
CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0s
IGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVP
ZmZzZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7Cisg
ICAgfQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZp
bmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+
PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3Zl
cnNpemVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5
QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3Zp
ZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVw
ZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2Vu
dHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGlj
aAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmll
dyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVh
bCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlm
ZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFu
ZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUg
bm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFs
bW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0
IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdp
dGggV2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBz
YXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBp
cyBub3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEK
Ky8vIHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9k
ZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2Vy
IGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBi
dWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0g
VHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlz
IHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVk
IHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBk
ZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVk
QXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVt
cHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXpl
ZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9p
bnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwK
KyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVy
bWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZp
ZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFy
cmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNy
YXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFp
biBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0
aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRz
IHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQg
TSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhl
IHZlY3Rvci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5IgorICAgIC8vIGlz
IHRoZSBieXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVu
IFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUg
dG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRo
aXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVu
IGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJy
YXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRo
ZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9z
ZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luawor
Ly8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50
LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7Cisg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAg
ICAKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1
cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgCisg
ICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSos
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250
ZXh0KCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFzdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAg
ICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAg
ICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1
ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFBy
b3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBu
YXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsgYWxzbworICAgIC8vIG1v
dmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93
RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciog
YnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2
b2lkIG5ldXRlcigpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKwor
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAg
ICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
d0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkK
K3sKKyAgICBpZiAobV9tb2RlID49IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9k
VGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5
QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRl
eGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sKKyAgICByZXR1cm4gbWV0
aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3RoID0gMDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlC
dWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3Ojpz
X2luZm8gPSB7CisgICAgIkRhdGFWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZt
LCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkK
K3sKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwK
KyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlC
dWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdl
IG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlv
bkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVM
ZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0RhdGFWaWV3KiByZXN1bHQgPQor
ICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkg
SlNEYXRhVmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0
VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
YXRhVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpz
TnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRh
Vmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gSlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2Jq
ZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+
KG9iamVjdCk7CisgICAgcmV0dXJuIERhdGFWaWV3OjpjcmVhdGUodGhpc09iamVjdC0+YnVmZmVy
KCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRh
Vmlld19oCisjZGVmaW5lIEpTRGF0YVZpZXdfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNB
cnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcg
QmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9u
Q29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUo
CisgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5
KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGbG9hdDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgIkpTRmxvYXQzMkFycmF5X2giCisjZGVmaW5lICJKU0Zsb2F0MzJBcnJheV9oIgorCisjaW5j
bHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDMyQXJyYXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDY0QXJyYXlfaCIK
KyNkZWZpbmUgIkpTRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisKKyNlbmRpZiAvLyBKU0Zsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHR5cGVkIGFycmF5IHZp
ZXcgaXMgb3VyIHJlcHJlc2VudGF0aW9uIG9mIGEgdHlwZWQgYXJyYXkgb2JqZWN0IGFzIHNlZW4K
Ky8vIGZyb20gSmF2YVNjcmlwdC4gRm9yIGV4YW1wbGU6CisvLworLy8gdmFyIG8gPSBuZXcgSW50
OEFycmF5KDEwMCk7CisvLworLy8gSGVyZSwgJ28nIHBvaW50cyB0byBhIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PGludDhfdD4uCisvLworLy8gVmlld3MgY29udGFpbiBmaXZlIGZpZWxkczoKKy8v
CisvLyAgICAgU3RydWN0dXJlKiBTICAgICAvLyBmcm9tIEpTQ2VsbAorLy8gICAgIEJ1dHRlcmZs
eSogQiAgICAgLy8gZnJvbSBKU09iamVjdAorLy8gICAgIEVsZW1lbnRUeXBlKiBWCisvLyAgICAg
dWludDMyX3QgTAorLy8gICAgIFR5cGVkQXJyYXlNb2RlIE0KKy8vCisvLyBUaGVzZSBmaWVsZHMg
dGFrZSB1cCBhIHRvdGFsIG9mIGZvdXIgcG9pbnRlci13aWR0aCB3b3Jkcy4gRklYTUU6IE1ha2UK
Ky8vIGl0IHRha2UgbGVzcyB3b3JkcyEKKy8vCisvLyBCIGlzIHVzdWFsbHkgdW51c2VkIGJ1dCBt
YXkgc3RvcmVkIHNvbWUgYWRkaXRpb25hbCAib3ZlcmZsb3ciIGRhdGEgZm9yCisvLyBvbmUgb2Yg
dGhlIG1vZGVzLiBWIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHR5cGVkIGFycmF5
J3MgZGF0YSwKKy8vIGFuZCBtYXkgcG9pbnQgdG8gZWl0aGVyIEdDLW1hbmFnZWQgY29waWVkIHNw
YWNlLCBvciBkYXRhIGluIHRoZSBDIGhlYXA7CisvLyB3aGljaCBvZiB0aG9zZSB0aGluZ3MgaXQg
cG9pbnRzIHRvIGlzIGdvdmVybmVkIGJ5IHRoZSBtb2RlIGFsdGhvdWdoIGZvcgorLy8gc2ltcGxl
IGFjY2Vzc2VzIHRvIHRoZSB2aWV3IHlvdSBjYW4ganVzdCByZWFkIGZyb20gdGhlIHBvaW50ZXIg
ZWl0aGVyCisvLyB3YXkuIE0gc3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSB2aWV3LiBMIGlzIHRo
ZSBsZW5ndGgsIGluIHVuaXRzIHRoYXQKKy8vIGRlcGVuZCBvbiB0aGUgdmlldydzIHR5cGUuCisK
Ky8vIFRoZSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpcyB0ZW1wbGF0aXplZCBieSBhbiBBZGFw
dG9yIHRoYXQgY29udHJvbHMKKy8vIHRoZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBpdCdzIGNvbnZl
cnRlZDsgaXQgc2hvdWxkIG9iZXkgdGhlIGZvbGxvd2luZworLy8gaW50ZXJmYWNlOyBJIHVzZSBp
bnQ4X3QgYXMgYW4gZXhhbXBsZToKKy8vCisvLyBzdHJ1Y3QgQWRhcHRvciB7CisvLyAgICAgdHlw
ZWRlZiBpbnQ4X3QgVHlwZTsKKy8vICAgICB0eXBlZGVmIEludDhBcnJheSBWaWV3VHlwZTsKKy8v
ICAgICB0eXBlZGVmIEpTSW50OEFycmF5IEpTVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhf
dCB0b05hdGl2ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1
ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
Ky8vICAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMg
ZG91YmxlIHRvRG91YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZl
clZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVj
dGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
c3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIHN0YXRp
YyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFN0cnVjdHVyZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgUGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlw
ZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5n
dGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpU
eXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6
VHlwZSogdHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFk
YXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0Cisg
ICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBj
YW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwg
bV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkp
CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBB
ZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRW
ZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91
YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUo
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFs
dWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRh
cHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwg
QWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgp
OworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRp
dmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6
OnRvTmF0aXZlKGV4ZWMsIHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGlj
IGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5
cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKwor
ICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRh
IGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2
ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAor
CisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rp
b25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5o
ZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3
Ojp2ZXJpZnlTdWJSYW5nZTxBZGFwdG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0
aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVm
ZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4
dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAg
ICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9
CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRl
eHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBs
KQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1w
bC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGlt
cGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwg
aW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNl
dFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYm
IGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShnZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihq
c051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgp
ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKGdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisg
ICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRz
IHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3Ry
aWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4
KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJl
amVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4
ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAv
LyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0
eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgKKyAgICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZS5O
b3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAg
IAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShwcm9w
ZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsK
KyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhblNldEluZGV4UXVpY2tseShw
cm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMg
d2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8v
IHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2V0SW5kZXhR
dWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9J
TkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21v
ZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IuY29weUxh
dGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0
b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5Vmlz
aXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvclRva2VuICYmIHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAg
IHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBu
ZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAg
ICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsK
KyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNp
dG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlw
ZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAg
CisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2Fs
bGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8g
RXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAg
IC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAt
IGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdo
LiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAv
LyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50
byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0
b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBv
ZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUg
YW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBj
YXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMs
IGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQg
d2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50
IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1
dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBp
dCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25z
IGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6Omhl
YXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAg
ICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAg
c2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBp
cy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5Cisg
ICAgICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikp
IHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBw
b3NzaWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRl
cio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBt
X2J1dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAg
ICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAg
IH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAo
dGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAg
YnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09i
amVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
T3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29t
ZXRoaW5nIGxpa2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBj
b3N0LCBzaW5jZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5r
IHRoYXQgd2UgcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAg
ICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0
b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBidXR0ZXJmbHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVm
ZmVyLmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdl
dCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJy
YXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUodGhpc09iamVjdC0+
YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bGVuZ3RoKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDhB
cnJheV9oIgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFycmF5X2giCisK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5X2giCisjZGVm
aW5lICJKU0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDEwICsyNjQs
NiBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjCiAKIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICAvLyBOQi4gVGhl
IGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2Ug
aW1wbGllcyB0aGF0IGl0IGlzIG5vdAotICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJp
ZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKLSAgICAvLyBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCi0gICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+IE1BWF9BUlJB
WV9JTkRFWCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5
IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8o
SW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9T
X0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhV
aW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50
MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+
IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0
QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJK
U1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFt
cGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhDbGFtcGVk
QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgorI2RlZmlu
ZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NX
ZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciog
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlC
dWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4g
YnVmZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZShleGVjLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWso
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhl
IGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJl
dHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRD
b3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlND
IHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6
CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1
ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9y
IGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVk
IGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitj
bGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJv
bGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2
aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwg
SlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVm
ZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUFkYXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19oCisjZGVmaW5lIFR5cGVkQXJyYXlB
ZGFwdG9yc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJh
eVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcs
IHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJn
Pgorc3RydWN0IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFy
ZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBK
U1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0
aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0
b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkp
OworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRv
TmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpT
VmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1i
ZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUg
Vmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUg
dHlwZVZhbHVlQXJnPgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVk
ZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAg
dHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVk
QXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlw
ZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVt
YmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFs
dWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pT
VmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9
OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IElu
dDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRh
cHRvcjsKK3N0cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1
Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQz
MkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZs
b2F0NjRBcnJheTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFw
dG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZB
ZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxv
YXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRv
cj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9
Oworc3RydWN0IEludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZf
dCwgSW50MTZBcnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQz
MkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXks
IEpTSW50MzJBcnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXks
IFR5cGVVaW50OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yPHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQx
Nj4geyB9Oworc3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PHVpbnQzMl90LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Owor
c3RydWN0IEZsb2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxv
YXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9h
dDY0QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXks
IEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVUludDhDbGFtcGVk
QWRhcHRvciB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENs
YW1wZWRBcnJheSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNW
aWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlw
ZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAg
ICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pihs
cmludCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9O
YXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90
IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJ
bnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUg
PiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRB
cnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29u
dHJvbGxlcjo6flR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVy
X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7
CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3Iu
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRB
cnJheURlc2NyaXB0b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsK
LSAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5
SW50MTYsCi0gICAgVHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBU
eXBlZEFycmF5VWludDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRB
cnJheVVpbnQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2
NAotfTsKLQotc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvcigpCi0gICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VP
ZmZzZXQoMCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAg
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBz
dG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZv
KGNsYXNzSW5mbykKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAg
ICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBj
b25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7
Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVk
bmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07
Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBD
bGFtcFJvdW5kaW5nCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVk
QXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAg
ICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBl
RmxvYXQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVt
IFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAg
IFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBU
eXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9h
dDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmlldworfTsKKworaW5saW5lIGJv
b2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNl
IFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2Ug
VHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5
VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZs
b2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wg
aXNTaWduZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlw
ZUludDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBUeXBlZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhB
ZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFk
YXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFk
YXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmICJVaW50OEFycmF5X2giCisjZGVmaW5lICJVaW50OEFycmF5X2giCisKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50OENsYW1wZWRBcnJh
eV9oIgorI2RlZmluZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmICJVaW50MTZBcnJheV9oIgorI2RlZmluZSAiVWludDE2QXJyYXlfaCIK
KworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50MzJBcnJheV9oIgorI2RlZmluZSAi
VWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTI1OCw2ICsyNTksMTAgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAg
ZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgor
ICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2Vy
dGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlz
LgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi
U21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJU
eXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAi
V2Vha1JhbmRvbS5oIgpAQCAtMzgxLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFBy
b2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8
VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJl
Z0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBt
X3JlZ0V4cEFsbG9jYXRvcjsKIApJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLWJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMm
IHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3Mp
Ci17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7Ci0KLSAgICBpZiAo
IW1fY29udGVudHMubV9kYXRhKSB7Ci0gICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUg
PSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkg
PSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAg
ICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
YWxsVmlld3NBcmVOZXV0ZXJhYmxlKQotICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3Vs
dCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7Ci0gICAg
ICAgIGlmICghcmVzdWx0Lm1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBj
dXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAg
ICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkp
Ci0gICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5h
cHBlbmQoY3VycmVudCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5
QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1
ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0
VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJz
dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQot
dm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0g
ICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRW
aWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2
VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmll
dy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09
IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3
LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
QXJyYXlCdWZmZXJfaAotI2RlZmluZSBBcnJheUJ1ZmZlcl9oCi0KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1j
bGFzcyBBcnJheUJ1ZmZlcjsKLWNsYXNzIEFycmF5QnVmZmVyVmlldzsKLQotY2xhc3MgQXJyYXlC
dWZmZXJDb250ZW50cyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250
ZW50cyk7Ci1wdWJsaWM6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAotICAgICAgICA6IG1f
ZGF0YSgwKQotICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoMCkKLSAgICB7IH0KLQotICAgIGlubGlu
ZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCi0gICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQotICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQotCi1wcml2YXRlOgotICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCi0gICAgeyB9Ci0KLSAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7Ci0KLSAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKLSAgICAgICAgWmVy
b0luaXRpYWxpemUsCi0gICAgICAgIERvbnRJbml0aWFsaXplCi0gICAgfTsKLQotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOwotICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKLSAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0g
ICAgICAgIG1fZGF0YSA9IDA7Ci0gICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLQot
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOwotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7Ci0gICAgICAgIGlmICghb3RoZXIubV9kYXRhKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKLSAgICB9Ci0KLSAgICB2b2lkKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKLX07Ci0KLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlC
dWZmZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJh
eUJ1ZmZlciopOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYpOwotCi0gICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVV
bmluaXRpYWxpemVkLgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVu
dEJ5dGVTaXplKTsKLQotICAgIGlubGluZSB2b2lkKiBkYXRhKCk7Ci0gICAgaW5saW5lIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNv
bnN0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
biwgaW50IGVuZCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNs
aWNlKGludCBiZWdpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKLSAgICBib29sIGlzTmV1
dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KLQotICAgIH5BcnJheUJ1ZmZl
cigpIHsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQotICAgIGlu
bGluZSBBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5k
KSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0
OwotICAgIHN0YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQg
cmlnaHQpOwotCi0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5
QnVmZmVyVmlldyogbV9maXJzdFZpZXc7Ci19OwotCi1pbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFs
dWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCi17Ci0gICAgQVNTRVJUKGxlZnQgPD0gcmln
aHQpOwotICAgIGlmICh4IDwgbGVmdCkKLSAgICAgICAgeCA9IGxlZnQ7Ci0gICAgaWYgKHJpZ2h0
IDwgeCkKLSAgICAgICAgeCA9IHJpZ2h0OwotICAgIHJldHVybiB4OwotfQotCi1QYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50
cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7
Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlC
dWZmZXIqIG90aGVyKQotewotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5k
YXRhKCksIG90aGVyLT5ieXRlTGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVu
dHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci0+ZGF0
YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwotICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwot
fQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplKTsKLX0KLQotUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0
aWFsaXphdGlvblBvbGljeSBwb2xpY3kpCi17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250
ZW50czsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywg
ZWxlbWVudEJ5dGVTaXplLCBwb2xpY3ksIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1f
ZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOwotfQotCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQotewotICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwotfQotCi12b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi1jb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwot
fQotCi11bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwotfQot
Ci1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOwotICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOwotfQotCi11bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Ci17Ci0gICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKLSAgICBp
ZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKLSAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Ci19Ci0KLXZvaWQg
QXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRp
b25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCi17Ci0gICAgLy8g
RG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBG
SVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3Mg
aXRzIGFyZ3VtZW50cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVy
Zmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vz
c2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/Ci0gICAgaWYgKG51bUVsZW1lbnRzKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXpl
KSB7Ci0gICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBib29sIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBmYWxzZTsK
LSAgICBpZiAocG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBhbGxvY2F0aW9uU3Vj
Y2VlZGVkID0gV1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUp
LmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocG9s
aWN5ID09IERvbnRJbml0aWFsaXplKTsKLSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdU
Rjo6dHJ5RmFzdE1hbGxvYyhudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUo
cmVzdWx0Lm1fZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbG9jYXRpb25TdWNjZWVkZWQpIHsK
LSAgICAgICAgcmVzdWx0Lm1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRl
U2l6ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQubV9kYXRhID0gMDsKLX0K
LQotQXJyYXlCdWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudHMoKQotewotICAgIFdU
Rjo6ZmFzdEZyZWUobV9kYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6QXJyYXlCdWZmZXI7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIK
LQotI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1BcnJheUJ1
ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgICAgIDog
bV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCi0gICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkK
LSAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9wcmV2VmlldygwKQotICAg
ICAgICAsIG1fbmV4dFZpZXcoMCkKLXsKLSAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAo
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7
Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7Ci19
Ci0KLUFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCi17Ci0gICAgaWYgKG1fYnVm
ZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKLX0KLQotdm9pZCBBcnJh
eUJ1ZmZlclZpZXc6Om5ldXRlcigpCi17Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9m
ZnNldCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3
X2gKLSNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZl
ci5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1ZmZl
clZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKLSAgcHVibGljOgot
ICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4
LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAg
IFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAg
ICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0
YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsK
LQotICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9idWZmZXI7Ci0gICAgfQotCi0gICAgdm9pZCogYmFzZUFkZHJlc3MoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRl
T2Zmc2V0OwotICAgIH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
ID0gMDsKLQotICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFi
bGUgPSBmbGFnOyB9Ci0gICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lz
TmV1dGVyYWJsZTsgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVm
ZmVyVmlldygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlC
dWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0
ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdl
Qnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5k
TGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25l
ZCogbGVuZ3RoKTsKLQotICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1y
YW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwotICAgIC8vIHdpdGhpbiByYW5nZS4KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBudW1FbGVtZW50cykKLSAgICB7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0
ICUgc2l6ZW9mKFQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0
ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5n
dGgoKSAtIGJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAobnVtRWxlbWVudHMg
PiByZW1haW5pbmdFbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBv
ZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwotICAgIC8vIG91dHB1dCBvZmZzZXQg
aXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFu
ZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAq
bnVtRWxlbWVudHMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9N
QVggLSBhcnJheUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAoKm9mZnNldCA+
IG1heE9mZnNldCkgewotICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
OwotICAgICAgICAgICAgKm51bUVsZW1lbnRzID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNp
emVvZihUKTsKLSAgICAgICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
LCAqb2Zmc2V0KTsKLSAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVy
LT5ieXRlTGVuZ3RoKCkgLSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgKm51bUVsZW1l
bnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7Ci0gICAgfQot
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotICAgIC8v
IFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0
aGUgYnl0ZSBvZmZzZXQuCi0gICAgdm9pZCogbV9iYXNlQWRkcmVzczsKLQotICAgIHVuc2lnbmVk
IG1fYnl0ZU9mZnNldCA6IDMxOwotICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwotCi0gIHBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFy
cmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKLX07Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojpz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0g
ICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IGFycmF5LT5ieXRlTGVuZ3RoKCkgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNl
dCArIGFycmF5LT5ieXRlTGVuZ3RoKCkgPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAgIC8vIE91dCBv
ZiByYW5nZSBvZmZzZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkp
OwotICAgIG1lbW1vdmUoYmFzZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBh
cnJheS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcnJheUJ1
ZmZlclZpZXc6OnNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRl
TGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxl
bmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZz
ZXQpIHsKLSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwg
ZGF0YSwgZGF0YUJ5dGVMZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5
QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFu
Z2VCeXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAg
ICAgIHx8IGJ5dGVPZmZzZXQgKyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAg
ICAgfHwgYnl0ZU9mZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAgICAg
ICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFz
ZUFkZHJlc3MoKSk7Ci0gICAgbWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVM
ZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2Fs
Y3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlT
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQotewotICAgIGlmIChzdGFydCA8IDApCi0g
ICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBz
dGFydCA9IDA7Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBhcnJheVNpemU7Ci0g
ICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihlbmQpID4gYXJyYXlTaXplKQotICAgICAgICBlbmQgPSBhcnJheVNpemU7Ci0gICAg
aWYgKGVuZCA8IHN0YXJ0KQotICAgICAgICBlbmQgPSBzdGFydDsKLSAgICAqb2Zmc2V0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KTsKLSAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZCAtIHN0YXJ0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6QXJyYXlCdWZmZXJWaWV3OwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3Vu
dGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RB
bGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBj
b3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMg
aGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBh
biBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMK
Ky8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9y
IGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVu
Y3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYo
KQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50Owor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291
bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVS
ZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgp
CisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAg
cmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2Uo
Ym9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9y
ZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1f
cmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVk
IDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkK
KyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFz
ZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAg
fkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208281</attachid>
            <date>2013-08-07 10:34:52 -0700</date>
            <delta_ts>2013-08-08 12:12:07 -0700</delta_ts>
            <desc>more!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>208577</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJy
YXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkK
K3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRo
aXMsIG1faW1wbC5nZXQoKSk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAg
IEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsg
cmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJpdmF0ZToKKyAgICBBcnJh
eUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8g
PSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6
ZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBt
X2J1dHRlcmZseSgwKQoreworICAgIGlmIChsZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgeworICAg
ICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24uCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAg
ICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOworICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAg
bV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nh
c3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUg
LyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgYXNXb3Jkc1tpXSA9IDA7Cisj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4g
NEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBlbGVtZW50U2l6ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRT
aXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBl
bGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9t
b2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3Ry
dWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZSgw
KQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRh
KCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9kZShi
eXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGlu
ZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVm
ZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAw
LCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpK
U0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisg
ICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQor
ICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQu
bGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5k
aXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1fbW9k
ZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
T3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBm
aW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhlYXAu
YWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1
ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlCdWZmZXJW
aWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAg
ICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29u
dHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmll
dzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJl
amVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBy
ZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0
eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBl
ZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAg
IEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAg
CisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxl
YXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwor
ICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXpl
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+PSBXYXN0
ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRo
b3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisv
LyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhl
IERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8g
ICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBh
biBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBl
IG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50
LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5r
IHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90Cisv
LyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCog
YSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlz
IGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2Vi
Q29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1
cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3Qg
aW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHBy
b3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVw
ZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBk
b25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIg
b3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRB
cnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNl
ZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNl
LCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1p
bmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXks
CisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5v
dCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBw
b2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwg
ViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAv
LyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQg
ZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2ls
bCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAor
ICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdh
eS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJl
ZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5
cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEK
KyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdh
c3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rv
ci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5IgorICAgIC8vIGlzIHRoZSBi
eXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNv
cmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0
IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVx
dWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vz
c2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZm
ZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRo
b2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMg
bm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29k
ZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitj
bGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNp
emVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAg
ICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1
aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgCisgICAgICAg
IENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1
Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVj
dHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUg
YnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsgYWxzbworICAgIC8vIG1vdmVzIHRo
ZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogYnVmZmVy
KCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5l
dXRlcigpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKworICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBl
ZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciIsICZCYXNl
OjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmll
d0NvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6SlNBcnJh
eUJ1ZmZlclZpZXdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVj
dG9yKiBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBwcm90
b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVy
Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXdDb25z
dHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJW
aWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3Ry
dWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdD
b25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlC
dWZmZXJWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBK
U0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNf
aAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZO
ZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KQorICAg
ICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOworfQorCitp
bmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAg
ICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVy
Zmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAg
IHJldHVybiBtZXRob2RUYWJsZSgpLT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5s
aW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAw
OworfQorCitpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKSBj
b25zdAoreworICAgIGlmIChtX21vZGUgPCBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBtX21vZGUgLSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlld1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVm
ZmVyVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJW
aWV3UHJvdG90eXBlOjpKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0FycmF5
QnVmZmVyVmlld1Byb3RvdHlwZSogSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3UHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJh
eUJ1ZmZlclZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdQ
cm90b3R5cGVfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZV9oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZl
clZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5
QnVmZmVyVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3Rh
dGljIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNB
cnJheUJ1ZmZlclZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw0ICsyMzUsMTQg
QEAgYm9vbCBKU0NlbGw6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKUwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAordm9pZCBKU0NlbGw6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1
ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzMzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OSw2ICsxNTksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIHZvaWQgZ2V0VHlw
ZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlldzo6c19pbmZvID0geworICAgICJEYXRh
VmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmll
dyl9OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4
dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK0pTRGF0YVZpZXcq
IEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3Vi
UmFuZ2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAg
ICB0aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0s
IHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRl
eHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Rh
dGFWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNP
YmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAg
ICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7
CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5t
X2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTRGF0YVZpZXc6Omdl
dFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVy
biBEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09i
amVjdC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNk
ZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVy
VmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAg
IAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7
CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAg
Vk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKKworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFy
cmF5VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlw
ZWRBcnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworICAgIAorcHVibGljOgorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0
YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxv
YXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9h
dDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgorI2RlZmluZSAi
SlNGbG9hdDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIg
cmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBK
YXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAw
KTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBT
dHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAv
LyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBM
CisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEg
dG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFr
ZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQg
c29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMu
IFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAor
Ly8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRh
dGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8g
aXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMg
dG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8v
IHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwg
aW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBj
b250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBz
aG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBh
biBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhf
dCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVk
ZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZl
KGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAg
ICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0
YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9E
b3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFz
cyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIAorcHJvdGVj
dGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4
dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAg
IHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVk
VmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBB
ZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBl
ZFZlY3RvcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlw
ZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0
byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBw
b3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsK
KyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5
cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ld
OworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1
aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pT
VmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAg
IHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRl
eFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAg
ICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFk
YXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUo
ZXhlYywgdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8sIE5vbkFycmF5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9S
VERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlw
ZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gQWRhcHRvcjo6dHlwZVZhbHVlOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgCisgICAg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNr
aW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgLy8gQWxs
b2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUg
QyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0
ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
c19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpK
U0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQm
IGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2
bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFj
b250ZXh0KSB7CisgICAgICAgIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAg
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1
YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAg
ICAgICB0aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQo
dm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAgIEFTU0VSVChj
b250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAg
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhl
YXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBpbXBsLT5idWZmZXIoKTsKKyAgICBDb25zdHJ1
Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBpbXBsLT5ieXRlT2Zm
c2V0KCksIGltcGwtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBpbXBsKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNO
dW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5s
ZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2ts
eShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlw
dG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2Yo
QWRhcHRvcjo6VHlwZSkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2Fu
R2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAg
ICAgLy8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUg
dG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4g
SSB3aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVj
dCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhy
b3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFRoaXMgaXMg
bWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwg
YXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0
aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5k
cy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgK
KyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0
aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAg
IAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVs
ZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lLk5vdEFuSW5kZXgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46Omdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJB
WV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICB9CisgICAgCisgICAgaWYg
KCFjYW5HZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9p
ZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKKyAgICBKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZp
ZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmICghY2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRo
cm93aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5k
cy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzZXRJbmRleFF1aWNrbHkoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5
SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSgK
KyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5
TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7
ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBTdHJpbmc6
Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAg
IGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09i
amVjdCwgVHlwZWRBcnJheVZlY3RvclRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09i
amVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Y29weUJhY2tpbmdTdG9yZSgKKyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNp
dG9yLCBDb3B5VG9rZW4gdG9rZW4pCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAg
IAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yVG9rZW4gJiYgdmlzaXRvci5jaGVj
a0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgdm9pZCogb2xk
VmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9
IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAg
ICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsK
KyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHZpc2l0
b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgIH0KKyAg
ICAKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNPYmplY3QsIHZpc2l0b3IsIHRva2Vu
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5Vmll
dyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBX
ZSBwbGF5IHRoaXMgZ2FtZSBiZWNhdXNlIHdlIHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVu
IGZyb20gcGxhY2VzIHRoYXQKKyAgICAvLyBkb24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUq
IG9yIHRoZSBWTSwgYW5kIHdlIG9ubHkgYWxsb2NhdGUgc28gbGl0dGxlCisgICAgLy8gbWVtb3J5
IGhlcmUgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gdHJpZ2dlciBhIEdDIC0ganVzdCBhY2Nv
dW50aW5nIHdoYXQKKyAgICAvLyB3ZSBoYXZlIGRvbmUgaXMgZ29vZCBlbm91Z2guIFRoZSBzb3J0
IG9mIGJpemFycm8gZXhjZXB0aW9uIHRvIHRoZSAiYWxsb2NhdGluZworICAgIC8vIGxpdHRsZSBt
ZW1vcnkiIGlzIHdoZW4gd2UgdHJhbnNmZXIgYSBiYWNraW5nIGJ1ZmZlciBpbnRvIHRoZSBDIGhl
YXA7IHRoaXMKKyAgICAvLyB3aWxsIHRlbXBvcmFyaWx5IGdldCBjb3VudGVkIHRvd2FyZHMgaGVh
cCBmb290cHJpbnQgKGluY29ycmVjdGx5LCBpbiB0aGUgY2FzZQorICAgIC8vIG9mIGFkb3B0aW5n
IGFuIG92ZXJzaXplIHR5cGVkIGFycmF5KSBidXQgd2UgZG9uJ3QgR0MgaGVyZSBhbnl3YXkuIFRo
YXQncworICAgIC8vIGFsbW9zdCBjZXJ0YWlubHkgZmluZS4gVGhlIHdvcnN0IGNhc2UgaXMgaWYg
eW91IGNyZWF0ZWQgYSB0b24gb2YgZmFzdCB0eXBlZAorICAgIC8vIGFycmF5cywgYW5kIGRpZCBu
b3RoaW5nIGJ1dCBjYXVzZWQgYWxsIG9mIHRoZW0gdG8gc2xvdyBkb3duIGFuZCB3YXN0ZSBtZW1v
cnkuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB5b3VyIG1lbW9yeSBmb290cHJpbnQgd2lsbCBkb3Vi
bGUgYmVmb3JlIHRoZSBHQyByZWFsaXplcyB3aGF0J3MKKyAgICAvLyB1cC4gQnV0IGlmIHlvdSBk
byAqYW55dGhpbmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25v
dworICAgIC8vIHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdp
bGwgR0MgYXBwcm9wcmlhdGVseS4KKyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2Jq
ZWN0KTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOworICAgIAorICAgIEFT
U0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICBzaXplX3Qgc2l6
ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIHJlY29yZCwgaW4gdGhlIGJ1dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYg
IW1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAg
ICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgor
ICAgICAgICBtX2J1dHRlcmZseSA9IHN0YXRpY19jYXN0PEluZGV4aW5nSGVhZGVyKj4obV92ZWN0
b3IpLT5idXR0ZXJmbHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2J1dHRlcmZseSA9IEJ1
dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIG1fYnV0dGVyZmx5
LCBoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCBzdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0
LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5
cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlr
ZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNl
IHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSBy
ZWFsbG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIg
PSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09i
amVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGJ1dHRlcmZseSgpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkp
OworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUltcGwoSlNU
eXBlZEFycmF5Vmlldyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAg
ICByZXR1cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgdGhpc09iamVjdC0+
YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bGVuZ3RoKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDhB
cnJheV9oIgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFycmF5X2giCisK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5X2giCisjZGVm
aW5lICJKU0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDEwICsyNjQs
NiBAQCBTdHJpbmcgSlNPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjCiAKIGJvb2wgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGksIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICAvLyBOQi4gVGhl
IGZhY3QgdGhhdCB3ZSdyZSBkaXJlY3RseSBjb25zdWx0aW5nIG91ciBpbmRleGVkIHN0b3JhZ2Ug
aW1wbGllcyB0aGF0IGl0IGlzIG5vdAotICAgIC8vIGxlZ2FsIGZvciBhbnlvbmUgdG8gb3ZlcnJp
ZGUgZ2V0T3duUHJvcGVydHlTbG90KCkgd2l0aG91dCBhbHNvIG92ZXJyaWRpbmcKLSAgICAvLyBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCkuCi0gICAgCiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKICAgICAKICAgICBpZiAoaSA+IE1BWF9BUlJB
WV9JTkRFWCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5
IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8o
SW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9T
X0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhV
aW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50
MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+
IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0
QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJK
U1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFt
cGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhDbGFtcGVk
QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgorI2RlZmlu
ZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NX
ZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciog
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlC
dWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4g
YnVmZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZShleGVjLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWso
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhl
IGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJl
dHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRD
b3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlND
IHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6
CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1
ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9y
IGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVk
IGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitj
bGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJv
bGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2
aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwg
SlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVm
ZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUFkYXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19oCisjZGVmaW5lIFR5cGVkQXJyYXlB
ZGFwdG9yc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJh
eVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcs
IHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJn
Pgorc3RydWN0IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFy
ZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBK
U1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0
aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0
b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkp
OworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRv
TmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpT
VmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1i
ZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUg
Vmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUg
dHlwZVZhbHVlQXJnPgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVk
ZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAg
dHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVk
QXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlw
ZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVt
YmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFs
dWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pT
VmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9
OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IElu
dDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRh
cHRvcjsKK3N0cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1
Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQz
MkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZs
b2F0NjRBcnJheTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFw
dG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZB
ZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxv
YXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRv
cj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9
Oworc3RydWN0IEludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZf
dCwgSW50MTZBcnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQz
MkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXks
IEpTSW50MzJBcnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXks
IFR5cGVVaW50OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yPHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQx
Nj4geyB9Oworc3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PHVpbnQzMl90LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Owor
c3RydWN0IEZsb2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxv
YXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9h
dDY0QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXks
IEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVUludDhDbGFtcGVk
QWRhcHRvciB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENs
YW1wZWRBcnJheSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNW
aWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlw
ZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAg
ICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pihs
cmludCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9O
YXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90
IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJ
bnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUg
PiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRB
cnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29u
dHJvbGxlcjo6flR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVy
X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7
CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIo
KTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3Iu
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRB
cnJheURlc2NyaXB0b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsK
LSAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5
SW50MTYsCi0gICAgVHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBU
eXBlZEFycmF5VWludDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRB
cnJheVVpbnQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2
NAotfTsKLQotc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvcigpCi0gICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VP
ZmZzZXQoMCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAg
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBz
dG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZv
KGNsYXNzSW5mbykKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAg
ICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBj
b25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7
Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVk
bmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07
Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBD
bGFtcFJvdW5kaW5nCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVk
QXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlUeXBlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAg
ICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBl
RmxvYXQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVt
IFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAg
IFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBU
eXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9h
dDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmlldworfTsKKworaW5saW5lIGJv
b2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNl
IFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2Ug
VHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5
VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZs
b2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wg
aXNTaWduZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlw
ZUludDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBUeXBlZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhB
ZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFk
YXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFk
YXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmICJVaW50OEFycmF5X2giCisjZGVmaW5lICJVaW50OEFycmF5X2giCisKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50OENsYW1wZWRBcnJh
eV9oIgorI2RlZmluZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmICJVaW50MTZBcnJheV9oIgorI2RlZmluZSAiVWludDE2QXJyYXlfaCIK
KworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50MzJBcnJheV9oIgorI2RlZmluZSAi
VWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTI1OCw2ICsyNTksMTAgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAg
ZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgor
ICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2Vy
dGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlz
LgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi
U21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5l
cmF0b3JzLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJU
eXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAi
V2Vha1JhbmRvbS5oIgpAQCAtMzgxLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFBy
b2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8
VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJl
Z0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBt
X3JlZ0V4cEFsbG9jYXRvcjsKIApJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24g
MTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdURiB7Ci0KLWJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMm
IHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3Mp
Ci17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7Ci0KLSAgICBpZiAo
IW1fY29udGVudHMubV9kYXRhKSB7Ci0gICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUg
PSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkg
PSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAg
ICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
YWxsVmlld3NBcmVOZXV0ZXJhYmxlKQotICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3Vs
dCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7Ci0gICAg
ICAgIGlmICghcmVzdWx0Lm1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBj
dXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAg
ICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkp
Ci0gICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5h
cHBlbmQoY3VycmVudCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5
QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1
ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0
VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJz
dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQot
dm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0g
ICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRW
aWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2
VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmll
dy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09
IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3
LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
QXJyYXlCdWZmZXJfaAotI2RlZmluZSBBcnJheUJ1ZmZlcl9oCi0KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1j
bGFzcyBBcnJheUJ1ZmZlcjsKLWNsYXNzIEFycmF5QnVmZmVyVmlldzsKLQotY2xhc3MgQXJyYXlC
dWZmZXJDb250ZW50cyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250
ZW50cyk7Ci1wdWJsaWM6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAotICAgICAgICA6IG1f
ZGF0YSgwKQotICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoMCkKLSAgICB7IH0KLQotICAgIGlubGlu
ZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCi0gICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQotICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQotCi1wcml2YXRlOgotICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCi0gICAgeyB9Ci0KLSAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7Ci0KLSAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKLSAgICAgICAgWmVy
b0luaXRpYWxpemUsCi0gICAgICAgIERvbnRJbml0aWFsaXplCi0gICAgfTsKLQotICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOwotICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKLSAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0g
ICAgICAgIG1fZGF0YSA9IDA7Ci0gICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLQot
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOwotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7Ci0gICAgICAgIGlmICghb3RoZXIubV9kYXRhKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKLSAgICB9Ci0KLSAgICB2b2lkKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKLX07Ci0KLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlC
dWZmZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJh
eUJ1ZmZlciopOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYpOwotCi0gICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVV
bmluaXRpYWxpemVkLgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVu
dEJ5dGVTaXplKTsKLQotICAgIGlubGluZSB2b2lkKiBkYXRhKCk7Ci0gICAgaW5saW5lIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNv
bnN0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
biwgaW50IGVuZCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNs
aWNlKGludCBiZWdpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKLSAgICBib29sIGlzTmV1
dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KLQotICAgIH5BcnJheUJ1ZmZl
cigpIHsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQotICAgIGlu
bGluZSBBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5k
KSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0
OwotICAgIHN0YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQg
cmlnaHQpOwotCi0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5
QnVmZmVyVmlldyogbV9maXJzdFZpZXc7Ci19OwotCi1pbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFs
dWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCi17Ci0gICAgQVNTRVJUKGxlZnQgPD0gcmln
aHQpOwotICAgIGlmICh4IDwgbGVmdCkKLSAgICAgICAgeCA9IGxlZnQ7Ci0gICAgaWYgKHJpZ2h0
IDwgeCkKLSAgICAgICAgeCA9IHJpZ2h0OwotICAgIHJldHVybiB4OwotfQotCi1QYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1
bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50
cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7
Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlC
dWZmZXIqIG90aGVyKQotewotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5k
YXRhKCksIG90aGVyLT5ieXRlTGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVu
dHM6Olplcm9Jbml0aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci0+ZGF0
YSgpLCBzb3VyY2UsIGJ5dGVMZW5ndGgpOwotICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwot
fQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlC
dWZmZXIoY29udGVudHMpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50
Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplKTsKLX0KLQotUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0
aWFsaXphdGlvblBvbGljeSBwb2xpY3kpCi17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250
ZW50czsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywg
ZWxlbWVudEJ5dGVTaXplLCBwb2xpY3ksIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1f
ZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOwotfQotCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZm
ZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQotewotICAgIGNvbnRl
bnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwotfQotCi12b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgp
Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi1jb25zdCB2b2lkKiBBcnJh
eUJ1ZmZlcjo6ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwot
fQotCi11bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwotfQot
Ci1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBj
b25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5n
dGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUlt
cGwodW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBz
aXplID0gYmVnaW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOwotICAgIHJldHVybiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNp
emUpOwotfQotCi11bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNv
bnN0Ci17Ci0gICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKLSAgICBp
ZiAoaW5kZXggPCAwKQotICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKLSAg
ICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Ci19Ci0KLXZvaWQg
QXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRp
b25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCi17Ci0gICAgLy8g
RG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBG
SVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3Mg
aXRzIGFyZ3VtZW50cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVy
Zmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vz
c2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/Ci0gICAgaWYgKG51bUVsZW1lbnRzKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXpl
KSB7Ci0gICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLSAgICBib29sIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBmYWxzZTsK
LSAgICBpZiAocG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBhbGxvY2F0aW9uU3Vj
Y2VlZGVkID0gV1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUp
LmdldFZhbHVlKHJlc3VsdC5tX2RhdGEpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocG9s
aWN5ID09IERvbnRJbml0aWFsaXplKTsKLSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdU
Rjo6dHJ5RmFzdE1hbGxvYyhudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUo
cmVzdWx0Lm1fZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbG9jYXRpb25TdWNjZWVkZWQpIHsK
LSAgICAgICAgcmVzdWx0Lm1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRl
U2l6ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQubV9kYXRhID0gMDsKLX0K
LQotQXJyYXlCdWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudHMoKQotewotICAgIFdU
Rjo6ZmFzdEZyZWUobV9kYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6QXJyYXlCdWZmZXI7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIK
LQotI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1BcnJheUJ1
ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgICAgIDog
bV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCi0gICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkK
LSAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9wcmV2VmlldygwKQotICAg
ICAgICAsIG1fbmV4dFZpZXcoMCkKLXsKLSAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAo
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7
Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7Ci19
Ci0KLUFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCi17Ci0gICAgaWYgKG1fYnVm
ZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKLX0KLQotdm9pZCBBcnJh
eUJ1ZmZlclZpZXc6Om5ldXRlcigpCi17Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9m
ZnNldCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3
X2gKLSNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZl
ci5oPgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1ZmZl
clZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKLSAgcHVibGljOgot
ICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4
LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAg
IFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAg
ICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0
YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsK
LQotICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9idWZmZXI7Ci0gICAgfQotCi0gICAgdm9pZCogYmFzZUFkZHJlc3MoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRl
T2Zmc2V0OwotICAgIH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
ID0gMDsKLQotICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFi
bGUgPSBmbGFnOyB9Ci0gICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lz
TmV1dGVyYWJsZTsgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVm
ZmVyVmlldygpOwotCi0gIHByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlC
dWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0
ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdl
Qnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5k
TGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25l
ZCogbGVuZ3RoKTsKLQotICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1y
YW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwotICAgIC8vIHdpdGhpbiByYW5nZS4KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBudW1FbGVtZW50cykKLSAgICB7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0
ICUgc2l6ZW9mKFQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0
ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5n
dGgoKSAtIGJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAobnVtRWxlbWVudHMg
PiByZW1haW5pbmdFbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBv
ZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwotICAgIC8vIG91dHB1dCBvZmZzZXQg
aXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFu
ZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAq
bnVtRWxlbWVudHMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9N
QVggLSBhcnJheUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAoKm9mZnNldCA+
IG1heE9mZnNldCkgewotICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
OwotICAgICAgICAgICAgKm51bUVsZW1lbnRzID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNp
emVvZihUKTsKLSAgICAgICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
LCAqb2Zmc2V0KTsKLSAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVy
LT5ieXRlTGVuZ3RoKCkgLSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgKm51bUVsZW1l
bnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7Ci0gICAgfQot
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotICAgIC8v
IFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0
aGUgYnl0ZSBvZmZzZXQuCi0gICAgdm9pZCogbV9iYXNlQWRkcmVzczsKLQotICAgIHVuc2lnbmVk
IG1fYnl0ZU9mZnNldCA6IDMxOwotICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwotCi0gIHBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFy
cmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKLX07Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojpz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0g
ICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IGFycmF5LT5ieXRlTGVuZ3RoKCkgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNl
dCArIGFycmF5LT5ieXRlTGVuZ3RoKCkgPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAgIC8vIE91dCBv
ZiByYW5nZSBvZmZzZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkp
OwotICAgIG1lbW1vdmUoYmFzZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBh
cnJheS0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcnJheUJ1
ZmZlclZpZXc6OnNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRl
TGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxl
bmd0aCgpCi0gICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZz
ZXQpIHsKLSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwg
ZGF0YSwgZGF0YUJ5dGVMZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5
QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFu
Z2VCeXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAg
ICAgIHx8IGJ5dGVPZmZzZXQgKyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAg
ICAgfHwgYnl0ZU9mZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAgICAg
ICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFz
ZUFkZHJlc3MoKSk7Ci0gICAgbWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVM
ZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2Fs
Y3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlT
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQotewotICAgIGlmIChzdGFydCA8IDApCi0g
ICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBz
dGFydCA9IDA7Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBhcnJheVNpemU7Ci0g
ICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihlbmQpID4gYXJyYXlTaXplKQotICAgICAgICBlbmQgPSBhcnJheVNpemU7Ci0gICAg
aWYgKGVuZCA8IHN0YXJ0KQotICAgICAgICBlbmQgPSBzdGFydDsKLSAgICAqb2Zmc2V0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KTsKLSAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZCAtIHN0YXJ0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdU
Rjo6QXJyYXlCdWZmZXJWaWV3OwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3Vu
dGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RB
bGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBj
b3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMg
aGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBh
biBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMK
Ky8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9y
IGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVu
Y3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYo
KQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50Owor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291
bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVS
ZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgp
CisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAg
cmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2Uo
Ym9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9y
ZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1f
cmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVk
IDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkK
KyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFz
ZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAg
fkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208361</attachid>
            <date>2013-08-08 12:12:07 -0700</date>
            <delta_ts>2013-08-08 17:38:29 -0700</delta_ts>
            <desc>lol so much code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>228573</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJy
YXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkK
K3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRo
aXMsIG1faW1wbC5nZXQoKSk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAg
IEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsg
cmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJpdmF0ZToKKyAgICBBcnJh
eUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8g
PSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6
ZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBt
X2J1dHRlcmZseSgwKQoreworICAgIGlmIChsZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgeworICAg
ICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24uCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAg
ICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOworICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAg
bV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nh
c3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUg
LyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgYXNXb3Jkc1tpXSA9IDA7Cisj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4g
NEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBlbGVtZW50U2l6ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRT
aXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBl
bGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9t
b2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3Ry
dWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZSgw
KQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRh
KCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9kZShi
eXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGlu
ZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVm
ZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAw
LCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpK
U0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisg
ICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQor
ICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQu
bGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5k
aXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1fbW9k
ZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
T3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBm
aW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhlYXAu
YWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1
ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlCdWZmZXJW
aWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAg
ICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29u
dHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmll
dzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJl
amVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBy
ZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0
eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVj
dChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBl
ZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAg
IEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAg
CisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxl
YXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwor
ICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXpl
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+PSBXYXN0
ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRo
b3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisv
LyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhl
IERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8g
ICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBh
biBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBl
IG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50
LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5r
IHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90Cisv
LyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCog
YSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlz
IGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2Vi
Q29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1
cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3Qg
aW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHBy
b3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVw
ZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBk
b25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIg
b3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRB
cnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNl
ZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNl
LCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1p
bmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXks
CisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5v
dCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBw
b2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwg
ViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAv
LyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQg
ZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2ls
bCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAor
ICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdh
eS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJl
ZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5
cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEK
KyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdh
c3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rv
ci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5IgorICAgIC8vIGlzIHRoZSBi
eXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNv
cmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0
IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVx
dWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vz
c2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZm
ZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRo
b2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMg
bm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29k
ZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitj
bGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNp
emVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAg
ICBwdWJsaWM6CisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1
aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgCisgICAgICAg
IENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1
Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVj
dHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUg
YnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsgYWxzbworICAgIC8vIG1vdmVzIHRo
ZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogYnVmZmVy
KCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5l
dXRlcigpOworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9Cisg
ICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXpl
KEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdm9pZCogbV92ZWN0b3I7
CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworfTsK
KwordGVtcGxhdGU8dGVtcGxhdGUgQz4KK0MqIGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhB
cnJheUJ1ZmZlckFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgZWxlbWVudFNpemUpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXdD
b25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciIs
ICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVm
ZmVyVmlld0NvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6
SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0FycmF5QnVmZmVyVmlld0Nv
bnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9y
KiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5
QnVmZmVyVmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZp
ZXdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlC
dWZmZXJWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZl
clZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3Jf
aAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoK
KyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
d0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPCBXYXN0ZWZ1bFR5cGVkQXJyYXkp
CisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7Cit9
CisKK2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQor
eworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBi
dXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7
CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQor
CitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xlbmd0
aCA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNl
dCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbW9kZSAtIFdhc3RlZnVsVHlwZWRBcnJheTsKK30K
KwordGVtcGxhdGU8dGVtcGxhdGUgQz4KK0MqIGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhB
cnJheUJ1ZmZlckFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgZWxlbWVudFNpemUpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1l
bnQuIikpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2Fz
dDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmICghanNCdWZmZXIp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJFeHBlY3RlZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiIpKTsKKworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5h
cmd1bWVudCgxKS50b1VJbnQzMihleGVjKSA6IDA7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSAwOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgIGxlbmd0
aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIGVs
ZW1lbnRTaXplKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3Qg
YSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9m
ZnNldCkgLyBlbGVtZW50U2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIEM6OmNyZWF0ZShleGVjLT52
bSgpLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXdQcm90b3R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0Fy
cmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlclZpZXdQ
cm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUpCit9OworCitKU0FycmF5QnVmZmVyVmlld1Byb3Rv
dHlwZTo6SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworSlNBcnJheUJ1ZmZlclZp
ZXdQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZSog
cHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1
ZmZlclZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyVmlld1By
b3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJW
aWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBl
X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3UHJv
dG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlclZp
ZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0Fy
cmF5QnVmZmVyVmlld1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNCArMjM1LDE0IEBAIGJvb2wg
SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3
KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpTQ2Vs
bDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTksNiArMTU5LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1l
bW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyB2b2lkIGdldFR5cGVkQXJyYXlJ
bXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXc6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAm
QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKwor
SlNEYXRhVmlldzo6SlNEYXRhVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRl
eHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFW
aWV3OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBw
YXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVp
bnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dW
TUVycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBv
ZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1
cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQp
OworICAgIEpTRGF0YVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTRGF0YVZpZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+
KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5t
X2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
KyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNEYXRh
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0RhdGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5
KEpTVHlwZWRBcnJheVZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFy
cmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNEYXRhVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gRGF0YVZp
ZXc6OmNyZWF0ZSgKKyAgICAgICAgdGhpc09iamVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5
dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld19oCisjZGVmaW5lIEpT
RGF0YVZpZXdfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAor
cHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoCisgICAgICAgIFZNJiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisg
ICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRB
cnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5
cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Rh
dGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3Q29u
c3RydWN0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFW
aWV3Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdDb25zdHJ1Y3RvciIsICZC
YXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3Q29u
c3RydWN0b3IpCit9OworCitKU0RhdGFWaWV3Q29uc3RydWN0b3I6OkpTRGF0YVZpZXdDb25zdHJ1
Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQoreworfQorCitKU0RhdGFWaWV3Q29uc3RydWN0b3IqIEpTRGF0YVZpZXdDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmll
d0NvbnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0RhdGFWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0RhdGFWaWV3
Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3REYXRhVmlldyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZl
ckFyZ3VtZW50PEpTRGF0YVZpZXc+KAorICAgICAgICBleGVjLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZGF0YVZpZXdTdHJ1Y3R1cmUoKSwgMSk7
Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3RE
YXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3REYXRhVmlldzsKKyAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxEYXRhIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdERhdGFWaWV3OworICAgIHJldHVybiBDYWxsVHlw
ZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3Q29uc3RydWN0
b3JfaAorI2RlZmluZSBKU0RhdGFWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJu
YWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlld0NvbnN0
cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYg
SW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld0NvbnN0
cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmll
d0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0RhdGFWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0RhdGFWaWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3UHJvdG90eXBl
OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwg
RXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEYXRh
Vmlld1Byb3RvdHlwZSkKK307CisKKy8qIFNvdXJjZSBmb3IgSlNEYXRhVmlld1Byb3RvdHlwZS5s
dXQuaAorQGJlZ2luIGRhdGFUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
Z2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQz
MiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMyICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0
RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDggICAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50
MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBz
ZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAgIGRhdGFW
aWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5
cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmlld1Byb3Rv
dHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNE
YXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90b3R5cGUo
dm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisg
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhl
Y1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0YVZpZXdQcm90b3R5cGUqPihj
ZWxsKSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3
UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25EZXNjcmlwdG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmll
d1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8RGF0YVZpZXdQcm90b3R5cGUqPihvYmplY3QpLAorICAgICAg
ICBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNE
YXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhv
ZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRD
b3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiTmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0KS4iKSk7
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUlu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVu
ZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2YoQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaWVuZCgpKTsK
KyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
Ik91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUg
PSAqcmVpbnRlcnByZXRfY2FzdDxBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRv
RmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBm
bGlwQnl0ZXModmFsdWUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRv
cjo6dG9KU1ZhbHVlKHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitF
bmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3
KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3Qg
YmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVl
KS4iKSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBBZGFwdG9y
OjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZh
bHNlOworICAgIGlmIChzaXplb2YoQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaWVuZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBi
b3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7Cisg
ICAgCisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTRGF0YVZpZXdQcm90
b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAg
ICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgICAgIEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
SlNGbG9hdDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgIkpTRmxvYXQ2NEFycmF5X2giCisjZGVmaW5lICJKU0Zsb2F0NjRBcnJheV9oIgorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5
cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxl
OgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBw
b2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdz
IGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJv
bSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAg
ICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9k
ZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXIt
d2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8g
QiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJm
bG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRo
ZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVp
dGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8g
d2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9k
ZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1
c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUg
bW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBl
bmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcg
aXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVu
dCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dp
bmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3Ry
dWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRl
ZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdU
eXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0
aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRp
dmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVl
KGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
QXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUq
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZp
ZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0
ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5
cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUp
KTsgfQorICAgIAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBZGFwdG9yOjpUeXBlKj4o
bV92ZWN0b3IpOworICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsK
KyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVk
IGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRo
ZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9v
bCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
IDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlj
a2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBt
X2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAK
KyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZh
bHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClb
aV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJs
ZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNr
bHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZl
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldElu
ZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5v
bkFycmF5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlw
ZWRBcnJheVN0b3JhZ2VUeXBlID0gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIAorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxs
LW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAg
Ly8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhl
YXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlW
aWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFy
cmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAg
OiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBs
ZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmds
b2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVm
ZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTxBZGFwdG9yOjpU
eXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigK
KyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFu
ZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1Jl
ZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4
dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3Ro
KCkpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
cmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2
bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIGltcGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3du
UHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5s
ZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFk
YXB0b3I6OlR5cGUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxl
bmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBq
c051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGlu
ZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihnZXRJbmRleFF1aWNrbHko
aW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVh
cnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3Bl
cnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpLCB2YWx1ZSwg
c2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBtYXRjaGluZyBGaXJlZm94IGJl
aGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRlbXB0cyB0bworICAgIC8v
IGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlz
LCBldmVuIGlmIHRoZXkncmUgb3V0CisgICAgLy8gb2YgYm91bmRzLgorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0
eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0
dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSBy
ZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6
OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
LCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29s
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BldHlOYW1l
LmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWUuTm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9v
bCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAg
IHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisg
ICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhbkdldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5z
ZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAor
ICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKCFjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAvLyBZ
ZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcgaWYg
eW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHNldEluZGV4UXVpY2tseShleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKKyAgICBKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNP
YmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAgICAgICAgICAgY2VsbCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAg
ICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBh
cnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXks
IG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytpKQorICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJh
eTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVj
dG9yVG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRB
cnJheTogeworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVj
dC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3Jl
KAorICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tl
bikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHRva2VuID09
IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNP
YmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0
LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5l
d1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBtZW1jcHkobmV3VmVjdG9y
LCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB0aGlzT2JqZWN0
LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3Rv
ciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIEJhc2U6OmNvcHlC
YWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJl
Y2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAor
ICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ug
b25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90
IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8v
IHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRp
b24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0
cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdp
bGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3Jy
ZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQg
YXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0
IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBv
ZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBh
bGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0
IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJl
YWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJp
Z2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3Ug
KmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5
LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5o
YXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0
ZVNpemUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcmVjb3JkLCBpbiB0aGUg
YnV0dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQgaXMuCisgICAgCisgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQorICAgICAgICAmJiAhbV9idXR0ZXJmbHkgJiYgc2l6
ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIC8vIFJldXNlIGFscmVhZHkg
YWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIG1fYnV0dGVyZmx5
ID0gc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihtX3ZlY3RvciktPmJ1dHRlcmZseSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdy
b3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgbV9idXR0ZXJmbHksIGhlYXAtPnZtKCksIHRoaXNP
YmplY3QsIHN0cnVjdHVyZSgpLAorICAgICAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNh
c2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
dGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAg
Ly8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJv
bSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2Fz
ZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAg
IC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYnV0
dGVyZmx5KCktPnNldEFycmF5QnVmZmVyKGJ1ZmZlci5nZXQoKSk7CisgICAgaGVhcC0+YWRkUmVm
ZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4KK0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3KiBvYmpl
Y3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBBZGFwdG9yOjpW
aWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVj
dC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50OEFycmF5X2giCisjZGVmaW5lICJK
U0ludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQx
NkFycmF5X2giCisjZGVmaW5lICJKU0ludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmICJKU0ludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MzJBcnJheV9o
IgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsMTAgKzI2NCw2IEBAIFN0cmluZyBKU09iamVj
dDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWMKIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRp
cmVjdGx5IGNvbnN1bHRpbmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMg
bm90Ci0gICAgLy8gbGVnYWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNs
b3QoKSB3aXRob3V0IGFsc28gb3ZlcnJpZGluZwotICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoKS4KLSAgICAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwogICAgIAogICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVm
aW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBK
UyMjdHlwZSMjQXJyYXk6OnNfaW5mbyA9IHsjdHlwZSAiQXJyYXkiLCAmSlMjI3R5cGUjI0FycmF5
OjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5
KX0KKworTUFLRV9TX0lORk8oSW50OCk7CitNQUtFX1NfSU5GTyhJbnQxNik7CitNQUtFX1NfSU5G
TyhJbnQzMik7CitNQUtFX1NfSU5GTyhVaW50OCk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWQp
OworTUFLRV9TX0lORk8oVWludDE2KTsKK01BS0VfU19JTkZPKFVpbnQzMik7CitNQUtFX1NfSU5G
TyhGbG9hdDMyKTsKK01BS0VfU19JTkZPKEZsb2F0NjQpOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5c19oCisj
ZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50
MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBK
U0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRv
cj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRB
cnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhBcnJheV9oIgorI2Rl
ZmluZSAiSlNVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNl
bmRpZiAvLyBKU1VpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorI2RlZmluZSAi
SlNVaW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisj
ZW5kaWYgLy8gSlNVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmICJKU1VpbnQxNkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQxNkFycmF5X2gi
CisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQxNkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDMyQXJyYXlf
aCIKKyNkZWZpbmUgIkpTVWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiwgQXJy
YXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0gbmF0
aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisgICAg
SlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMsIG5hdGl2
ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhayhyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250
cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVy
IHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVm
ZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hh
dAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcg
c3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBK
U0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgor
Ly8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFm
dGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUs
IHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pT
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0
eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlw
ZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRl
ZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3
VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZh
bHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0
b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUg
dG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
Pih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5h
bWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1
Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7Cisg
ICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVB
cmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVl
ID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3N0cnVjdCBJbnQ4QWRh
cHRvcjsKK3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJBZGFwdG9yOworc3RydWN0
IFVpbnQ4QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yOworc3RydWN0IFVpbnQx
NkFkYXB0b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvcjsK
K3N0cnVjdCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xh
c3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PElu
dDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVp
bnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVp
bnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50MTZBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBKU0ludDMy
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gSlNV
aW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRB
ZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRBcnJheTsK
Kworc3RydWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4X3Qs
IEludDhBcnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07CitzdHJ1Y3QgSW50MTZBZGFw
dG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5LCBKU0lu
dDE2QXJyYXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRhcHRvciA6IEludGVncmFs
VHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJbnQzMkFycmF5LCBUeXBl
SW50MzI+IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yPHVpbnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlwZVVpbnQ4PiB7IH07Citz
dHJ1Y3QgVWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDE2X3Qs
IFVpbnQxNkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7IH07CitzdHJ1Y3QgVWlu
dDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDMyX3QsIFVpbnQzMkFy
cmF5LCBKU1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQzMkFkYXB0
b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMyQXJyYXksIEpTRmxvYXQz
MkFycmF5LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRBZGFwdG9yIDogRmxvYXRU
eXBlZEFycmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNGbG9hdDY0QXJyYXksIFR5
cGVGbG9hdDY0PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1wZWRBZGFwdG9yIHsKKyAgICB0eXBl
ZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZpZXdUeXBl
OworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAgIHN0YXRp
YyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWludDhDbGFtcGVkOworICAg
IAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1w
KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJl
cigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBy
ZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9E
b3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90
IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAg
IHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7
CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5
QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250
cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxlcjo6VHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJh
eUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlDb250
cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFycmF5QnVmZmVyOwor
Y2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKK2NsYXNzIEpTR2xvYmFsT2Jq
ZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3VudGVkPFR5
cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgVHlwZWRBcnJheUNvbnRyb2xsZXIo
KTsKKyAgICB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1
YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0Kiwg
QXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNTMzNTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0j
ZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVj
dCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUgewotICAgIFR5cGVkQXJyYXlOb25l
LAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICBUeXBlZEFy
cmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAgIFR5cGVkQXJyYXlVaW50OENsYW1w
ZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBlZEFycmF5VWludDMyLAotICAgIFR5
cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDY0Ci19OwotCi1zdHJ1Y3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAgICAg
OiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldCgwKQotICAgICAgICAs
IG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAgICBUeXBlZEFycmF5RGVzY3JpcHRv
cihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZzZXQsIHNpemVf
dCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0luZm8oY2xhc3NJbmZvKQotICAgICAg
ICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQotICAgICAgICAsIG1fbGVuZ3RoT2Zm
c2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIGNvbnN0IENsYXNzSW5mbyogbV9j
bGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNldDsKLSAgICBzaXplX3QgbV9sZW5n
dGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWduZWRuZXNzIHsKLSAgICBTaWduZWRU
eXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQotfTsKLWVudW0gVHlwZWRBcnJheVJv
dW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAgIENsYW1wUm91bmRpbmcKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlwZWRBcnJheURlc2NyaXB0b3JfaAot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJOb3RU
eXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgiVHlw
ZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBl
RGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRB
cnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVHlwZWRBcnJheVR5cGUgewor
ICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5
cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlw
ZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0
NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCitpbmxpbmUgYm9vbCBpc1R5cGVkVmlldyhUeXBl
ZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
Tm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5s
aW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNh
c2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVV
aW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5
VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUlu
dDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBU
eXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VHlw
ZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVkQXJy
YXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheXNfaAor
I2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4
Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFw
dG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4QXJy
YXlfaCIKKyNkZWZpbmUgIlVpbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgi
CisKKyNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJVaW50
OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8v
IFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVp
bnQxNkFycmF5X2giCisjZGVmaW5lICJVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgIlVpbnQzMkFycmF5X2giCisjZGVmaW5lICJVaW50MzJBcnJheV9oIgorCisj
aW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBD
YWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2lu
Y2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5o
IgpAQCAtMjU4LDYgKzI1OSwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRy
KG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlh
bGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlh
bGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5
Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsK
IH0KIAogVk06On5WTSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNp
bmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRl
ICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCkBAIC0z
ODEsNiArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIq
IG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBt
X3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxl
cj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhw
Q2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgot
Ci0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBBcnJh
eUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEp
IHsKLSAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChB
cnJheUJ1ZmZlclZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsK
LSAgICAgICAgaWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJl
TmV1dGVyYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFi
bGUpCi0gICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQubV9k
YXRhKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2Zp
cnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0Vmll
dzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJl
TmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJl
bnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJy
YXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2
aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7
Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9
IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpy
ZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2
aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXct
Pm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3
LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmll
dy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9m
aXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3
LT5tX25leHRWaWV3ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZpc2lv
biAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0jZGVm
aW5lIEFycmF5QnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwot
Y2xhc3MgQXJyYXlCdWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoKLSAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAgICwg
bV9zaXplSW5CeXRlcygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRl
bnRzKCk7Ci0KLSAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5zaWdu
ZWQgc2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgQXJyYXlCdWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykg
Ci0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5C
eXRlcykKLSAgICB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAgIGVu
dW0gSW5pdGlhbGl6YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAgICAg
ICAgRG9udEluaXRpYWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFs
bG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIElu
aXRpYWxpemF0aW9uUG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0cmFu
c2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgh
b3RoZXIubV9kYXRhKTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAgICBv
dGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0gMDsK
LSAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8oQXJy
YXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1f
ZGF0YSk7Ci0gICAgICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6ZUlu
Qnl0ZXMsIHNpemVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUs
IG90aGVyKTsKLSAgICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1lbWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7Ci0g
ICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQotICAg
IHZvaWQqIG1fZGF0YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xhc3Mg
QXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGljOgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291
cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBPbmx5
IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVk
KHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0gICAg
aW5saW5lIHZvaWQqIGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0
OwotICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsK
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBjb25z
dDsKLQotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92
ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+ID4mIG5ldXRlcmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFt
X2NvbnRlbnRzLm1fZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZhdGU6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWdu
ZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250
ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVyKEFy
cmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
c2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlubGlu
ZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGlu
ZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBBcnJh
eUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0
VmlldzsKLX07Ci0KLWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQs
IGludCByaWdodCkKLXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHggPCBs
ZWZ0KQotICAgICAgICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4ID0g
cmlnaHQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5
QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRl
U2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUs
IEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17Ci0g
ICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVM
ZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVh
dGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFycmF5
QnVmZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxs
b2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUs
IGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZm
ZXIoY29udGVudHMpKTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxl
bmd0aCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVu
dHMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwot
fQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewot
ICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVt
ZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBv
bGljeSkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVm
ZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBv
bGljeSwgY29udGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19
Ci0KLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50
cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9jb250
ZW50cyk7Ci19Ci0KLXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gbV9j
b250ZW50cy5tX2RhdGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFycmF5
QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX3Np
emVJbkJ5dGVzOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xh
bXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwg
dW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBlbmQg
PyBlbmQgLSBiZWdpbiA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2lnbmVk
IEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNpZ25l
ZCBjdXJyZW50TGVuZ3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAg
ICAgIGluZGV4ID0gY3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZhbHVl
KGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRz
Ojp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVT
aXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFy
cmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0
IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUg
dHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAg
IC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxk
IHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUg
Y2hlY2sgaGVyZT8KLSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQgdG90
YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3Rh
bFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5tX2RhdGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kgPT0g
WmVyb0luaXRpYWxpemUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZh
c3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1f
ZGF0YSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRpYWxp
emUpOwotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9jKG51
bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAg
ICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQubV9z
aXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNvbnRl
bnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2RhdGEp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsKLQot
I2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVy
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmNw
cAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLUFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZm
ZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9m
ZnNldCkKLSAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICAgICAsIG1fYnVmZmVy
KGJ1ZmZlcikKLSAgICAgICAgLCBtX3ByZXZWaWV3KDApCi0gICAgICAgICwgbV9uZXh0Vmlldygw
KQotewotICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4o
bV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIp
IAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKLX0KLQotQXJyYXlCdWZmZXJWaWV3
Ojp+QXJyYXlCdWZmZXJWaWV3KCkKLXsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVm
ZmVyLT5yZW1vdmVWaWV3KHRoaXMpOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVy
KCkKLXsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKLX0KLQotfQpJ
bmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJj
ZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlclZpZXdfaAotI2RlZmluZSBBcnJheUJ1
ZmZlclZpZXdfaAotCi0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0KLSNpbmNsdWRlIDxh
bGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZD
b3VudGVkPEFycmF5QnVmZmVyVmlldz4gewotICBwdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7
Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVVaW50
OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAgICAg
ICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQzMiwK
LSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0gICAg
dmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZl
cjsKLSAgICB9Ci0KLSAgICB2b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9iYXNlQWRkcmVzczsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBz
ZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KLSAgICBi
b29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9Ci0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7Ci0KLSAgcHJv
dGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wg
c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1Jhbmdl
SW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBp
bnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCi0gICAg
Ly8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVm
ZmVyIGlzCi0gICAgLy8gd2l0aGluIHJhbmdlLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
ICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQot
ICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChzaXplb2YoVCkgPiAxICYmIGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVk
IHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNldCkg
LyBzaXplb2YoVCk7Ci0gICAgICAgIGlmIChudW1FbGVtZW50cyA+IHJlbWFpbmluZ0VsZW1lbnRz
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBJbnB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGVsZW1lbnRzIGZyb20gdGhp
cyBhcnJheSdzIHZpZXc7Ci0gICAgLy8gb3V0cHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgYnl0
ZXMgZnJvbSB0aGUgdW5kZXJseWluZyBidWZmZXIncyB2aWV3LgotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0ZU9mZnNl
dCkgLyBzaXplb2YoVCk7Ci0gICAgICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7Ci0gICAg
ICAgICAgICAqb2Zmc2V0ID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAqbnVt
RWxlbWVudHMgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICpv
ZmZzZXQgPSBhcnJheUJ5dGVPZmZzZXQgKyAqb2Zmc2V0ICogc2l6ZW9mKFQpOwotICAgICAgICAq
b2Zmc2V0ID0gc3RkOjptaW4oYnVmZmVyLT5ieXRlTGVuZ3RoKCksICpvZmZzZXQpOwotICAgICAg
ICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtICpv
ZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihyZW1h
aW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVz
cyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KLSAg
ICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwotCi0gICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDogMzE7
Ci0gICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgQXJyYXlCdWZmZXI7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAg
ICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX25l
eHRWaWV3OwotfTsKLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZmZXJW
aWV3KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+
IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVMZW5ndGgo
KSA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVMZW5n
dGgoKSA8IGJ5dGVPZmZzZXQpIHsKLSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBv
dmVyZmxvdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJh
c2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNl
ICsgYnl0ZU9mZnNldCwgYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3RoKCkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFuZ2VJ
bXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0
ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8
fCBieXRlT2Zmc2V0ICsgZGF0YUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwg
Ynl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBP
dXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVz
cygpKTsKLSAgICBtZW1tb3ZlKGJhc2UgKyBieXRlT2Zmc2V0LCBkYXRhLCBkYXRhQnl0ZUxlbmd0
aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFu
Z2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpCi17Ci0g
ICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsg
cmFuZ2VCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ug
b2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsKLSAgICBt
ZW1zZXQoYmFzZSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5n
dGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2ln
bmVkKiBsZW5ndGgpCi17Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0gYXJy
YXlTaXplOwotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICBpZiAo
ZW5kIDwgMCkKLSAgICAgICAgZW5kICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgMCkKLSAg
ICAgICAgZW5kID0gMDsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgPiBhcnJh
eVNpemUpCi0gICAgICAgIGVuZCA9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgc3RhcnQpCi0g
ICAgICAgIGVuZCA9IHN0YXJ0OwotICAgICpvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhcnQpOwotICAgICpsZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlclZpZXc7
Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdfaApJbmRleDogU291cmNlL1dURi93dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJh
YmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50
IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVy
cmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0
aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIs
IGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhh
cHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8g
c29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFz
cyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBk
ZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1l
bmV0ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBt
X3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNP
bmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZDb3Vu
dCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFi
bGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1f
cmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7
CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVk
RmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50
ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVm
Q291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZGVy
ZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVy
cmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWQodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50
ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlw
Qnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVu
ZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwor
I2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWlu
dDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYg
MHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitp
bmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAo
KHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZm
MDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAg
IHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZs
aXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAw
MDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAw
ZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxs
dSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwg
OCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8
ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFs
dWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1
ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09
IDIpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2Fz
dDx1aW50MTZfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVpbnQzMl90
Pih2YWx1ZSkpKTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KQorICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0
bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKKworI2VuZGlmIC8vIEZsaXBCeXRlc19o
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208383</attachid>
            <date>2013-08-08 17:38:29 -0700</date>
            <delta_ts>2013-08-09 12:05:51 -0700</delta_ts>
            <desc>constructors are done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>243514</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJy
YXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkK
K3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRo
aXMsIG1faW1wbC5nZXQoKSk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAg
IEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsg
cmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJpdmF0ZToKKyAgICBBcnJh
eUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8g
PSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6
ZSwKKyAgICBJbml0aWFsaXphdGlvbk1vZGUgbW9kZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX2J1dHRlcmZseSgwKQoreworICAgIGlmIChs
ZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgeworICAgICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRp
b24uCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxl
bmd0aCwgZWxlbWVudFNpemUpOworICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBt
X21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICAgICAg
YXNXb3Jkc1tpXSA9IDA7CisgICAgICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEg
dHlwZWQgYXJyYXkgdG8gdXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBp
ZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBl
ZEFycmF5KSAvIGVsZW1lbnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1v
ZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxl
bWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIXRyeU1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0
VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkg
KiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
bV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVy
ZSgwKQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5k
YXRhKCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9k
ZShieXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVy
IGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5
QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAw
LCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQp
CisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgp
KQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRl
eHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4
dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1f
bW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlz
LCBmaW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhl
YXAuYWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJh
eUJ1ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlCdWZm
ZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2Jq
ZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgewor
ICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5
Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1
ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50
eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30K
Kwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAg
IHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0
byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0
eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0
IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAg
fQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFs
aXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+PSBX
YXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVm
ZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVz
IHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5k
CisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMg
dGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAor
Ly8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBv
ZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0
eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVy
ZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBs
aW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90
CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9z
dCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0
IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGgg
V2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZl
cyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBu
b3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8v
IHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMg
ZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhh
cyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZm
ZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlw
ZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVu
dXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNw
YWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJy
YXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRz
IG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0
byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRl
ciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAg
ICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWlu
ZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcg
d2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5
LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5
IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBh
IHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZl
IHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRv
IGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9
IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZl
Y3Rvci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5IgorICAgIC8vIGlzIHRo
ZSBieXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdl
YkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8g
Z2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMg
cmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFj
Y2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlC
dWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBN
ZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBo
YXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8g
Y29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50Lgor
CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGlj
IHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAK
KyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGws
IERvbnRJbml0aWFsaXplIH07CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
KFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwg
SW5pdGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsg
fQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBt
X3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1f
bGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZs
eSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYs
IENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1NUYXRlKiwgUHJvcGVydHlOYW1lKTsK
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIs
IG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEg
aW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7
CisgICAgCisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlld0NvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
CitKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAg
ICAgICAgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBw
cm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQor
CitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKFZN
JiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdD
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3Ry
dWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmlu
ZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUg
PCBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5k
V2FzdGVNZW1vcnkodGhpcyk7Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlC
dWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vz
c2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlC
dWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5
QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVk
QXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1
dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5
QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3Rl
ZnVsVHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbW9kZSAtIFdh
c3RlZnVsVHlwZWRBcnJheTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6
OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5m
bywgMCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90
eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKiBKU0FycmF5QnVm
ZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlPih2bS5o
ZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7
CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0
dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUz
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpT
QXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1
YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcq
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyop
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRh
Vmlldzo6c19pbmZvID0geworICAgICJEYXRhVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3
KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNv
bnRleHQpCit7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRC
dWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAo
IUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBv
ZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25z
dHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVz
dWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0u
aGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNEYXRhVmll
dyogSlNEYXRhVmlldzo6Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNE
YXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3Ro
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBl
ZEFycmF5VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBs
KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBEYXRhVmlldzo6Y3Jl
YXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmll
d19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmll
dyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMg
SlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKKyAgICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxs
eSB3b3JrOyB0aGVzZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0
YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBl
ZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVk
QXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRU
eXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgCitwdWJsaWM6CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNE
YXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5
cGUuaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAg
ICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFW
aWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3UHJvdG90eXBlKQor
fTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZGF0
YVRhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDgg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50OCAgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWlu
dDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBn
ZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAgICAgIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMyICAgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRV
aW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAg
ICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8K
KworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0Rh
dGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBl
Pih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3
VGFibGUoZXhlYyksIGpzQ2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KGNlbGwpLAorICAgICAgICBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNP
YmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpz
Q2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNW
YWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmll
dyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRh
Vmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0
IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7Cisg
ICAgaWYgKHNpemVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBh
Y2Nlc3MiKSk7CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9j
YXN0PEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3Rv
cigpKSArIGJ5dGVPZmZzZXQpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFsdWUodmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIHNl
dERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNE
eW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0
YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIp
KTsKKyAgICAKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVh
c3QgdHdvIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCBhbmQgdmFsdWUpLiIpKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBB
ZGFwdG9yOjp0b05hdGl2ZShleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNp
emVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsK
KyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMp
OworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0
ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7
CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlh
bikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICAqcmVpbnRl
cnByZXRfY2FzdDxBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3
LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZhbHVlOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MTZB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IHNldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4
ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVj
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmlu
ZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
Citwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAor
ICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zs
b2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDMyQXJy
YXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiSlNGbG9h
dDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpT
RmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNk
ZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVz
ZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2Ny
aXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8v
CisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90
Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1
cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9t
IEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAg
ICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwg
b2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNz
IHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBh
ZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3
YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5k
IG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4g
dGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292
ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhl
IHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4g
TSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5p
dHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9s
cworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQg
b2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFt
cGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBl
OworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJ
bnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJs
ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0
aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBK
U1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
aW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZihBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRl
eHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVh
dGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdU
eXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBl
KSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7
CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhl
ZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0
aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJv
b2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
aSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVp
Y2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4
UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3Rvcigp
W2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3Vi
bGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBZGFw
dG9yOjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodmFsdWUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5TZXRRdWlja2x5KHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBt
X2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAg
ICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3Ro
ID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNl
cHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9w
cmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVTZXQoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3Iu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgorICAgIGJvb2wgc2V0V2l0aFNwZWNp
ZmljVHlwZShFeGVjU3RhdGUqLCBPdGhlclR5cGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBm
YWxzZSBvbiBlcnJvcjsgaWYgaXQgcmV0dXJucyBmYWxzZQorICAgIC8vIHRoZW4gaXQgd2lsbCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5vbkFycmF5KTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gQWRh
cHRvcjo6dHlwZVZhbHVlOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1v
dmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQg
dGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3
Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xh
c3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mLCBT
dHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogcHJvdG90eXBl
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorU3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9CisgICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBl
ZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPmFyZ3VtZW50KDApKWpzQnVm
ZmVyKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmlt
cGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxl
bmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
KGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90
IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGgg
PSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6
Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0g
VHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVu
dC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxv
dyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlz
IGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdl
ci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJv
LWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgpOworICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9i
amVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVzdGVkIGxlbmd0
aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6
OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0
dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CitDYWxsRGF0YSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0Ns
YXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNv
bnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAg
aWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkK
KyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlv
bkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2Yo
QWRhcHRvcjo6VHlwZSksIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAg
ICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXAp
KQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZl
cmlmeVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkg
eworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250
ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2
bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQorewor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29u
c3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0
ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7
CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Ojp2YWxpZGF0ZVNldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIGlmIChjYW5TZXRRdWlja2x5KG9mZnNldCwgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJPZmZzZXQgYW5kIHBhc3NlZCBhcnJheSdzIGxlbmd0aCBhcmUgb3V0
IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0
aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4g
V2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisg
ICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5
LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRl
LWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAg
IC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWlu
ZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1
cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXIt
Pmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlU2V0KGV4ZWMsIG9mZnNldCwgbGVu
Z3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChvdGhlci0+bGVuZ3Ro
KCkgIT0gbGVuZ3RoKSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgdGhyb3dSYW5nZUVycm9y
KGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIikp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQg
aSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCArIGksIG90
aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ2xhc3NJbmZvKiBjaSA9IG9i
amVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUgPT0g
QWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNhc2U6IHdl
IGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAgICBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc+KG9iamVjdCk7CisgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxl
bmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVTZXQoZXhlYywgb2Zmc2V0
LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAg
bWVtY3B5KAorICAgICAgICAgICAgdHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVk
VmVjdG9yKCksCisgICAgICAgICAgICBvdGhlci0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChj
aS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAg
cmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50OEFycmF5Kj4ob2Jq
ZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdp
dGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNl
dCk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNU
eXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNh
c2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNVaW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50
OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2Fz
dDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVV
aW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxK
U1VpbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50MzI6Cisg
ICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQzMkFy
cmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICBy
ZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihv
YmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBz
ZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCks
IG9mZnNldCk7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3
OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVTZXQoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlz
IGNhc2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5
KGV4ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZh
bHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09i
amVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNh
bkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShnZXRJbmRl
eFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051
bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICog
c2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKGdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAg
UHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAg
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRv
IHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0
IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGlu
ZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0
eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBU
aGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVj
dHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQg
cHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBv
ZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAi
QXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4i
KTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgKKyAgICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZS5Ob3RB
bkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBN
QVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElk
ZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAor
ICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShwcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisg
ICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNl
bGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhblNldEluZGV4UXVpY2tseShwcm9w
ZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0
aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRo
ZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2V0SW5kZXhRdWlj
a2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJv
cGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRF
WCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJv
cGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
U3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUp
IHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVy
KHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3Is
IHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRv
ciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJheVZlY3RvclRva2VuICYmIHZpc2l0
b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZv
aWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdW
ZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7
CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNp
emUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAg
ICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9y
LCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRB
cnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFi
bGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhl
Y1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8v
IG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1
c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBU
aGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBs
aXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0
aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dh
cmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBh
ZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55
d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNl
IGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFu
ZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2Fz
dGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdp
bGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBp
ZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3
aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFu
ZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAo
dGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAK
KyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6
ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4K
KyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAg
ICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsK
KyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3Nz
aWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+
KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJm
bHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1
dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAgICAg
ICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0K
KworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAodGhp
c09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVm
ZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVj
dC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgT3Zl
cnNpemVUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRo
aW5nIGxpa2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0
LCBzaW5jZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRo
YXQgd2UgcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAg
YnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3Is
IHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBidXR0ZXJmbHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVy
LmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJ
bXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoCisgICAgICAgIHRoaXNP
YmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPmxl
bmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAi
SlNJbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJKU0ludDE2QXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MTZBcnJh
eV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQxNkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MzJBcnJheV9o
IgorI2RlZmluZSAiSlNJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisKKyNlbmRpZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwx
MCArMjY0LDYgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogCiBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgLy8g
TkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBz
dG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRv
IG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCi0g
ICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkgPiBN
QVhfQVJSQVlfSU5ERVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1w
bGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsj
dHlwZSAiQ29uc3RydWN0b3IiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4
QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5
KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJy
YXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkp
OworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7
CitNQUtFX1NfSU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4gSlNJ
bnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQzMkFy
cmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNVaW50OEFycmF5PiBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4
Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+IEpT
VWludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4g
SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcjxKU0RhdGFWaWV3PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFz
c0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBl
IyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBl
IyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFL
RV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhD
bGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFL
RV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJh
eXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBK
U0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9y
PiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50
OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNG
bG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFy
cmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4QXJyYXlf
aCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKyNk
ZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MTZB
cnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50
MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMy
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Vp
bnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQz
MkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NXZWFrLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciogU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCosIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZl
ciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAg
IAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVj
LCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWsocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29u
dHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFy
cmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlz
bid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBy
dW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJ
ZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBh
bGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1
ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRu
J3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitjbGFzcyBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJs
aWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZl
ciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFk
YXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19oCisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19oCisK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpT
Vmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IElu
dGVncmFsVHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAg
IHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJn
IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9
IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2
NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBy
ZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1Zh
bHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcs
IHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJn
Pgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBU
eXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1Zp
ZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShk
b3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsK
K3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVj
dCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFk
YXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVm
IEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0lu
dDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4g
SlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0
b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhD
bGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0
QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8
aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IElu
dDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJh
eSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJh
eSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFy
cmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4g
eyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVp
bnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3Ry
dWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBV
aW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0
MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBK
U0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6
IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFy
cmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVUludDhDbGFtcGVkQWRhcHRvciB7Cisg
ICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBW
aWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBl
ZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVy
biAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVy
biBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAg
ICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91
YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
dWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwg
MCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAg
ICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4o
dmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlw
ZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5
cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1
ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0ds
b2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24g
MTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2Ny
aXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0
b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFy
cmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAg
VHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWlu
dDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwK
LSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3Ry
dWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0g
ICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAg
ICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURl
c2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0
LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykK
LSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xl
bmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0lu
Zm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90
IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAg
U2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVk
QXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5n
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlw
dG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgi
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIG91dC5wcmlu
dCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50ODoK
KyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBvdXQucHJp
bnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDhDbGFt
cGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDE2
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIG91dC5w
cmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQz
MjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQ2NCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFR5cGVkQXJyYXlU
eXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwK
KyAgICBUeXBlVWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAor
ICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5
cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmlldworfTsKKworaW5saW5lIGJvb2wgaXNUeXBlZFZp
ZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9
CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVVaW50ODoK
KyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5VHlwZSB0eXBlKSBj
b25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
Y2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTaWduZWQoVHlw
ZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAg
IGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBU
eXBlZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJy
YXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMy
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9y
PiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQx
NkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxG
bG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJV
aW50OEFycmF5X2giCisjZGVmaW5lICJVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50OENsYW1wZWRBcnJheV9oIgorI2RlZmlu
ZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNl
bmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmICJVaW50MTZBcnJheV9oIgorI2RlZmluZSAiVWludDE2QXJyYXlfaCIKKworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJVaW50MzJBcnJheV9oIgorI2RlZmluZSAiVWludDMyQXJyYXlf
aCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MzJBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1MzM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAi
UmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKQEAgLTI1OCw2ICsyNTksMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBh
ZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8v
IEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZN
IGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlw
ZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdz
LmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVz
Y3JpcHRvci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5o
IgpAQCAtMzgxLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVBy
b2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRh
YmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNv
bnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBt
X3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9j
YXRvcjsKIApJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysg
U291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXJyYXlCdWZm
ZXIuaCIKLQotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWJv
b2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVj
dG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCi17Ci0gICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7Ci0KLSAgICBpZiAoIW1fY29udGVudHMu
bV9kYXRhKSB7Ci0gICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAg
IGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRW
aWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxW
aWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsVmlld3NBcmVO
ZXV0ZXJhYmxlKQotICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7Ci0gICAgICAgIGlmICghcmVz
dWx0Lm1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB3aGls
ZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9m
aXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxW
aWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAg
ICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVu
dCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyOjphZGRW
aWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7
Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmly
c3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJl
dlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1
ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRo
aXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAg
ICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBp
ZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0Vmll
dyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAg
ICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3
ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Fy
cmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAko
cmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJf
aAotI2RlZmluZSBBcnJheUJ1ZmZlcl9oCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1
ZmZlcjsKLWNsYXNzIEFycmF5QnVmZmVyVmlldzsKLQotY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50
cyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7Ci1wdWJs
aWM6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAotICAgICAgICA6IG1fZGF0YSgwKQotICAg
ICAgICAsIG1fc2l6ZUluQnl0ZXMoMCkKLSAgICB7IH0KLQotICAgIGlubGluZSB+QXJyYXlCdWZm
ZXJDb250ZW50cygpOwotCi0gICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQotICAg
IHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQotCi1wcml2
YXRlOgotICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6ZUlu
Qnl0ZXMpIAotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fc2l6ZUluQnl0ZXMo
c2l6ZUluQnl0ZXMpCi0gICAgeyB9Ci0KLSAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7Ci0K
LSAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKLSAgICAgICAgWmVyb0luaXRpYWxpemUs
Ci0gICAgICAgIERvbnRJbml0aWFsaXplCi0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVT
aXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOwotICAgIHZv
aWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBB
U1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0YTsKLSAg
ICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1fZGF0
YSA9IDA7Ci0gICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLQotICAgIHZvaWQgY29w
eVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFv
dGhlci5tX2RhdGEpOwotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSht
X3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0
aWFsaXplLCBvdGhlcik7Ci0gICAgICAgIGlmICghb3RoZXIubV9kYXRhKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEsIG1fc2l6ZUluQnl0
ZXMpOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICB9
Ci0KLSAgICB2b2lkKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKLX07Ci0K
LWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZv
aWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOwotCi0gICAg
Ly8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVk
LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsK
LQotICAgIGlubGluZSB2b2lkKiBkYXRhKCk7Ci0gICAgaW5saW5lIGNvbnN0IHZvaWQqIGRhdGEo
KSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OwotCi0gICAg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkg
Y29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
bikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9p
ZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKLSAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJl
dHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KLQotICAgIH5BcnJheUJ1ZmZlcigpIHsgfQotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRl
KHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVm
ZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQotICAgIGlubGluZSBBcnJheUJ1
ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBjb25zdDsKLSAg
ICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwotICAgIHN0YXRp
YyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwotCi0g
ICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyVmlldyog
bV9maXJzdFZpZXc7Ci19OwotCi1pbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGlu
dCBsZWZ0LCBpbnQgcmlnaHQpCi17Ci0gICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwotICAgIGlm
ICh4IDwgbGVmdCkKLSAgICAgICAgeCA9IGxlZnQ7Ci0gICAgaWYgKHJpZ2h0IDwgeCkKLSAgICAg
ICAgeCA9IHJpZ2h0OwotICAgIHJldHVybiB4OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVt
ZW50Qnl0ZVNpemUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90aGVy
KQotewotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCksIG90aGVy
LT5ieXRlTGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6
OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0
aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBzb3VyY2Us
IGJ5dGVMZW5ndGgpOwotICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwotfQotCi1QYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMm
IGNvbnRlbnRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVu
dHMpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFy
cmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3kpCi17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKLSAgICBB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVT
aXplLCBwb2xpY3ksIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50
cykpOwotfQotCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYg
Y29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQotewotICAgIGNvbnRlbnRzLnRyYW5zZmVy
KG1fY29udGVudHMpOwotfQotCi12b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCi17Ci0gICAgcmV0
dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi1jb25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0
YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi11bnNpZ25l
ZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVu
dHMubV9zaXplSW5CeXRlczsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2xpY2VJ
bXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwotfQotCi1QYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBjb25zdAotewotICAg
IHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5ndGgoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUltcGwodW5zaWduZWQg
YmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gYmVnaW4g
PD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOwotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNpemUpOwotfQotCi11
bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0gICAg
dW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKLSAgICBpZiAoaW5kZXggPCAw
KQotICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKLSAgICByZXR1cm4gY2xh
bXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJD
b250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9s
aWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCi17Ci0gICAgLy8gRG8gbm90IGFsbG93
IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5v
dD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50
cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5
IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3Ry
aWN0aXZlIGNoZWNrIGhlcmU/Ci0gICAgaWYgKG51bUVsZW1lbnRzKSB7Ci0gICAgICAgIHVuc2ln
bmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBp
ZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7Ci0gICAgICAg
ICAgICByZXN1bHQubV9kYXRhID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBib29sIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBpZiAocG9s
aWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RG
Ojp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVlKHJl
c3VsdC5tX2RhdGEpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocG9saWN5ID09IERvbnRJ
bml0aWFsaXplKTsKLSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdURjo6dHJ5RmFzdE1h
bGxvYyhudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0
YSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbG9jYXRpb25TdWNjZWVkZWQpIHsKLSAgICAgICAgcmVz
dWx0Lm1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQubV9kYXRhID0gMDsKLX0KLQotQXJyYXlCdWZm
ZXJDb250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudHMoKQotewotICAgIFdURjo6ZmFzdEZyZWUo
bV9kYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXJyYXlCdWZm
ZXI7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJh
eUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVy
Vmlldy5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLQotI2luY2x1ZGUg
IkFycmF5QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1BcnJheUJ1ZmZlclZpZXc6OkFy
cmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgICAgIDogbV9ieXRlT2Zmc2V0
KGJ5dGVPZmZzZXQpCi0gICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAgICAgLCBt
X2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9wcmV2VmlldygwKQotICAgICAgICAsIG1fbmV4
dFZpZXcoMCkKLXsKLSAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8
Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1f
YnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7Ci19Ci0KLUFycmF5QnVm
ZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCi17Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAg
ICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlclZpZXc6
Om5ldXRlcigpCi17Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9mZnNldCA9IDA7Ci19
Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTMzNTIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKLSNkZWZpbmUg
QXJyYXlCdWZmZXJWaWV3X2gKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgotCi0jaW5j
bHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJs
aWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKLSAgcHVibGljOgotICAgIGVudW0gVmll
d1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBU
eXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYs
Ci0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZs
b2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9
OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLQotICAgIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9idWZmZXI7Ci0gICAgfQotCi0gICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYnl0
ZU9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0OwotICAg
IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0ID0gMDsKLQotICAg
IHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFibGUgPSBmbGFnOyB9
Ci0gICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmV1dGVyYWJsZTsg
fQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVmZmVyVmlldygpOwot
Ci0gIHByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGlu
ZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0K
LSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRh
dGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHpl
cm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7
Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBz
dGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsK
LQotICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBB
cnJheUJ1ZmZlciBpcwotICAgIC8vIHdpdGhpbiByYW5nZS4KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0
ZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVt
ZW50cykKLSAgICB7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB1
bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdF
bGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBm
cm9tIHRoaXMgYXJyYXkncyB2aWV3OwotICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVy
IG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRz
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMp
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5
dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkg
ewotICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgICAgICAg
ICAgKm51bUVsZW1lbnRzID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKLSAg
ICAgICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsK
LSAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkgLSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjpt
aW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7Ci0gICAgfQotCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotICAgIC8vIFRoaXMgaXMgdGhl
IGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZz
ZXQuCi0gICAgdm9pZCogbV9iYXNlQWRkcmVzczsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZU9mZnNl
dCA6IDMxOwotICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwotCi0gIHByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZm
ZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmll
dyogbV9uZXh0VmlldzsKLX07Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5
QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5dGVP
ZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRl
TGVuZ3RoKCkgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5i
eXRlTGVuZ3RoKCkgPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZz
ZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBj
aGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOwotICAgIG1lbW1v
dmUoYmFzZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxl
bmd0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNl
dFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAg
ICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCi0gICAg
ICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAgICAg
ICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFz
ZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5
dGVMZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5dGVP
ZmZzZXQgKyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9m
ZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAgICAgICAgLy8gT3V0IG9m
IHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7
Ci0gICAgbWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0
LCB1bnNpZ25lZCogbGVuZ3RoKQotewotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0
ICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0g
ICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBhcnJheVNpemU7Ci0gICAgaWYgKGVuZCA8
IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQp
ID4gYXJyYXlTaXplKQotICAgICAgICBlbmQgPSBhcnJheVNpemU7Ci0gICAgaWYgKGVuZCA8IHN0
YXJ0KQotICAgICAgICBlbmQgPSBzdGFydDsKLSAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXJ0KTsKLSAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAt
IHN0YXJ0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXJyYXlCdWZm
ZXJWaWV3OwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZl
cnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEg
dmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBi
ZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlv
dSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFs
ICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmlj
YWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywg
b3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4K
KworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFs
SW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAg
ICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJv
b2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09
IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAK
KyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1f
cmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5j
cmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFz
ZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAg
ICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3Jl
ZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBk
ZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9y
ZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJy
YWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2
b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0
SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVk
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJv
dGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVS
ZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gK
KwpJbmRleDogU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9GbGlw
Qnl0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNkZWZp
bmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9vbCBs
aXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVu
ZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5s
aW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2
YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4KTsK
K30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAw
eDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4KQor
ICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1aW50
NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAw
eDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAw
MDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDBm
ZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAwMDBs
bHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkgPj4g
OCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkKKyAg
ICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1NikKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQoreworICAgIGlmIChzaXpl
b2YodmFsdWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoc2l6ZW9mKHZh
bHVlKSA9PSAyKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3
aXNlX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKSkpOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDQp
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2
YWx1ZSkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBU
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBCeXRl
c0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7CisKKyNlbmRpZiAvLyBGbGlw
Qnl0ZXNfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208446</attachid>
            <date>2013-08-09 12:05:51 -0700</date>
            <delta_ts>2013-08-09 13:19:49 -0700</delta_ts>
            <desc>prototypes are done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>252124</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJy
YXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkK
K3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRo
aXMsIG1faW1wbC5nZXQoKSk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAg
IEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsg
cmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJpdmF0ZToKKyAgICBBcnJh
eUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8g
PSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6
OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6
ZSwKKyAgICBJbml0aWFsaXphdGlvbk1vZGUgbW9kZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX2J1dHRlcmZseSgwKQoreworICAgIGlmIChs
ZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgeworICAgICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRp
b24uCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxl
bmd0aCwgZWxlbWVudFNpemUpOworICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9y
YWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBt
X21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICAgICAg
YXNXb3Jkc1tpXSA9IDA7CisgICAgICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEg
dHlwZWQgYXJyYXkgdG8gdXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBp
ZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBl
ZEFycmF5KSAvIGVsZW1lbnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1v
ZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxl
bWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIXRyeU1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0
VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2
bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkg
KiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
bV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVy
ZSgwKQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5k
YXRhKCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9k
ZShieXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVy
IGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5
QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAw
LCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQp
CisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgp
KQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRl
eHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4
dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1f
bW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlz
LCBmaW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhl
YXAuYWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJh
eUJ1ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEpTQXJyYXlCdWZm
ZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2Jq
ZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgewor
ICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5
Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1
ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50
eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30K
Kwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8
IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAg
IHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0
byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJl
amVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0
eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91
bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvZXBydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0
IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAg
fQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFs
aXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+PSBX
YXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVm
ZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVz
IHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5k
CisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMg
dGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAor
Ly8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBv
ZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0
eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVy
ZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBs
aW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90
CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9z
dCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0
IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGgg
V2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZl
cyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBu
b3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8v
IHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMg
ZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhh
cyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZm
ZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlw
ZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVu
dXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNw
YWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJy
YXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRz
IG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0
byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRl
ciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAg
ICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWlu
ZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcg
d2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5
LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5
IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBh
IHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZl
IHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRv
IGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9
IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZl
Y3Rvci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5IgorICAgIC8vIGlzIHRo
ZSBieXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdl
YkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8g
Z2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMg
cmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFj
Y2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlC
dWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBN
ZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBo
YXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8g
Y29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50Lgor
CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGlj
IHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAK
KyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGws
IERvbnRJbml0aWFsaXplIH07CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
KFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwg
SW5pdGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgfkNvbnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsg
fQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBt
X3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1f
bGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZs
eSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYs
IENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1NUYXRlKiwgUHJvcGVydHlOYW1lKTsK
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIs
IG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEg
aW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7
CisgICAgCisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlld0NvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0lu
Zm8gSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
CitKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVj
dG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAg
ICAgICAgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBw
cm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQor
CitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKFZN
JiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdD
b25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3Ry
dWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmlu
ZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUg
PCBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5k
V2FzdGVNZW1vcnkodGhpcyk7Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlC
dWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vz
c2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlC
dWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5
QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVk
QXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1
dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5
QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3Rl
ZnVsVHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fbW9kZSAtIFdh
c3RlZnVsVHlwZWRBcnJheTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6
OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5m
bywgMCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90
eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKiBKU0FycmF5QnVm
ZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlPih2bS5o
ZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7
CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlw
ZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0
dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUz
MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpT
QXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1
YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcq
KTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyop
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRh
Vmlldzo6c19pbmZvID0geworICAgICJEYXRhVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3
KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNv
bnRleHQpCit7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRC
dWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAo
IUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBv
ZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25z
dHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVz
dWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0u
aGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBV
TlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNEYXRhVmll
dyogSlNEYXRhVmlldzo6Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNE
YXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3Ro
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBl
ZEFycmF5VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBs
KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBEYXRhVmlldzo6Y3Jl
YXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmll
d19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmll
dyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMg
SlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKKyAgICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxs
eSB3b3JrOyB0aGVzZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0
YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBl
ZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVk
QXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRU
eXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgCitwdWJsaWM6CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNE
YXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5
cGUuaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAg
ICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFW
aWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3UHJvdG90eXBlKQor
fTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZGF0
YVRhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDgg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50OCAgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWlu
dDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBn
ZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAgICAgIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMyICAgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRV
aW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAg
ICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8K
KworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0Rh
dGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBl
Pih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5
U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3
VGFibGUoZXhlYyksIGpzQ2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KGNlbGwpLAorICAgICAgICBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNP
YmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpz
Q2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNW
YWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmll
dyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRh
Vmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0
IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7Cisg
ICAgaWYgKHNpemVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBh
Y2Nlc3MiKSk7CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9j
YXN0PEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3Rv
cigpKSArIGJ5dGVPZmZzZXQpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFsdWUodmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIHNl
dERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNE
eW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0
YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIp
KTsKKyAgICAKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVh
c3QgdHdvIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCBhbmQgdmFsdWUpLiIpKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBB
ZGFwdG9yOjp0b05hdGl2ZShleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNp
emVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsK
KyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMp
OworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0
ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7
CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlh
bikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICAqcmVpbnRl
cnByZXRfY2FzdDxBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3
LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZhbHVlOworICAgIAorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MTZB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IHNldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4
ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVj
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmlu
ZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
Citwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAor
ICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zs
b2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDMyQXJy
YXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiSlNGbG9h
dDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpT
RmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNk
ZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVz
ZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2Ny
aXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8v
CisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90
Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1
cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9t
IEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAg
ICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwg
b2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNz
IHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBh
ZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3
YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5k
IG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4g
dGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292
ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhl
IHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4g
TSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5p
dHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9s
cworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQg
b2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFt
cGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBl
OworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJ
bnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJs
ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0
aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBK
U1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
aW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZihBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRl
eHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJl
KiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVh
dGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdU
eXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBl
KSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7
CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhl
ZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0
aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJv
b2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
aSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVp
Y2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
bV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4
UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3Rvcigp
W2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3Vi
bGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBZGFw
dG9yOjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodmFsdWUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5TZXRRdWlja2x5KHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBt
X2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAg
ICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3Ro
ID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNl
cHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9w
cmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVTZXQoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3Iu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgorICAgIGJvb2wgc2V0V2l0aFNwZWNp
ZmljVHlwZShFeGVjU3RhdGUqLCBPdGhlclR5cGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBm
YWxzZSBvbiBlcnJvcjsgaWYgaXQgcmV0dXJucyBmYWxzZQorICAgIC8vIHRoZW4gaXQgd2lsbCBo
YXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5vbkFycmF5KTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gQWRh
cHRvcjo6dHlwZVZhbHVlOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1v
dmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQg
dGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3
Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xh
c3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mLCBT
dHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogcHJvdG90eXBl
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorU3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9CisgICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBl
ZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPmFyZ3VtZW50KDApKWpzQnVm
ZmVyKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmlt
cGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxl
bmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
KGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90
IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGgg
PSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6
Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0g
VHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVu
dC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxv
dyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlz
IGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdl
ci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJv
LWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgpOworICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9i
amVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVzdGVkIGxlbmd0
aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6
OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0
dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CitDYWxsRGF0YSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0
YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0Ns
YXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNv
bnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAg
aWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkK
KyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlv
bkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2Yo
QWRhcHRvcjo6VHlwZSksIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAg
ICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXAp
KQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZl
cmlmeVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkg
eworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250
ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2
bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQorewor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29u
c3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0
ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7
CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Ojp2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQs
IGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5k
IGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBl
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTog
dGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8v
IGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhl
cmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBv
ZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwg
b3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8g
dGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVv
cGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdv
bid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWlu
KGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2Uo
ZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCB0aHJvd1JhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2Vk
IHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBzZXRJbmRleFF1aWNr
bHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBD
bGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1
cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5
cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldz4ob2JqZWN0KTsKKyAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4o
bGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWxpZGF0
ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIG1lbWNweSgKKyAgICAgICAgICAgIHR5cGVkVmVjdG9yKCkgKyBv
ZmZzZXQsIG90aGVyLT50eXBlZFZlY3RvcigpLAorICAgICAgICAgICAgb3RoZXItPmxlbmd0aCgp
ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2Ug
VHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2Fz
dDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlSW50MTY6Cisg
ICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJy
YXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1
cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0
KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhT
cGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNp
ZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9mZnNl
dCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVj
LCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9h
dDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAg
ICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywg
b2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBX
ZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMs
IGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
eworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0
VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7Cisg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRo
aXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4UXVpY2tseShpbmRleCksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAg
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1w
bHkgaWdub3JlIGF0dGVtcHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAg
ICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgewor
ICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIElu
IHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3du
UHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYg
dGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0
KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0
eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3du
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhj
ZXB0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgp
ICE9IFByb3BlcnR5TmFtZS5Ob3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAg
IEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAg
IHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
c2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5
TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdl
dEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBN
QVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhy
b3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAg
ICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSks
IHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNh
blNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5
LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUg
YmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNo
ICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAg
ICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwg
dGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7Cisg
ICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlND
ZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlwZWRBcnJh
eVZlY3RvclRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92
ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9y
OworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhp
c09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3Rv
ciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
ID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2Jq
ZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9y
ZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3
YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9u
J3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9j
YXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5
IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBk
b25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUg
ImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEg
YmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3Jh
cmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4g
dGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0
IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5
IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlw
ZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVt
IHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91
ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hh
dCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mg
d2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25l
IHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVh
cCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBk
ZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5n
SGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOwor
ICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHks
IHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09
IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVv
ZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQg
bWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBzdGF0aWNf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5Umln
aHQoCisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgc3Ry
dWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
ZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwor
ICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlw
ZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2JqZWN0
LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhNRTog
Y29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxpa2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJhIG1l
bW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5jZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwgY2F1
c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2UgcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhlIHdo
b2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQo
dGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBidXR0ZXJmbHkoKS0+
c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhp
c09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpj
cmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zm
c2V0KCksIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZV9oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6IHB1Ymxp
YyBKU09iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7
CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYs
IFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKFZNJiwg
U3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cisg
ICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJS
ZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgSlNPYmplY3QqIHNvdXJjZUFycmF5ID0ganNEeW5hbWljQ2FzdDxKU09i
amVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXNvdXJjZUFycmF5KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3Qg
YXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zm
c2V0OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBvZmZz
ZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBzb3VyY2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgCisgICAgdGhpc09iamVjdC0+c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihl
eGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxk
IGJlIGEgdHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAg
IGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9J
bnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZW5kID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gR2V0IHRoZSBs
ZW5ndGggaGVyZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBkaWRuJ3QgY2hhbmdlLgor
ICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAg
ICAvLyBIYW5kbGUgbmVnYXRpdmUgaW5kaWNlczogLXggPT4gbGVuZ3RoIC0geAorICAgIGlmIChi
ZWdpbiA8IDApCisgICAgICAgIGJlZ2luID0gdGhpc0xlbmd0aCAtIGJlZ2luOworICAgIGlmIChl
bmQgPCAwKQorICAgICAgICBlbmQgPSB0aGlzTGVuZ3RoIC0gZW5kOworICAgIAorICAgIC8vIENs
YW1wIHRoZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LgorICAgIEFTU0VSVChi
ZWdpbiA+PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAgIGJlZ2luID0gc3RkOjptaW4o
YmVnaW4sIHRoaXNMZW5ndGgpOworICAgIGVuZCA9IHN0ZDo6bWluKGVuZCwgdGhpc0xlbmd0aCk7
CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6bWF4KGJl
Z2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0gYmVnaW4pOworICAgIHVuc2lnbmVk
IG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2luOworICAg
IAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0LT5idWZm
ZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0gdGhpc09iamVjdC0+bGVuZ3RoKCkp
OworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5
U3RvcmFnZVR5cGUpOworICAgIAorICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpj
cmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAg
ICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSArIG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVu
dFNpemUsCisgICAgICAgIGxlbmd0aCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpOworICAgIAor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNz
Pjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxW
aWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIAorICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgCisg
ICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1N1YmFycmF5PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHBy
b3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiAiSlNJbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50OEFycmF5X2giCisKKyNpbmNsdWRlICJK
U1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDE2QXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MTZB
cnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQx
NkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQz
MkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MzJBcnJh
eV9oIgorI2RlZmluZSAiSlNJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlz
LmgiCisKKyNlbmRpZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
NCwxMCArMjY0LDYgQEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwog
CiBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
Ly8gTkIuIFRoZSBmYWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhl
ZCBzdG9yYWdlIGltcGxpZXMgdGhhdCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25l
IHRvIG92ZXJyaWRlIGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5n
Ci0gICAgLy8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkg
PiBNQVhfQVJSQVlfSU5ERVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsjdHlwZSAiQ29uc3RydWN0b3IiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJ
bnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFy
cmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVk
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJy
YXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJh
eSk7CitNQUtFX1NfSU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4g
SlNJbnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQz
MkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNVaW50OEFycmF5PiBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1Vp
bnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3I8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+
IEpTVWludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJh
eT4gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU0RhdGFWaWV3PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBD
bGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0
eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0
eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOwor
TUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWlu
dDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOwor
TUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRB
cnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9y
PiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFw
dG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMy
QWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQz
MkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4g
SlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBl
ZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4QXJy
YXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIK
KyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNVaW50
MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNV
aW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1Vp
bnQzMkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NXZWFrLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCosIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1
ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOwor
ICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShl
eGVjLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWsocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIGRlZmF1bHQg
Y29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKy8v
IGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRDb3JlLiBUaGlz
IGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hl
biBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6CisvLworLy8g
LSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5
cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJh
eUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBk
aWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitjbGFzcyBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJvbGxlciB7Citw
dWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1
ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eUFkYXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19oCisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19o
CisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIK
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1l
IEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0
IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOwor
ICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBl
QXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1
ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxp
bnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAg
ICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9K
U1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVB
cmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVl
QXJnPgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFy
ZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBK
U1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2
ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4o
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1
Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRv
cjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0
cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQz
MkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRl
ZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJh
eTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0lu
dDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBK
U0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRv
cj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9h
dDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0
IEludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZB
cnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3Ig
OiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJB
cnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50
OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Owor
c3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90
LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZs
b2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5
LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRv
ciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2
NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVUludDhDbGFtcGVkQWRhcHRvciB7
CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJh
eSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsK
KyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xh
bXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJl
dHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFs
dWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsK
KyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
ZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0
aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
IDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisg
ICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhf
dD4odmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
VHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRy
b2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6
flR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250
cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJh
eUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBK
U0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlD
b250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNp
b24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURl
c2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2Ny
aXB0b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBl
ZEFycmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0g
ICAgVHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5
VWludDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQz
MiwKLSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQot
c3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigp
Ci0gICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkK
LSAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zm
c2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5m
bykKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBt
X2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFz
c0luZm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6
ZV90IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0g
ICAgU2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5
cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5k
aW5nCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNj
cmlwdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBl
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIG91dC5w
cmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50
ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWlu
dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIG91
dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxv
YXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQ2NCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIG91dC5w
cmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFR5cGVkQXJy
YXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50
OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2
LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAg
IFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmlldworfTsKKworaW5saW5lIGJvb2wgaXNUeXBl
ZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVVaW50
ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAg
Y2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQz
MjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5VHlwZSB0eXBl
KSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0MzI6Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTaWduZWQo
VHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgor
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBUeXBlZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVk
QXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJ
bnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IElu
dDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IElu
dDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVp
bnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFw
dG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVp
bnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJVaW50OEFycmF5X2giCisjZGVmaW5lICJVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgorCisjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50OENsYW1wZWRBcnJheV9oIgorI2Rl
ZmluZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisK
KyNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmICJVaW50MTZBcnJheV9oIgorI2RlZmluZSAiVWludDE2QXJyYXlfaCIKKworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmICJVaW50MzJBcnJheV9oIgorI2RlZmluZSAiVWludDMyQXJy
YXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50MzJBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1
MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVk
ZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKQEAgLTI1OCw2ICsyNTksMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUg
PSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAg
IC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0
IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1f
dHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJp
bmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5
RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRv
bS5oIgpAQCAtMzgxLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2Fj
eVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpE
YXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJh
eUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hl
KiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFs
bG9jYXRvcjsKIApJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKLQotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0K
LWJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwg
VmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCi17Ci0gICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7Ci0KLSAgICBpZiAoIW1fY29udGVu
dHMubV9kYXRhKSB7Ci0gICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwot
ICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25l
eHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBh
bGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsVmlld3NB
cmVOZXV0ZXJhYmxlKQotICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7Ci0gICAgICAgIGlmICgh
cmVzdWx0Lm1fZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0g
bV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChh
bGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAg
ICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3Vy
cmVudCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyOjph
ZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRo
aXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1f
Zmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1f
cHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJh
eUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJU
KHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAg
ICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAg
ICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0
VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0g
ICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZW
aWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZm
ZXJfaAotI2RlZmluZSBBcnJheUJ1ZmZlcl9oCi0KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJh
eUJ1ZmZlcjsKLWNsYXNzIEFycmF5QnVmZmVyVmlldzsKLQotY2xhc3MgQXJyYXlCdWZmZXJDb250
ZW50cyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7Ci1w
dWJsaWM6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cygpIAotICAgICAgICA6IG1fZGF0YSgwKQot
ICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoMCkKLSAgICB7IH0KLQotICAgIGlubGluZSB+QXJyYXlC
dWZmZXJDb250ZW50cygpOwotCi0gICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQot
ICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQotCi1w
cml2YXRlOgotICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5zaWduZWQgc2l6
ZUluQnl0ZXMpIAotICAgICAgICA6IG1fZGF0YShkYXRhKQotICAgICAgICAsIG1fc2l6ZUluQnl0
ZXMoc2l6ZUluQnl0ZXMpCi0gICAgeyB9Ci0KLSAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7
Ci0KLSAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKLSAgICAgICAgWmVyb0luaXRpYWxp
emUsCi0gICAgICAgIERvbnRJbml0aWFsaXplCi0gICAgfTsKLQotICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYpOwotICAg
IHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAg
ICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIG90aGVyLm1fZGF0YSA9IG1fZGF0YTsK
LSAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIG1f
ZGF0YSA9IDA7Ci0gICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOwotICAgIH0KLQotICAgIHZvaWQg
Y29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFvdGhlci5tX2RhdGEpOwotICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0
ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJ
bml0aWFsaXplLCBvdGhlcik7Ci0gICAgICAgIGlmICghb3RoZXIubV9kYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEsIG1fc2l6ZUlu
Qnl0ZXMpOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAg
ICB9Ci0KLSAgICB2b2lkKiBtX2RhdGE7Ci0gICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKLX07
Ci0KLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciop
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOwotCi0g
ICAgLy8gT25seSBmb3IgdXNlIGJ5IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkLgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKLQotICAgIGlubGluZSB2b2lkKiBkYXRhKCk7Ci0gICAgaW5saW5lIGNvbnN0IHZvaWQqIGRh
dGEoKSBjb25zdDsKLSAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVu
ZCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBi
ZWdpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAg
dm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKLSAgICBib29sIGlzTmV1dGVyZWQoKSB7
IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KLQotICAgIH5BcnJheUJ1ZmZlcigpIHsgfQot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5
QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5KTsKLQotICAgIGlubGluZSBBcnJh
eUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IHNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBjb25zdDsK
LSAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwotICAgIHN0
YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwot
Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyVmll
dyogbV9maXJzdFZpZXc7Ci19OwotCi1pbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgs
IGludCBsZWZ0LCBpbnQgcmlnaHQpCi17Ci0gICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwotICAg
IGlmICh4IDwgbGVmdCkKLSAgICAgICAgeCA9IGxlZnQ7Ci0gICAgaWYgKHJpZ2h0IDwgeCkKLSAg
ICAgICAgeCA9IHJpZ2h0OwotICAgIHJldHVybiB4OwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBl
bGVtZW50Qnl0ZVNpemUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Ci19Ci0KLVBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIqIG90
aGVyKQotewotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCksIG90
aGVyLT5ieXRlTGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsK
LSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVu
dHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9J
bml0aWFsaXplLCBjb250ZW50cyk7Ci0gICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCi0gICAgICAg
IHJldHVybiAwOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYobmV3
IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci0gICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBzb3Vy
Y2UsIGJ5dGVMZW5ndGgpOwotICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOwotfQotCi1QYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29udGVu
dHMmIGNvbnRlbnRzKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29u
dGVudHMpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRl
U2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUs
IEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5z
aWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlv
blBvbGljeSBwb2xpY3kpCi17Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50czsKLSAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5
dGVTaXplLCBwb2xpY3ksIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250
ZW50cykpOwotfQotCi1BcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQotewotICAgIGNvbnRlbnRzLnRyYW5z
ZmVyKG1fY29udGVudHMpOwotfQotCi12b2lkKiBBcnJheUJ1ZmZlcjo6ZGF0YSgpCi17Ci0gICAg
cmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi1jb25zdCB2b2lkKiBBcnJheUJ1ZmZlcjo6
ZGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMubV9kYXRhOwotfQotCi11bnNp
Z25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29u
dGVudHMubV9zaXplSW5CeXRlczsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2xp
Y2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwotfQotCi1QYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luKSBjb25zdAotewot
ICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGJ5dGVMZW5ndGgoKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZUltcGwodW5zaWdu
ZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzaXplID0gYmVn
aW4gPD0gZW5kID8gZW5kIC0gYmVnaW4gOiAwOwotICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKCkpICsgYmVnaW4sIHNpemUpOwotfQot
Ci11bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci17Ci0g
ICAgdW5zaWduZWQgY3VycmVudExlbmd0aCA9IGJ5dGVMZW5ndGgoKTsKLSAgICBpZiAoaW5kZXgg
PCAwKQotICAgICAgICBpbmRleCA9IGN1cnJlbnRMZW5ndGggKyBpbmRleDsKLSAgICByZXR1cm4g
Y2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7Ci19Ci0KLXZvaWQgQXJyYXlCdWZm
ZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kg
cG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCi17Ci0gICAgLy8gRG8gbm90IGFs
bG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5
IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3Vt
ZW50cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28g
d2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJl
c3RyaWN0aXZlIGNoZWNrIGhlcmU/Ci0gICAgaWYgKG51bUVsZW1lbnRzKSB7Ci0gICAgICAgIHVu
c2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAg
ICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplKSB7Ci0gICAg
ICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBib29sIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICBpZiAo
cG9saWN5ID09IFplcm9Jbml0aWFsaXplKQotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0g
V1RGOjp0cnlGYXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUpLmdldFZhbHVl
KHJlc3VsdC5tX2RhdGEpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQocG9saWN5ID09IERv
bnRJbml0aWFsaXplKTsKLSAgICAgICAgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IFdURjo6dHJ5RmFz
dE1hbGxvYyhudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1f
ZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKGFsbG9jYXRpb25TdWNjZWVkZWQpIHsKLSAgICAgICAg
cmVzdWx0Lm1fc2l6ZUluQnl0ZXMgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQubV9kYXRhID0gMDsKLX0KLQotQXJyYXlC
dWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudHMoKQotewotICAgIFdURjo6ZmFzdEZy
ZWUobV9kYXRhKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXJyYXlC
dWZmZXI7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9B
cnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVm
ZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVm
ZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLQotI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotCi1BcnJheUJ1ZmZlclZpZXc6
OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgICAgIDogbV9ieXRlT2Zm
c2V0KGJ5dGVPZmZzZXQpCi0gICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAgICAg
LCBtX2J1ZmZlcihidWZmZXIpCi0gICAgICAgICwgbV9wcmV2VmlldygwKQotICAgICAgICAsIG1f
bmV4dFZpZXcoMCkKLXsKLSAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAoc3RhdGljX2Nh
c3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYg
KG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7Ci19Ci0KLUFycmF5
QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCi17Ci0gICAgaWYgKG1fYnVmZmVyKQotICAg
ICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcigpCi17Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9mZnNldCA9IDA7
Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTMzNTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKLSNkZWZp
bmUgQXJyYXlCdWZmZXJWaWV3X2gKLQotI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgotCi0j
aW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKLSAgcHVibGljOgotICAgIGVudW0g
Vmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAg
ICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50
MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlw
ZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAg
ICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKLQotICAgIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV9idWZmZXI7Ci0gICAgfQotCi0gICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0Owot
ICAgIH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0ID0gMDsKLQot
ICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFibGUgPSBmbGFn
OyB9Ci0gICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmV1dGVyYWJs
ZTsgfQotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVmZmVyVmlldygp
OwotCi0gIHByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7
Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29s
IHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0
aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGlu
dCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3Ro
KTsKLQotICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBh
biBBcnJheUJ1ZmZlciBpcwotICAgIC8vIHdpdGhpbiByYW5nZS4KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1F
bGVtZW50cykKLSAgICB7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9m
KFQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0ZU9mZnNldCA+
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5
dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5p
bmdFbGVtZW50cykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50
cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwotICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVt
YmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1l
bnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVu
dHMpCi0gICAgewotICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJh
eUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNl
dCkgewotICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgICAg
ICAgICAgKm51bUVsZW1lbnRzID0gMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsK
LSAgICAgICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0
KTsKLSAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVu
Z3RoKCkgLSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICAgICAgKm51bUVsZW1lbnRzID0gc3Rk
OjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7Ci0gICAgfQotCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotICAgIC8vIFRoaXMgaXMg
dGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBv
ZmZzZXQuCi0gICAgdm9pZCogbV9iYXNlQWRkcmVzczsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZU9m
ZnNldCA6IDMxOwotICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwotCi0gIHByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9i
dWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVy
VmlldyogbV9uZXh0VmlldzsKLX07Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFy
cmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5
dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5i
eXRlTGVuZ3RoKCkgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5
LT5ieXRlTGVuZ3RoKCkgPCBieXRlT2Zmc2V0KSB7Ci0gICAgICAgIC8vIE91dCBvZiByYW5nZSBv
ZmZzZXQgb3Igb3ZlcmZsb3cKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBjaGFyKiBiYXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOwotICAgIG1l
bW1vdmUoYmFzZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0
ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6
OnNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkK
LSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCi0g
ICAgICAgIHx8IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAg
ICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
YmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0
YUJ5dGVMZW5ndGgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5QnVmZmVyVmll
dzo6emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVu
Z3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCi0gICAgICAgIHx8IGJ5
dGVPZmZzZXQgKyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0
ZU9mZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKLSAgICAgICAgLy8gT3V0
IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3Mo
KSk7Ci0gICAgbWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zm
c2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zm
c2V0LCB1bnNpZ25lZCogbGVuZ3RoKQotewotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0
YXJ0ICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7
Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBhcnJheVNpemU7Ci0gICAgaWYgKGVu
ZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihl
bmQpID4gYXJyYXlTaXplKQotICAgICAgICBlbmQgPSBhcnJheVNpemU7Ci0gICAgaWYgKGVuZCA8
IHN0YXJ0KQotICAgICAgICBlbmQgPSBzdGFydDsKLSAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0YXJ0KTsKLSAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVu
ZCAtIHN0YXJ0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6QXJyYXlC
dWZmZXJWaWV3OwotCi0jZW5kaWYgLy8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
ZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2Uu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0
byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQu
IFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlv
bmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNp
ZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2lu
Zywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0
eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9y
bWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsK
KyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAg
IGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgp
ID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEh
KG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFs
SW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVk
QmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgewor
ICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFt
X3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8
PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGlj
IERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVm
ZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wg
c2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVy
cmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0
YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
cHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFi
bGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVk
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9G
bGlwQnl0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNk
ZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9v
bCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRs
ZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKwor
aW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
KCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4
KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUg
JiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4
KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1
aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUg
JiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAw
MDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAw
MDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAw
MDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkg
Pj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1NikKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQoreworICAgIGlmIChz
aXplb2YodmFsdWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoc2l6ZW9m
KHZhbHVlKSA9PSAyKQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhi
aXR3aXNlX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKSkpOworICAgIGlmIChzaXplb2YodmFsdWUpID09
IDQpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pih2YWx1ZSkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBUKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7CisKKyNlbmRpZiAvLyBG
bGlwQnl0ZXNfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208450</attachid>
            <date>2013-08-09 13:19:49 -0700</date>
            <delta_ts>2013-08-09 14:30:08 -0700</delta_ts>
            <desc>prototypes are really done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>274293</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyOjpzX2luZm8gPSB7CisgICAgIkFy
cmF5QnVmZmVyIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyKX07CisKK0pTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZmZXIoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2ltcGwoYXJyYXlCdWZmZXIuZ2V0KCkp
Cit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0
aGlzLCBtX2ltcGwpOworfQorCitKU0FycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyOjpjcmVhdGUo
CisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gcGFzc2VkQnVmZmVyKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFz
c2VkQnVmZmVyOworICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXI+KHZtLmhlYXApKQorICAgICAgICBKU0Fy
cmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlcik7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVm
ZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5n
dGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAg
ICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3Jp
dGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Q
cm9wZXJ0eSgKKyAgICBKU09iamVjVCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgYXJyYXkg
YnVmZmVyIHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBK
U0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZm
ZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJy
YXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1
ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJyYXlC
dWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsK
KyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsgcmV0dXJuIG1faW1wbDsgfQor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFy
cmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29u
c3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwKKyAgICBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcikKK307CisKK0pTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAg
ICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAg
ICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVj
dG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xv
YmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVI
b3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRh
KEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUg
IkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3Rh
dGljIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7Cisg
ICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRD
b25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5
cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisj
aW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3Qg
PSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAg
aWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZm
ZXIuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVx
dWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2lu
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRo
aXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsK
KyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVm
ZmVyU3RydWN0dXJlKCk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5m
byBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJv
dG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZl
clByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisg
ICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZm
ZXJQcm90b0Z1bmNTbGljZSwgRG9udEVudW0sIDIpOworfQorCitKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAg
ICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyUHJvdG90eXBlPih2
bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19p
bmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZC
YXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcp
OworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVj
dGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwKKyAgICBJbml0aWFsaXphdGlvbk1vZGUgbW9k
ZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBt
X2J1dHRlcmZseSgwKQoreworICAgIGlmIChsZW5ndGggPD0gZmFzdFNpemVMaW1pdCkgeworICAg
ICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24uCisgICAgICAgIHZvaWQqIHRlbXA7CisgICAg
ICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNpemUpOworICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAg
bV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21vZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAg
ICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0
b3IpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRf
dCk7IGktLTspCisgICAgICAgICAgICAgICAgYXNXb3Jkc1tpXSA9IDA7CisgICAgICAgIH0KKyNl
bmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlwZWQgYXJyYXkgdG8gdXNlIG1vcmUgdGhhbiA0
R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBpZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBlZEFycmF5KSAvIGVsZW1lbnRTaXplKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXRyeU1hbGxv
YyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChz
dGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9z
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5Owor
fQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9u
Q29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRhKCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9kZShieXRlT2Zmc2V0IC0gV2FzdGVmdWxUeXBlZEFy
cmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5n
SGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwg
MCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENv
bnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVj
dHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0
b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29u
dGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9pZCBKU0FycmF5
QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJy
YXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAg
ICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZs
eSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisg
ICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAgICAg
ICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAg
ICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVy
KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNO
dW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVl
KAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAg
ICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVj
dC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVy
dHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJy
YXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAg
ICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVy
dHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmll
dzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQv
Ynl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK2Jv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNl
bGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5
IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA+PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJl
ZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZl
clZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVj
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBv
c2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJz
LgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJy
YXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdh
bnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhv
dXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNl
IHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBv
cHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNv
ZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNw
ZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsg
aW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250
cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25l
IGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRo
YXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmlu
ZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkg
dmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUg
YW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMg
YSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVy
aW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFu
ZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAg
ICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBW
J3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3Mg
bGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBl
ZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8v
IG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBo
b2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2Nh
dGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJh
eS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmll
dydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRl
IFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkg
dGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAg
Ly8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5
IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sg
dG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVz
aW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBU
aGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4gTm90ZSB0aGF0ICJtb2RlIC0gV2FzdGVm
dWxUeXBlZEFycmF5IgorICAgIC8vIGlzIHRoZSBieXRlIG9mZnNldC4KKyAgICBXYXN0ZWZ1bFR5
cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3
LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVy
VmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0
aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJm
bHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlh
IHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisv
LyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2Ug
Y291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1p
dCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3Ro
LCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICog
ZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYg
fnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3Mg
Q29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0
cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5p
dGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07CisgICAgICAgIAor
ICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVu
Z3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwp
OworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZN
JiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICAgICAgfkNv
bnN0cnVjdGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2b2lk
KiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJfdCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92
ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9k
ZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAgICAK
KyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0
aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1NUYXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVz
IHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBh
bHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4K
KyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAg
IEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
aW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7CisgICAgCisgICAgdm9pZCogdmVjdG9yKCkgeyBy
ZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3Q7CisgICAg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisK
KyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFy
cmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpT
QXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlld0NvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rv
cjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciIsICZCYXNlOjpz
X2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlld0Nv
bnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9y
KiBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKiBwcm90b3R5
cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyVmll
d0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1
Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJWaWV3
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdDb25z
dHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0Fy
cmF5QnVmZmVyVmlld0NvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgSlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0
dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTQXJyYXlCdWZmZXJWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAor
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoKQoreworICAgIGlmIChtX21vZGUgPCBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAg
IG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7Cit9CisKK2lubGlu
ZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNs
b3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHko
KS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0
dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9
CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0
Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG1fbW9kZSAtIFdhc3RlZnVsVHlwZWRBcnJheTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJW
aWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclZpZXdQ
cm90b3R5cGU6OkpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlKiBKU0FycmF5QnVmZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5
cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJy
YXlCdWZmZXJWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZp
ZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVm
ZmVyVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld1Byb3RvdHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld1Byb3Rv
dHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyVmll
d1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZm
ZXJWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMg
SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5
QnVmZmVyVmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBi
b29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVy
VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBK
U0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNTMzNTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFy
cmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlldzo6c19pbmZvID0geworICAgICJEYXRhVmll
dyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9
OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYg
Y29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK0pTRGF0YVZpZXcqIEpT
RGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFu
Z2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAgICB0
aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJC
eXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0
cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAg
ICByZXR1cm4gMDsKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcq
PihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0
aGlzT2JqZWN0LT5tX2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNs
b3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopCit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpT
RGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sK
KyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3Qp
OworICAgIHJldHVybiBEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZm
ZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5tX2xlbmd0aCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Rh
dGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBK
U0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmll
dyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBW
TSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LAorICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBEdW1teSBt
ZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxseSB3b3JrOyB0aGVzZSBhcmUganVzdCBpbiBwbGFj
ZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3ZSBkbyBl
bHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0m
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBj
cmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZp
ZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3
Kik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlB
ZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZp
ZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6
c19pbmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0RhdGFWaWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3
UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZGF0YVRhYmxlCisgIGdldEludDggICAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAg
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jR2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZs
b2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRJbnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHNldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMy
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0
RmxvYXQzMiAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRh
Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQoreworfQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJv
dG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0Rh
dGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmll
d1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZp
ZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAg
ICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxEYXRhVmlld1By
b3RvdHlwZSo+KGNlbGwpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29s
IEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRT
dGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3Rh
dGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVj
dCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+
KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0
YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVj
LT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVP
ZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJv
b2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNpemVvZihBZGFwdG9yOjpUeXBlKSA+
IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFu
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7CisgICAgCisgICAgQWRhcHRvcjo6
VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpOworICAgIAorICAg
IGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAg
ICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShBZGFwdG9yOjp0b0pTVmFsdWUodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBt
ZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3QgdHdvIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNl
dCBhbmQgdmFsdWUpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+
YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAor
ICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBleGVjLT5h
cmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxl
RW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNpemVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+
YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkp
OworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRl
c0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVz
KHZhbHVlKTsKKyAgICAKKyAgICAqcmVpbnRlcnByZXRfY2FzdDxBZGFwdG9yOjpUeXBlKj4oc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZh
bHVlOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
R2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50OEFkYXB0
b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDE2
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0
RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQ2NEFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBz
ZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIHNldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDhB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0Rmxv
YXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0
b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBz
ZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Rh
dGFWaWV3UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNEYXRhVmlld1Byb3RvdHlwZV9oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlld1By
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXdQcm90
b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3
UHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJv
dGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICAgICAgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIAorICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgIkpTRmxvYXQzMkFycmF5X2giCisjZGVmaW5lICJKU0Zsb2F0MzJBcnJheV9o
IgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDMyQXJy
YXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2
NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDY0
QXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gK
KworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBIHR5cGVk
IGFycmF5IHZpZXcgaXMgb3VyIHJlcHJlc2VudGF0aW9uIG9mIGEgdHlwZWQgYXJyYXkgb2JqZWN0
IGFzIHNlZW4KKy8vIGZyb20gSmF2YVNjcmlwdC4gRm9yIGV4YW1wbGU6CisvLworLy8gdmFyIG8g
PSBuZXcgSW50OEFycmF5KDEwMCk7CisvLworLy8gSGVyZSwgJ28nIHBvaW50cyB0byBhIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PGludDhfdD4uCisvLworLy8gVmlld3MgY29udGFpbiBmaXZlIGZp
ZWxkczoKKy8vCisvLyAgICAgU3RydWN0dXJlKiBTICAgICAvLyBmcm9tIEpTQ2VsbAorLy8gICAg
IEJ1dHRlcmZseSogQiAgICAgLy8gZnJvbSBKU09iamVjdAorLy8gICAgIEVsZW1lbnRUeXBlKiBW
CisvLyAgICAgdWludDMyX3QgTAorLy8gICAgIFR5cGVkQXJyYXlNb2RlIE0KKy8vCisvLyBUaGVz
ZSBmaWVsZHMgdGFrZSB1cCBhIHRvdGFsIG9mIGZvdXIgcG9pbnRlci13aWR0aCB3b3Jkcy4gRklY
TUU6IE1ha2UKKy8vIGl0IHRha2UgbGVzcyB3b3JkcyEKKy8vCisvLyBCIGlzIHVzdWFsbHkgdW51
c2VkIGJ1dCBtYXkgc3RvcmVkIHNvbWUgYWRkaXRpb25hbCAib3ZlcmZsb3ciIGRhdGEgZm9yCisv
LyBvbmUgb2YgdGhlIG1vZGVzLiBWIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHR5
cGVkIGFycmF5J3MgZGF0YSwKKy8vIGFuZCBtYXkgcG9pbnQgdG8gZWl0aGVyIEdDLW1hbmFnZWQg
Y29waWVkIHNwYWNlLCBvciBkYXRhIGluIHRoZSBDIGhlYXA7CisvLyB3aGljaCBvZiB0aG9zZSB0
aGluZ3MgaXQgcG9pbnRzIHRvIGlzIGdvdmVybmVkIGJ5IHRoZSBtb2RlIGFsdGhvdWdoIGZvcgor
Ly8gc2ltcGxlIGFjY2Vzc2VzIHRvIHRoZSB2aWV3IHlvdSBjYW4ganVzdCByZWFkIGZyb20gdGhl
IHBvaW50ZXIgZWl0aGVyCisvLyB3YXkuIE0gc3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSB2aWV3
LiBMIGlzIHRoZSBsZW5ndGgsIGluIHVuaXRzIHRoYXQKKy8vIGRlcGVuZCBvbiB0aGUgdmlldydz
IHR5cGUuCisKKy8vIFRoZSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpcyB0ZW1wbGF0aXplZCBi
eSBhbiBBZGFwdG9yIHRoYXQgY29udHJvbHMKKy8vIHRoZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBp
dCdzIGNvbnZlcnRlZDsgaXQgc2hvdWxkIG9iZXkgdGhlIGZvbGxvd2luZworLy8gaW50ZXJmYWNl
OyBJIHVzZSBpbnQ4X3QgYXMgYW4gZXhhbXBsZToKKy8vCisvLyBzdHJ1Y3QgQWRhcHRvciB7Cisv
LyAgICAgdHlwZWRlZiBpbnQ4X3QgVHlwZTsKKy8vICAgICB0eXBlZGVmIEludDhBcnJheSBWaWV3
VHlwZTsKKy8vICAgICB0eXBlZGVmIEpTSW50OEFycmF5IEpTVmlld1R5cGU7CisvLyAgICAgc3Rh
dGljIGludDhfdCB0b05hdGl2ZShkb3VibGUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRp
dmUoSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoaW50OF90KTsKKy8vICAg
ICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGludDhfdCk7CisvLyB9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNB
cnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcg
QmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YoQWRh
cHRvcjo6VHlwZSk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlVW5p
bml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVy
ZSosIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIHN0YXRpYyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0Kiwg
UGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgCisgICAgdW5zaWduZWQg
Ynl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5
cGUpOyB9CisgICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZU9mKG1fbGVu
Z3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOyB9CisgICAgCisgICAgY29uc3QgQWRhcHRvcjo6
VHlwZSogdHlwZWRWZWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorICAgIEFkYXB0b3I6
OlR5cGUqIHR5cGVkVmVjdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxB
ZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIG1lYW50IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdAor
ICAgIC8vIHN1cHBvcnRzIC0gaGVuY2UgdGhlIHNsaWdodCByZWR1bmRhbmN5LgorICAgIGJvb2wg
Y2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8
IG1fbGVuZ3RoOworICAgIH0KKyAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
QWRhcHRvcjo6VHlwZSBnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKHVuc2lnbmVkIGkpCisg
ICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVk
VmVjdG9yKClbaV07CisgICAgfQorICAgIAorICAgIGRvdWJsZSBnZXRJbmRleFF1aWNrbHlBc0Rv
dWJsZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRvRG91Ymxl
KGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICBKU1Zh
bHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFk
YXB0b3I6OnRvSlNWYWx1ZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKHVuc2lnbmVkIGks
IEFkYXB0b3I6OlR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3Ro
KTsKKyAgICAgICAgdHlwZWRWZWN0b3IoKVtpXSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldEluZGV4UXVpY2tseVRvRG91YmxlKHVuc2lnbmVkIGksIGRvdWJsZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRp
dmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0
aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBzZXRJbmRleFF1aWNrbHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0
aXZlKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wg
Y2FuU2V0UXVpY2tseSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBvZmZzZXQgPD0gbV9sZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCAr
IGxlbmd0aCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgLy8gY2hlY2sgb3ZlcmZsb3cKKyAgICAg
ICAgICAgICYmIG9mZnNldCArIGxlbmd0aCA+PSBvZmZzZXQ7CisgICAgfQorICAgIAorICAgIC8v
IExpa2UgY2FuU2V0UXVpY2tseSwgZXhjZXB0OiBpZiBpdCByZXR1cm5zIGZhbHNlLCBpdCB3aWxs
IHRocm93IHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KKyAgICBib29sIHZhbGlk
YXRlU2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9y
OyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlw
ZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFs
c2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJv
b2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBO
b25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5
cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0
c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2Vs
bCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVs
bC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAg
IC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBo
ZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5
VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRB
cnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3JfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2lu
Y2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJ
bnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0
dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0
VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0
aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0Ns
YXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAg
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOwor
ICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAm
c19pbmZvKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkRhdGFW
aWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAg
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZSgKKyAg
ICAgICAgICAgIFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBp
ZiAoSlNBcnJheUJ1ZmZlcioganNCdWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIq
PihleGVjLT5hcmd1bWVudCgwKSlqc0J1ZmZlcikgeworICAgICAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgx
KS50b1VJbnQzMihleGVjKSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPiAyKSB7CisgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQz
MihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkg
JSBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1p
bnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUu
IikpOworICAgICAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0
KSAvIFZpZXdDbGFzczo6ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1
ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdDbGFzczo6
VHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFycmF5QnVm
ZmVyIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBldmVyeXRo
aW5nIGJ1dCBEYXRhVmlldywgd2UgYWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9mOgorICAg
IC8vIC0gQW5vdGhlciBhcnJheS4gVGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2YgdGhhdCBh
cnJheS4KKyAgICAvLyAtIEFuIGludGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJh
eSBvZiB0aGF0IGxlbmd0aCBhbmQgemVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAgICBpZiAo
SlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVu
dCgwKSkpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+
Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdD
bGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFyZXN1bHQtPnNldChleGVjLCBvYmplY3QsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGlu
dCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChsZW5n
dGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUuIikpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBs
ZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ29uc3RydWN0VHlw
ZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBj
b25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5
VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbERhdGEgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcoCisg
ICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwg
Y29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAor
ICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXpl
b2YoQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3Qp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmlu
aXRpYWxpemVkKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoCisgICAgICAgIHZtLCBz
dHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBDb25zdHJ1Y3Rpb25Db250
ZXh0OjpEb250SW5pdGlhbGl6ZSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVj
dCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAg
IGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTxBZGFwdG9yOjpUeXBlPihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigKKyAgICAgICAg
ICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGgg
b3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
cmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBZGFw
dG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9
IGltcGwtPmJ1ZmZlcigpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3Ry
dWN0dXJlLCBidWZmZXIsIGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAg
IEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4
dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEFk
YXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBzdHJ1Y3R1cmUsIGltcGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dmFsaWRhdGVSYW5nZShFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChjYW5B
Y2Nlc3NSYW5nZVF1aWNrbHkob2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordGVtcGxh
dGU8dHlwZW5hbWUgT3RoZXJUeXBlPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6c2V0V2l0aFNwZWNpZmljVHlwZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIE90aGVyVHlw
ZSogb3RoZXIsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEhh
bmRsZSB0aGUgaGlsYXJpb3VzIGNhc2U6IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3RoIGNv
dWxkIGhhdmUgcmVzdWx0ZWQKKyAgICAvLyBpbiBuZXV0ZXJpbmcuIFdlbGwsIG5vLiBUaGF0J2xs
IG5ldmVyIGhhcHBlbiBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZQorICAgIC8vIHNpZGUtZWZmZWN0
cyBvbiBnZXR0aW5nIHRoZSBsZW5ndGggb2YgYSB0eXBlZCBhcnJheS4gQnV0IHByZWRpY3Rpbmcg
d2hlcmUgdGhlcmUKKyAgICAvLyBhcmUsIG9yIGFyZW4ndCwgc2lkZS1lZmZlY3RzIGlzIGEgZm9v
bCdzIGdhbWUgc28gd2UgcmVzb3J0IHRvIHRoaXMgY2hlYXAKKyAgICAvLyBjaGVjay4gV29yc3Qg
Y2FzZSwgaWYgd2UncmUgd3JvbmcsIHBlb3BsZSBzdGFydCBzZWVpbmcgbGVzcyB0aGluZ3MgZ2V0
IGNvcGllZAorICAgIC8vIGJ1dCB3ZSB3b24ndCBoYXZlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0
eS4KKyAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAg
CisgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChvdGhlci0+bGVuZ3RoKCkgIT0gbGVuZ3RoKSB7
CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgdGhyb3dSYW5nZUVycm9yKGV4ZWMsICJMZW5ndGgg
b2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIikpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0t
OykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCArIGksIG90aGVyLT5nZXRJbmRleFF1
aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0KAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZv
KCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZh
bHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNw
eSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KG9iamVjdCk7Cisg
ICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtZW1jcHkoCisgICAg
ICAgICAgICB0eXBlZFZlY3RvcigpICsgb2Zmc2V0LCBvdGhlci0+dHlwZWRWZWN0b3IoKSwKKyAg
ICAgICAgICAgIG90aGVyLT5sZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNpLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0
aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQp
OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlw
ZShleGVjLCBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNl
IFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganND
YXN0PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDg6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4
QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhDbGFt
cGVkQXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAg
ICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDE2QXJyYXkq
PihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJu
IHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDMyQXJyYXkqPihvYmplY3Qp
LCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRo
U3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KG9iamVjdCksIG9mZnNl
dCk7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6IHsKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2UgY291bGQgb3B0aW1pemUgdGhpcyBjYXNlLiBCdXQg
cmlnaHQgbm93LCB3ZSBkb24ndC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXNldEluZGV4UXVpY2tseShleGVjLCBvZmZz
ZXQgKyBpLCBvYmplY3QtPmdldChleGVjLCBpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQorICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJl
cih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxl
bmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0
aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJbmRleFF1
aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09i
amVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
CisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAqIHNpemVvZihBZGFw
dG9yOjpUeXBlKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiBjYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihn
ZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAv
LyBGaXJlZm94IGFwcGVhcnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0
aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdp
bGwgZG8gdGhlIHNhbWUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBl
eGVjLCBpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gVGhpcyBpcyBtYXRj
aGluZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCByZWplY3RzIGFsbCBhdHRl
bXB0cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRleGVkIHByb3BlcnRpZXMg
b24gdHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CisgICAgLy8gb2YgYm91bmRzLgor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcg
dG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQ
cm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAg
IHx8IHByb3BldHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWUuTm90QW5JbmRleCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lO
REVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNh
bkdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgc2xvdC5zZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKCFjYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkg
eworICAgICAgICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dp
bmcgYW55dGhpbmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHNldEluZGV4UXVpY2tseShleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jv
b2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAg
ICAgICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1l
cygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihv
YmplY3QpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0aDsgKytp
KQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVt
YmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihv
YmplY3QpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2Fz
ZSBGYXN0VHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0
LCBUeXBlZEFycmF5VmVjdG9yVG9rZW4sIHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IE92ZXJzaXplVHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5
VXNhZ2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
b3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3Is
IENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZT
aG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0
b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlz
aXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBt
ZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
ICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5k
aWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAor
ICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBv
YmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBs
YXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJv
bSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3Ig
dGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVy
ZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRp
bmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2Yg
Yml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9y
eSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsg
dGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZv
b3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4g
b3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdz
CisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3Ug
Y3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhp
bmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4K
KyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBi
ZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICph
bnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93Cisg
ICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBH
QyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3Qp
OworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0g
dGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQg
cmVjb3JkLCBpbiB0aGUgYnV0dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQgaXMuCisgICAgCisgICAg
aWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQorICAgICAgICAmJiAhbV9i
dXR0ZXJmbHkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIC8v
IFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCisgICAg
ICAgIG1fYnV0dGVyZmx5ID0gc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihtX3ZlY3Rvcikt
PmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgbV9idXR0ZXJmbHksIGhl
YXAtPnZtKCksIHRoaXNPYmplY3QsIHN0cnVjdHVyZSgpLAorICAgICAgICAgICAgc3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1f
bW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRB
cnJheToKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJz
dWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2Ugcmln
aHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxs
b2NhdGVkCisgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0
LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgYnV0dGVyZmx5KCktPnNldEFycmF5QnVmZmVyKGJ1ZmZlci5nZXQoKSk7Cisg
ICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVk
QXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJl
dHVybiBBZGFwdG9yOjpWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZm
ZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNPYmplY3QgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkg
dmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3Rl
ZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VB
cnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAg
aWYgKCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikp
OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIo
ZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBz
b3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3Vi
YXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZp
ZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
CisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7
CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmpl
Y3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFz
c2VydCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVu
Z3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZl
IGluZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBi
ZWdpbiA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5k
ID0gdGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0
aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNT
RVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCB0aGlzTGVuZ3RoKTsK
KyAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHRoaXNMZW5ndGgpOworICAgIAorICAgIC8vIENsYW1w
IGVuZCB0byBiZWdpbi4KKyAgICBlbmQgPSBzdGQ6Om1heChiZWdpbiwgZW5kKTsKKyAgICAKKyAg
ICBBU1NFUlQoZW5kID49IGJlZ2luKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBiZWdpbjsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBlbmQgLSBiZWdpbjsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGFycmF5QnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQobGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJy
YXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAg
IFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZt
KCksIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZz
ZXQoKSArIG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCAq
IFZpZXdDbGFzczo6ZWxlbWVudFNpemUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIAorICAgIEFT
U0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxW
aWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFycmF5PFZp
ZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0Ns
YXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5j
bHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJWTS5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIK
ICNpbmNsdWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJl
clByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNwZWNpYWxQb2ludGVyLmgiCkBAIC0xNjYsNiArMTcx
LDE1IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0
cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVjdFN0cnVj
dHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1
Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4g
bV9hcnJheUJ1ZmZlckNvbnN0cnVjdG9yOworICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVy
UHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgICAgICAKKyAgICBXcml0ZUJh
cnJpZXI8SlNBcnJheUJ1ZmZlclZpZXdDb25zdHJ1Y3Rvcj4gbV9hcnJheUJ1ZmZlclZpZXdDb25z
dHJ1Y3RvcjsKKyAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlclZpZXdQcm90b3R5cGU+IG1f
YXJyYXlCdWZmZXJWaWV3UHJvdG90eXBlOworICAgICAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNE
YXRhVmlld0NvbnN0cnVjdG9yPiBtX2RhdGFWaWV3Q29uc3RydWN0b3I7CisgICAgV3JpdGVCYXJy
aWVyPEpTRGF0YVZpZXdQcm90b3R5cGU+IG1fZGF0YVZpZXdQcm90b3R5cGU7CiAgICAgICAgIAog
ICAgIHZvaWQqIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNp
YWwgcG9pbnRlcnMgdXNlZCBieSB0aGUgTExJbnQgYW5kIEpJVC4KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgIkpTSW50OEFycmF5X2giCisjZGVmaW5lICJKU0ludDhBcnJheV9oIgor
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQxNkFycmF5X2giCisjZGVm
aW5lICJKU0ludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJKU0ludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MzJBcnJheV9oIgorCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTUzMzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNjQsMTAgKzI2NCw2IEBAIFN0cmluZyBKU09iamVjdDo6Y2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWMKIAogYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBz
bG90KQogewotICAgIC8vIE5CLiBUaGUgZmFjdCB0aGF0IHdlJ3JlIGRpcmVjdGx5IGNvbnN1bHRp
bmcgb3VyIGluZGV4ZWQgc3RvcmFnZSBpbXBsaWVzIHRoYXQgaXQgaXMgbm90Ci0gICAgLy8gbGVn
YWwgZm9yIGFueW9uZSB0byBvdmVycmlkZSBnZXRPd25Qcm9wZXJ0eVNsb3QoKSB3aXRob3V0IGFs
c28gb3ZlcnJpZGluZwotICAgIC8vIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoKS4KLSAgICAK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwogICAg
IAogICAgIGlmIChpID4gTUFYX0FSUkFZX0lOREVYKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0
eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVj
dG9yOjpzX2luZm8gPSB7I3R5cGUgIkNvbnN0cnVjdG9yIiwgJkpTIyN0eXBlOjpCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0NvbnN0cnVjdG9yKX0KKwor
TUFLRV9TX0lORk8oSW50OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9T
X0lORk8oSW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZP
KFVpbnQ4Q2xhbXBlZEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19J
TkZPKFVpbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5G
TyhGbG9hdDY0QXJyYXkpOworTUFLRV9TX0lORk8oRGF0YVZpZXcpOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUg
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDMy
QXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OENsYW1w
ZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlD
b25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxK
U1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5
Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmlldz4gSlNEYXRhVmlld0NvbnN0
cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRB
cnJheVByb3RvdHlwZXMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTIyN0eXBlIyNQcm90b3R5cGU6OnNfaW5mbyA9IHsjdHlwZSAiUHJvdG90eXBl
IiwgJkpTIyN0eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMj
I3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5G
TyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9h
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorI2RlZmluZSBKU1R5cGVkQXJy
YXlQcm90b3R5cGVzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDhBcnJheT4gSlNJ
bnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheVByb3Rv
dHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OEFy
cmF5PiBKU1VpbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlQcm90
b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDE2
QXJyYXk+IEpTVWludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlQcm90b3R5cGU7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQzMkFycmF5PiBK
U0Zsb2F0MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNz
SW5mbyBKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbyA9IHsjdHlwZSAiQXJyYXkiLCAmSlMjI3R5cGUj
I0FycmF5OjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUj
I0FycmF5KX0KKworTUFLRV9TX0lORk8oSW50OCk7CitNQUtFX1NfSU5GTyhJbnQxNik7CitNQUtF
X1NfSU5GTyhJbnQzMik7CitNQUtFX1NfSU5GTyhVaW50OCk7CitNQUtFX1NfSU5GTyhVaW50OENs
YW1wZWQpOworTUFLRV9TX0lORk8oVWludDE2KTsKK01BS0VfU19JTkZPKFVpbnQzMik7CitNQUtF
X1NfSU5GTyhGbG9hdDMyKTsKK01BS0VfU19JTkZPKEZsb2F0NjQpOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5
c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpT
SW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+
IEpTSW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFw
dG9yPiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4
QWRhcHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zs
b2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJy
YXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhBcnJheV9o
IgorI2RlZmluZSAiSlNVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisKKyNlbmRpZiAvLyBKU1VpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorI2Rl
ZmluZSAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSlNVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQxNkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQxNkFy
cmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQx
NkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDMy
QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVy
ID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAg
CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMs
IG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhayhyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJy
YXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250
cm9sbGVyIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJy
YXkgYnVmZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNu
J3Qgd2hhdAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1
bm5pbmcgc3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElm
IHRoZSBKU0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFs
aXZlLgorLy8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVm
ZmVyIGFmdGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4n
dCBkaWUsIHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1Ymxp
YzoKKyAgICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVy
KiB0b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRh
cHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKwor
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwK
KyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNW
aWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAg
dHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcg
SlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0g
dHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0
X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFs
dWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywg
dHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+
CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5
cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmll
d1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlw
ZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3N0cnVjdCBJ
bnQ4QWRhcHRvcjsKK3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJBZGFwdG9yOwor
c3RydWN0IFVpbnQ4QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yOworc3RydWN0
IFVpbnQxNkFkYXB0b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDMyQWRh
cHRvcjsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4gY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50
MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBK
U0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRv
cj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRB
cnJheTsKKworc3RydWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxp
bnQ4X3QsIEludDhBcnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07CitzdHJ1Y3QgSW50
MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5
LCBKU0ludDE2QXJyYXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRhcHRvciA6IElu
dGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJbnQzMkFycmF5
LCBUeXBlSW50MzI+IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yPHVpbnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlwZVVpbnQ4PiB7
IH07CitzdHJ1Y3QgVWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWlu
dDE2X3QsIFVpbnQxNkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7IH07CitzdHJ1
Y3QgVWludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDMyX3QsIFVp
bnQzMkFycmF5LCBKU1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQz
MkFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMyQXJyYXksIEpT
RmxvYXQzMkFycmF5LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRBZGFwdG9yIDog
RmxvYXRUeXBlZEFycmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNGbG9hdDY0QXJy
YXksIFR5cGVGbG9hdDY0PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1wZWRBZGFwdG9yIHsKKyAg
ICB0eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZp
ZXdUeXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAg
IHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWludDhDbGFtcGVk
OworICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJu
IDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5h
c051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAg
ICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3Vi
bGUgdG9Eb3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1
aW50OF90IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAw
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAg
ICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2
YWx1ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBl
ZEFycmF5QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJy
YXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxl
cjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJy
YXlDb250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFycmF5QnVm
ZmVyOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKK2NsYXNzIEpTR2xv
YmFsT2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgVHlwZWRBcnJheUNvbnRy
b2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAg
IHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAx
NTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3Jp
cHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBlZEFycmF5RGVzY3JpcHRv
cl9oCi0jZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LXN0cnVjdCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUgewotICAgIFR5cGVkQXJy
YXlOb25lLAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICBU
eXBlZEFycmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAgIFR5cGVkQXJyYXlVaW50
OENsYW1wZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBlZEFycmF5VWludDMyLAot
ICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDY0Ci19OwotCi1zdHJ1
Y3QgVHlwZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAg
ICAgICAgOiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldCgwKQotICAg
ICAgICAsIG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZzZXQs
IHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0luZm8oY2xhc3NJbmZvKQot
ICAgICAgICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQotICAgICAgICAsIG1fbGVu
Z3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIGNvbnN0IENsYXNzSW5m
byogbV9jbGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNldDsKLSAgICBzaXplX3Qg
bV9sZW5ndGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWduZWRuZXNzIHsKLSAgICBT
aWduZWRUeXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQotfTsKLWVudW0gVHlwZWRB
cnJheVJvdW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAgIENsYW1wUm91bmRpbmcK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlwZWRBcnJheURlc2NyaXB0
b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheVR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIK
KworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50
KCJOb3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4Ogor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1w
ZWQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVHlwZWRBcnJheVR5
cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAor
ICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisg
ICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlw
ZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCitpbmxpbmUgYm9vbCBpc1R5cGVkVmll
dyhUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Ogor
ICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNl
IFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBl
ZEFycmF5VHlwZSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
VHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5
cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJh
eXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+
IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2
QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50
MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZs
b2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVp
bnQ4QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5l
ICJVaW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgIlVpbnQxNkFycmF5X2giCisjZGVmaW5lICJVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAi
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgIlVpbnQzMkFycmF5X2giCisjZGVmaW5lICJVaW50MzJBcnJheV9o
IgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJS
ZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5o
IgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5s
aW5lcy5oIgpAQCAtMjU4LDYgKzI1OSwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFk
b3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8g
SW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0g
aW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBl
ZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cigpKTsKIH0KIAogVk06On5WTSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNp
bmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNj
cmlwdG9yLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgi
CkBAIC0zODEsNiArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJv
ZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFi
YXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29u
dHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1f
cmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2Nh
dG9yOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZl
ci5oIgotCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9v
bCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0
b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5t
X2RhdGEpIHsKLSAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAg
Zm9yIChBcnJheUJ1ZmZlclZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZp
ZXcpIHsKLSAgICAgICAgaWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZp
ZXdzQXJlTmV1dGVyYWJsZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5l
dXRlcmFibGUpCi0gICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNl
IHsKLSAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1
bHQubV9kYXRhKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxl
IChtX2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2Zp
cnN0VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZp
ZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAg
IGN1cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZp
ZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsK
LSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJz
dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2
VmlldyA9IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVm
ZmVyOjpyZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhp
cyA9PSB2aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAg
IHZpZXctPm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlm
ICh2aWV3LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3
ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAg
ICAgbV9maXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcg
PSB2aWV3LT5tX25leHRWaWV3ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShy
ZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9o
Ci0jZGVmaW5lIEFycmF5QnVmZmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVm
ZmVyOwotY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRz
IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1Ymxp
YzoKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAg
ICAgICwgbV9zaXplSW5CeXRlcygwKQotICAgIHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZl
ckNvbnRlbnRzKCk7Ci0KLSAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAg
dW5zaWduZWQgc2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZh
dGU6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5C
eXRlcykgCi0gICAgICAgIDogbV9kYXRhKGRhdGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhz
aXplSW5CeXRlcykKLSAgICB7IH0KLQotICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQot
ICAgIGVudW0gSW5pdGlhbGl6YXRpb25Qb2xpY3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwK
LSAgICAgICAgRG9udEluaXRpYWxpemUKLSAgICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lk
IHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUsIEluaXRpYWxpemF0aW9uUG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9p
ZCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCghb3RoZXIubV9kYXRhKTsKLSAgICAgICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAg
ICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRh
ID0gMDsKLSAgICAgICAgbV9zaXplSW5CeXRlcyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5
VG8oQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90
aGVyLm1fZGF0YSk7Ci0gICAgICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1f
c2l6ZUluQnl0ZXMsIHNpemVvZihjaGFyKSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRp
YWxpemUsIG90aGVyKTsKLSAgICAgICAgaWYgKCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1lbWNweShvdGhlci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRl
cyk7Ci0gICAgICAgIG90aGVyLm1fc2l6ZUluQnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0K
LQotICAgIHZvaWQqIG1fZGF0YTsKLSAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQot
Y2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVi
bGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9p
ZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAv
LyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwot
Ci0gICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKLSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgp
IGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBj
b25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2lu
KSBjb25zdDsKLQotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lk
IHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0
dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQotCi0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVm
ZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAg
IGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGlj
IGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBt
X2ZpcnN0VmlldzsKLX07Ci0KLWludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50
IGxlZnQsIGludCByaWdodCkKLXsKLSAgICBBU1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYg
KHggPCBsZWZ0KQotICAgICAgICB4ID0gbGVmdDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAg
ICB4ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0
ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIp
Ci17Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXIt
PmJ5dGVMZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAg
IEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwgQXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRp
YWxpemUsIGNvbnRlbnRzKTsKLSAgICBpZiAoIWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJy
YXlCdWZmZXIoY29udGVudHMpKTsKLSAgICBtZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwg
Ynl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYg
Y29udGVudHMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50
cykpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KQotewotICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJy
YXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9s
aWN5IHBvbGljeSkKLXsKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFy
cmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNp
emUsIHBvbGljeSwgY29udGVudHMpOwotICAgIGlmICghY29udGVudHMubV9kYXRhKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRz
KSk7Ci19Ci0KLUFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBj
b250ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIo
bV9jb250ZW50cyk7Ci19Ci0KLXZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1
cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRh
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVk
IEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50
cy5tX3NpemVJbkJ5dGVzOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzbGljZUlt
cGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQot
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBi
ZWdpbiwgdW5zaWduZWQgZW5kKSBjb25zdAotewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8
PSBlbmQgPyBlbmQgLSBiZWdpbiA6IDA7Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVu
c2lnbmVkIEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1
bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gYnl0ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDAp
Ci0gICAgICAgIGluZGV4ID0gY3VycmVudExlbmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFt
cFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNv
bnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVu
dEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xp
Y3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cg
MzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90
PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRz
LAotICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkg
c2hvdWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJp
Y3RpdmUgY2hlY2sgaGVyZT8KLSAgICBpZiAobnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWdu
ZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlm
ICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xp
Y3kgPT0gWmVyb0luaXRpYWxpemUpCi0gICAgICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6
OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVz
dWx0Lm1fZGF0YSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udElu
aXRpYWxpemUpOwotICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFs
bG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRh
KTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1
bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZl
ckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZSht
X2RhdGEpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZl
cjsKLQotI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5
QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJW
aWV3LmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLUFycmF5QnVmZmVyVmlldzo6QXJy
YXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICAgICAgOiBtX2J5dGVPZmZzZXQo
Ynl0ZU9mZnNldCkKLSAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICAgICAsIG1f
YnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBtX3ByZXZWaWV3KDApCi0gICAgICAgICwgbV9uZXh0
VmlldygwKQotewotICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxj
aGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9i
dWZmZXIpIAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKLX0KLQotQXJyYXlCdWZm
ZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKLXsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAg
IG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMpOwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6
bmV1dGVyKCkKLXsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKLX0K
LQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1MzM1MikKKysr
IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIw
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlclZpZXdfaAotI2RlZmluZSBB
cnJheUJ1ZmZlclZpZXdfaAotCi0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0KLSNpbmNs
dWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFycmF5QnVmZmVyVmlldz4gewotICBwdWJsaWM6Ci0gICAgZW51bSBWaWV3
VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5
cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwK
LSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxv
YXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07
Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2J1ZmZlcjsKLSAgICB9Ci0KLSAgICB2b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwotCi0gICAg
dm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0K
LSAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7Ci0K
LSAgcHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5l
IGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQot
ICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0
YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVy
b1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsK
LQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0
YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwot
Ci0gICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFy
cmF5QnVmZmVyIGlzCi0gICAgLy8gd2l0aGluIHJhbmdlLgotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1l
bnRzKQotICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChzaXplb2YoVCkgPiAxICYmIGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChieXRlT2Zmc2V0ID4gYnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVu
c2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9m
ZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgICAgIGlmIChudW1FbGVtZW50cyA+IHJlbWFpbmluZ0Vs
ZW1lbnRzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyBJbnB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGVsZW1lbnRzIGZy
b20gdGhpcyBhcnJheSdzIHZpZXc7Ci0gICAgLy8gb3V0cHV0IG9mZnNldCBpcyBpbiBudW1iZXIg
b2YgYnl0ZXMgZnJvbSB0aGUgdW5kZXJseWluZyBidWZmZXIncyB2aWV3LgotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0
ZU9mZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7
Ci0gICAgICAgICAgICAqb2Zmc2V0ID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAg
ICAqbnVtRWxlbWVudHMgPSAwOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICpvZmZzZXQgPSBhcnJheUJ5dGVPZmZzZXQgKyAqb2Zmc2V0ICogc2l6ZW9mKFQpOwotICAg
ICAgICAqb2Zmc2V0ID0gc3RkOjptaW4oYnVmZmVyLT5ieXRlTGVuZ3RoKCksICpvZmZzZXQpOwot
ICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgo
KSAtICpvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1p
bihyZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi0gICAgLy8gVGhpcyBpcyB0aGUg
YWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNl
dC4KLSAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwotCi0gICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0
IDogMzE7Ci0gICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7Ci0KLSAgcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZl
cjsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3
KiBtX25leHRWaWV3OwotfTsKLQotYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlC
dWZmZXJWaWV3KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9m
ZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVM
ZW5ndGgoKSA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5
dGVMZW5ndGgoKSA8IGJ5dGVPZmZzZXQpIHsKLSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNl
dCBvciBvdmVyZmxvdwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNo
YXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92
ZShiYXNlICsgYnl0ZU9mZnNldCwgYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVu
Z3RoKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0
UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAg
ICAgICB8fCBieXRlT2Zmc2V0ICsgZGF0YUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAg
ICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAg
ICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgCi0gICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNl
QWRkcmVzcygpKTsKLSAgICBtZW1tb3ZlKGJhc2UgKyBieXRlT2Zmc2V0LCBkYXRhLCBkYXRhQnl0
ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6
ZXJvUmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgp
Ci17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9m
ZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zm
c2V0ICsgcmFuZ2VCeXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2Yg
cmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgCi0gICAgY2hhciogYmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsK
LSAgICBtZW1zZXQoYmFzZSArIGJ5dGVPZmZzZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRB
bmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQs
IHVuc2lnbmVkKiBsZW5ndGgpCi17Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQg
Kz0gYXJyYXlTaXplOwotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAg
ICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwg
MCkKLSAgICAgICAgZW5kID0gMDsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkg
PiBhcnJheVNpemUpCi0gICAgICAgIGVuZCA9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgc3Rh
cnQpCi0gICAgICAgIGVuZCA9IHN0YXJ0OwotICAgICpvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3RhcnQpOwotICAgICpsZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0g
c3RhcnQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZl
clZpZXc7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdfaApJbmRleDogU291cmNlL1dURi93
dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9E
ZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVy
cmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2
YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJl
IGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91
IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwg
InJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNh
bGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBv
cgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5Lgor
CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJ
bmNyZW1lbmV0ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAg
ICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0g
MTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9y
ZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNy
ZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAg
ICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVm
Q291bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRl
ZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3Jl
ZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJh
YmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZv
aWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJ
c0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJl
ZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBC
eXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmlu
ZSBGbGlwQnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxp
dHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5k
aWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxp
bmUgdWludDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZh
bHVlICYgMHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOwor
fQorCitpbmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJl
dHVybiAoKHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
MDAwMGZmMDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisg
ICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2
NF90IGZsaXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4
MDAwMDAwMDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAw
MDAwMDAwZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZm
MDAwMGxsdSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxs
dSkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4
KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8
ICgodmFsdWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVv
Zih2YWx1ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFs
dWUpID09IDIpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdp
c2VfY2FzdDx1aW50MTZfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVp
bnQzMl90Pih2YWx1ZSkpKTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KQorICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSkpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVz
SWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKKworI2VuZGlmIC8vIEZsaXBC
eXRlc19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208454</attachid>
            <date>2013-08-09 14:30:08 -0700</date>
            <delta_ts>2013-08-09 22:41:59 -0700</delta_ts>
            <desc>global object glue is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>275064</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1MzM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFz
cyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9y
QVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJy
YWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgewor
ICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlm
IC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRk
aXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBm
cm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVj
dCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhh
dmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50
byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29t
aW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIo
MCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
eworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZl
Y3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdS
ZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAg
ICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBn
ZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYg
dGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9i
amVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5j
ZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZh
bHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQg
aWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3
YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiBy
ZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBs
aXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29s
IGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsg
fQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9l
bmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29t
aW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNT
aW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JP
ZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPiA+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9y
IG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0
b25GbGFnKCk7CisgICAgICAgIHNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVCho
YXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNl
bGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpT
Q2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+
YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOwor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikK
K3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlZmVy
cmVkKCkpOworICAgICAgICBBU1NFUlQocmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVChpc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5z
aXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVj
dG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMo
KTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9
CisgICAgICAgIAorICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3JPZkNlbGxzKCktPmF0KDApKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICB2b2lkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsK
KyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxU
Kj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNldCgp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAgICAg
bV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6YWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0LT5h
ZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1f
dmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQqIG9i
amVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9i
eXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgpOwor
ICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2Vs
bCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw2ICsz
NTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1f
ZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1f
YXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3Rl
Y3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02
MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBt
X29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUo
KQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXpl
KCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFj
ZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
ZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJu
IG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7Cisg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFj
aXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9i
amVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVw
VG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgp
OworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7Cisg
ICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBt
X2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgp
KTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0
aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAg
CiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNp
Zm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxl
U2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2so
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8v
IGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVh
cAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksNiArMTgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0
dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKQEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAg
ICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAg
dm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hl
YXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9j
a0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVj
dFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAg
ICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BS
T0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4m
IG5ldXRlcmVkVmlld3MpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhp
cyk7CisKKyAgICBpZiAoIW1fY29udGVudHMubV9kYXRhKSB7CisgICAgICAgIHJlc3VsdC5tX2Rh
dGEgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKKworICAgIGlmIChpc05ldXRlcmFibGUpCisgICAgICAgIG1f
Y29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jb250ZW50
cy5jb3B5VG8ocmVzdWx0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2
aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNl
QXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEFy
cmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiV2Vhay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBB
cnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0FycmF5QnVmZmVyOworCitjbGFzcyBBcnJheUJ1ZmZl
ckNvbnRlbnRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRz
KTsKK3B1YmxpYzoKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzKCkgCisgICAgICAgIDogbV9kYXRh
KDApCisgICAgICAgICwgbV9zaXplSW5CeXRlcygwKQorICAgIHsgfQorCisgICAgaW5saW5lIH5B
cnJheUJ1ZmZlckNvbnRlbnRzKCk7CisgICAgCisgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRl
czsgfQorCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyQ29udGVudHModm9pZCogZGF0YSwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMpIAorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeyB9CisKKyAgICBmcmllbmQgY2xhc3MgQXJy
YXlCdWZmZXI7CisKKyAgICBlbnVtIEluaXRpYWxpemF0aW9uUG9saWN5IHsKKyAgICAgICAgWmVy
b0luaXRpYWxpemUsCisgICAgICAgIERvbnRJbml0aWFsaXplCisgICAgfTsKKworICAgIHN0YXRp
YyBpbmxpbmUgdm9pZCB0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBJbml0aWFsaXphdGlvblBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHZvaWQgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgb3RoZXIpCisgICAg
eworICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7CisgICAgICAgIG90aGVyLm1fZGF0YSA9
IG1fZGF0YTsKKyAgICAgICAgb3RoZXIubV9zaXplSW5CeXRlcyA9IG1fc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIG1fZGF0YSA9IDA7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKwor
ICAgIHZvaWQgY29weVRvKEFycmF5QnVmZmVyQ29udGVudHMmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFvdGhlci5tX2RhdGEpOworICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZShtX3NpemVJbkJ5dGVzLCBzaXplb2YoY2hhciksIEFycmF5QnVmZmVyQ29udGVu
dHM6OkRvbnRJbml0aWFsaXplLCBvdGhlcik7CisgICAgICAgIGlmICghb3RoZXIubV9kYXRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtZW1jcHkob3RoZXIubV9kYXRhLCBtX2RhdGEs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0gbV9zaXplSW5C
eXRlczsKKyAgICB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9zaXplSW5C
eXRlczsKK307CisKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisK
KyAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCisgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOworCisgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKKyAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsK
KworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7Cisg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CisKKyAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSk7CisKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZUltcGwodW5zaWduZWQgYmVnaW4s
IHVuc2lnbmVkIGVuZCkgY29uc3Q7CisgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50
IGluZGV4KSBjb25zdDsKKyAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KTsKKworICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CisgICAgQXJy
YXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5
QnVmZmVyPiBtX3dyYXBwZXI7Cit9OworCitpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50
IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCit7CisgICAgQVNTRVJUKGxlZnQgPD0gcmlnaHQpOwor
ICAgIGlmICh4IDwgbGVmdCkKKyAgICAgICAgeCA9IGxlZnQ7CisgICAgaWYgKHJpZ2h0IDwgeCkK
KyAgICAgICAgeCA9IHJpZ2h0OworICAgIHJldHVybiB4OworfQorCitQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpCit7CisgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxl
bWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpaZXJvSW5pdGlhbGl6ZSk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoQXJyYXlCdWZmZXIq
IG90aGVyKQoreworICAgIHJldHVybiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG90aGVyLT5kYXRhKCks
IG90aGVyLT5ieXRlTGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
K3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHM6OnRyeUFsbG9jYXRlKGJ5dGVMZW5ndGgsIDEsIEFycmF5QnVmZmVyQ29udGVudHM6Olpl
cm9Jbml0aWFsaXplLCBjb250ZW50cyk7CisgICAgaWYgKCFjb250ZW50cy5tX2RhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CisgICAgbWVtY3B5KGJ1ZmZlci0+ZGF0YSgpLCBz
b3VyY2UsIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBidWZmZXIucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKEFycmF5QnVmZmVyQ29u
dGVudHMmIGNvbnRlbnRzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgpOworICAgIHJl
dHVybiBjcmVhdGUoY29udGVudHMpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplKQoreworICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVs
ZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
IGNvbnRlbnRzOworICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG51bUVsZW1l
bnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOworICAgIGlmICghY29udGVu
dHMubV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5QnVmZmVyKGNvbnRlbnRzKSk7Cit9CisKK0FycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJh
eUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IG1fcGluQ291bnQoMCkKK3sKKyAgICBj
b250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKK30KKwordm9pZCogQXJyYXlCdWZmZXI6OmRh
dGEoKQoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0YTsKK30KKworY29uc3Qgdm9pZCog
QXJyYXlCdWZmZXI6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRlbnRzLm1fZGF0
YTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRleChlbmQpKTsK
K30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
bikgY29uc3QKK3sKKyAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBieXRl
TGVuZ3RoKCkpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2VJbXBsKHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGJlZ2luIDw9IGVuZCA/IGVuZCAtIGJlZ2luIDogMDsKKyAgICByZXR1cm4gQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSgpKSArIGJlZ2lu
LCBzaXplKTsKK30KKwordW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSBieXRlTGVuZ3RoKCk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgaW5kZXggPSBjdXJyZW50TGVuZ3RoICsgaW5kZXg7
CisgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOworfQorCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKK3sKKyAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgorICAgIC8vIEZJWE1F
OiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMg
YXJndW1lbnRzLAorICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93
LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQorICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJp
bHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICBpZiAobnVtRWxlbWVudHMpIHsKKyAgICAg
ICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Cisg
ICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvblN1Y2NlZWRlZCA9IGZhbHNlOworICAg
IGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCisgICAgICAgIGFsbG9jYXRpb25TdWNjZWVk
ZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSkuZ2V0
VmFsdWUocmVzdWx0Lm1fZGF0YSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwb2xpY3kg
PT0gRG9udEluaXRpYWxpemUpOworICAgICAgICBhbGxvY2F0aW9uU3VjY2VlZGVkID0gV1RGOjp0
cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXplKS5nZXRWYWx1ZShyZXN1
bHQubV9kYXRhKTsKKyAgICB9CisKKyAgICBpZiAoYWxsb2NhdGlvblN1Y2NlZWRlZCkgeworICAg
ICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1lbnRzICogZWxlbWVudEJ5dGVTaXpl
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlc3VsdC5tX2RhdGEgPSAwOworfQorCitB
cnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50cygpCit7CisgICAgV1RGOjpm
YXN0RnJlZShtX2RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEFy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQoreworICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKK30KKworQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKK3sKKyAgICBp
ZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKK30KKwordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQoreworICAgIGlmIChm
bGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05l
dXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAg
ZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUiCisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKworICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICB9CisKKyAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOworICAgIGJv
b2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KKworICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBz
ZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxl
bmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJ
bXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAg
c3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZm
ZXIgaXMKKyAgICAvLyB3aXRoaW4gcmFuZ2UuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNp
Z25lZCByZW1haW5pbmdFbGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIGJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVt
ZW50cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9t
IHRoaXMgYXJyYXkncyB2aWV3OworICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9m
IGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisg
ICAgeworICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVP
ZmZzZXQpIC8gc2l6ZW9mKFQpOworICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewor
ICAgICAgICAgICAgKm9mZnNldCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICAgICAg
Km51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAqb2Zmc2V0ID0gYXJyYXlCeXRlT2Zmc2V0ICsgKm9mZnNldCAqIHNpemVvZihUKTsKKyAgICAg
ICAgKm9mZnNldCA9IHN0ZDo6bWluKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpLCAqb2Zmc2V0KTsKKyAg
ICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSAqb2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4o
cmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRl
IG9mZnNldC4KKyAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOworCisgICAgdW5zaWduZWQgbV9ieXRl
T2Zmc2V0IDogMzE7CisgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CisKKyAgcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKK307CisKK2Jvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVy
VmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQg
PiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVuZ3Ro
KCkgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCArIGFycmF5LT5ieXRlTGVu
Z3RoKCkgPCBieXRlT2Zmc2V0KSB7CisgICAgICAgIC8vIE91dCBvZiByYW5nZSBvZmZzZXQgb3Ig
b3ZlcmZsb3cKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBjaGFyKiBi
YXNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOworICAgIG1lbW1vdmUoYmFz
ZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoKCkKKyAgICAgICAg
fHwgYnl0ZU9mZnNldCArIGRhdGFCeXRlTGVuZ3RoID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8
IGJ5dGVPZmZzZXQgKyBkYXRhQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8g
T3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7CisgICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgZGF0YSwgZGF0YUJ5dGVMZW5n
dGgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1Jh
bmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKQorewor
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCgpCisgICAgICAgIHx8IGJ5dGVPZmZzZXQg
KyByYW5nZUJ5dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKKyAgICAgICAgfHwgYnl0ZU9mZnNldCAr
IHJhbmdlQnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHsKKyAgICAgICAgLy8gT3V0IG9mIHJhbmdl
IG9mZnNldCBvciBvdmVyZmxvdworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7CisgICAg
bWVtc2V0KGJhc2UgKyBieXRlT2Zmc2V0LCAwLCByYW5nZUJ5dGVMZW5ndGgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ICs9IGFy
cmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAgICBzdGFydCA9IDA7CisgICAgaWYg
KGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IDApCisg
ICAgICAgIGVuZCA9IDA7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmQpID4gYXJy
YXlTaXplKQorICAgICAgICBlbmQgPSBhcnJheVNpemU7CisgICAgaWYgKGVuZCA8IHN0YXJ0KQor
ICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAtIHN0YXJ0
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxl
OwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTUsNiArOTYsMTIgQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1
bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3du
QW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAj
ZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOCw2ICsxNDUsOCBA
QCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0
dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5
cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlC
dWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0MzJBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
RmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxv
YXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkZsb2F0
NjRBcnJheV9oIgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVy
aWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0
IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRhdGEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0K
KyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5
LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwg
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBz
ZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5z
aWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAg
ZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwo
b2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRhKClbaW5kZXhd
ID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNr
SW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJu
IChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
cG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owor
ICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0
ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVi
bGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJs
aWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7
IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZm
ZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZv
aWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4gdS50eXBlZEFy
cmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciog
ZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIx
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRo
ZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZv
ciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxl
IGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0
aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0
dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAg
ICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0g
dTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUg
IkludDhBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIElu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQx
NkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisj
ZGVmaW5lICJJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJJbnQzMkFy
cmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGhtbSwgaXQgc2Vl
bXMgbGlrZSBpdCB3b3VsZCBiZSBwcmV0dHkgYXdlc29tZSB0byBnZXQgc19pbmZvCisgICAgICAg
IC8vIHRvIGJlIGEgc3RhdGljLiBOb3Qgc3VyZSBpZiB0aGF0IHdvcmtzLgogICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIGluZGV4aW5nVHlwZSk7CiAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyOjpzX2luZm8gPSB7CisgICAgIkFy
cmF5QnVmZmVyIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyKX07CisKK0pTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZmZXIoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIpCisg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2ltcGwoYXJyYXlCdWZmZXIuZ2V0KCkp
Cit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0
aGlzLCBtX2ltcGwpOworfQorCitKU0FycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyOjpjcmVhdGUo
CisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gcGFzc2VkQnVmZmVyKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFz
c2VkQnVmZmVyOworICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXI+KHZtLmhlYXApKQorICAgICAgICBKU0Fy
cmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlcik7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVm
ZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5n
dGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAg
ICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3Jp
dGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Q
cm9wZXJ0eSgKKyAgICBKU09iamVjVCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgYXJyYXkg
YnVmZmVyIHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBK
U0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZm
ZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJy
YXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1
ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJyYXlC
dWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsK
KyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsgcmV0dXJuIG1faW1wbDsgfQor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFy
cmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsKKyAgICAi
RnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
OjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSog
cHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAiQXJyYXlCdWZmZXIi
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigxKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQor
CitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rv
ciA9CisgICAgICAgIGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihleGVjLT5jYWxs
ZWUoKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZl
ciBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCAxKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJl
c3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgY29uc3Ry
dWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBidWZmZXIpOwor
ICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworQ29uc3RydWN0
VHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoCisgICAgSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKK30KKworQ2FsbFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENhbGxU
eXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisK
KyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOworCitjbGFzcyBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVj
dFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11c3QgYmUgYW4g
YXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50
MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2UoYmVn
aW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgp
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3Vs
dCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG5ld0J1ZmZl
cik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitjb25z
dCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0geworICAgICJBcnJh
eUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGU6OkpT
QXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2xpY2Us
IGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKK30KKworSlNBcnJheUJ1
ZmZlclByb3RvdHlwZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90
eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlclBy
b3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUodm0sIHN0
cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyUHJvdG90eXBl
X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
U0FycmF5QnVmZmVyUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAg
SlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZl
clZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlC
dWZmZXJWaWV3KTsKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0
OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsCisgICAgSW5pdGlhbGl6YXRp
b25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV9sZW5ndGgobGVuZ3Ro
KQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGlt
aXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0
ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsK
KyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJy
YXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmls
bCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRf
dCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXpl
b2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFzV29yZHNbaV0gPSAwOworICAg
ICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBt
b3JlIHRoYW4gNEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBlbGVtZW50U2l6
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7Cisg
ICAgICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZSht
X3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KCF0cnlNYWxsb2MobGVuZ3RoICogZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeUNvc3Qoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNpemUpOworICAg
IAorICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIG1fbW9kZSA9IE92ZXJzaXplVHlw
ZWRBcnJheTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNv
bnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fdmVjdG9y
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQp
CisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoYnl0ZU9mZnNldCAtIFdhc3Rl
ZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAg
ICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAg
bV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhp
bmdIZWFkZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXco
Vk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29u
dGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNv
bnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwg
bV9tb2RlKGNvbnRleHQubW9kZSgpKQoreworICAgIGNvbnRleHQuZGlzb3duKCk7Cit9CisKK3Zv
aWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEZh
c3RUeXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJh
eToKKyAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlz
LCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1
ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisg
ICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRBcnJheUNvbnRyb2xsZXIt
PnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5p
c1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFy
cmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
Ym9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAg
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHku
Iik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxlbmd0aC9i
eXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94Lgor
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAgICAgYXJy
YXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUp
OworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7
CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXpl
VHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPj0gV2FzdGVmdWxUeXBlZEFycmF5KTsK
KyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAg
ICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
QXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVz
IHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUg
cGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNp
YmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMg
d2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisv
LyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8v
CisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBt
YXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcg
YXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBz
ZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5
aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93Lgor
Ly8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBj
cmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVz
cGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3IiIGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5
cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmln
IHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0
IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lm
aWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAv
LyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEg
dmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlw
ZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0
aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEg
bGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11
Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRo
YXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVj
dG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6
ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAg
Ly8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVy
IHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5
cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hl
YWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5h
dGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBv
aW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFs
bG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXku
CisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3duIHRoZSB2ZWN0b3IuIE5vdGUgdGhhdCAibW9k
ZSAtIFdhc3RlZnVsVHlwZWRBcnJheSIKKyAgICAvLyBpcyB0aGUgYnl0ZSBvZmZzZXQuCisgICAg
V2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5
QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBB
cnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93
biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0
aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMg
YWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMg
Y2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBl
eGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZl
clZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZh
c3RTaXplTGltaXQgPSAxMDAwOworICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZU9mKHVpbnQz
Ml90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAgeworICAgICAgICByZXR1cm4g
KGxlbmd0aCAqIGVsZW1lbnRTaXplICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAtIDEpCisgICAg
ICAgICAgICAmIH5zaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIGNsYXNzIENvbnN0cnVjdGlvbkNvbnRleHQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0KTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAg
ICBlbnVtIEluaXRpYWxpemF0aW9uTW9kZSB7IFplcm9GaWxsLCBEb250SW5pdGlhbGl6ZSB9Owor
ICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVyZSosIHVp
bnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsIEluaXRpYWxpemF0aW9uTW9kZSA9
IFplcm9GaWxsKTsKKyAgICAgICAgCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAg
ICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisg
ICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAg
ICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAg
dWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlw
ZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0
ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAg
IHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlw
ZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAg
IH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0
Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorcHVibGljOgorICAgIC8v
IEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpT
IGJ1ZmZlcjsgYWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBu
ZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsK
KyAgICAKKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigpOworICAgIAorICAgIHZvaWQqIHZl
Y3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisK
KyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7Cisg
ICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJW
aWV3SW5saW5lc19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZv
aWQgSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKG1fbW9kZSA8IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9k
VGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5
QnVmZmVyVmlldyogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRl
eGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sKKyAgICByZXR1cm4gbWV0
aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEpT
QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3RoID0gMDsKK30KKworaW5s
aW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9tb2RlIDwgV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9tb2RlIC0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDQgKzIzNSwxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlC
dWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw4IEBAIHByb3RlY3RlZDoKICAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFW
aWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlldzo6
c19pbmZvID0geworICAgICJEYXRhVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KFZNJiB2
bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQp
Cit7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIs
CisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoCisgICAgICAgICAgICBleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5n
ZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rp
b25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRl
TGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkp
IEpTRGF0YVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNEYXRhVmlldyogSlNE
YXRhVmlldzo6Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmll
dzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
SlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
K2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwor
fQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5
VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlw
ZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBEYXRhVmlldzo6Y3JlYXRlKAor
ICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpLCB0
aGlzT2JqZWN0LT5tX2xlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYs
IENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRh
VmlldyogY3JlYXRlKAorICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKKyAgICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxseSB3b3Jr
OyB0aGVzZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0
ZSBzcGVjaWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0YVZpZXcq
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5
U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
OworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlW
aWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFy
cmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmll
d19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIK
KworI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0
YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFi
bGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3UHJvdG90eXBlKQorfTsKKwor
LyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZGF0YVRhYmxl
CisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDggICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50OCAgICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJ
bnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDMyICAg
ICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9h
dDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3UHJv
dG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNl
dFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAgICAgICAgICAgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2ICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMyICAgICAgICAgICAgICBk
YXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAg
ICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAgICAgICAg
ICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZs
b2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8KKworSlNE
YXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0RhdGFWaWV3
UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAg
ICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBlPih2bS5o
ZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBw
cm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQor
CitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCgK
KyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlv
blNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUo
ZXhlYyksIGpzQ2FzdDxEYXRhVmlld1Byb3RvdHlwZSo+KGNlbGwpLAorICAgICAgICBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+
KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxE
YXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBn
ZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRh
dGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4i
KSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0
IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBi
eXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYg
KHNpemVvZihBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAo
Ynl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3Mi
KSk7CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PEFk
YXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSAr
IGJ5dGVPZmZzZXQpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlh
bihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAg
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFsdWUodmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIHNldERhdGEo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWlj
Q2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAg
ICAKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3QgdHdv
IGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCBhbmQgdmFsdWUpLiIpKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9y
Ojp0b05hdGl2ZShleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNpemVvZihB
ZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAg
ICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpZW5kKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9mZnNl
dCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7CisgICAg
CisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisg
ICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICAqcmVpbnRlcnByZXRf
Y2FzdDxBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0
b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZhbHVlOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldElu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9h
dDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJ
bnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MTZBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERh
dGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIHNldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDMy
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNEYXRh
Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNEYXRhVmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIEpTRGF0YVZpZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBKU0RhdGFWaWV3UHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUq
KTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICAgICAg
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
OworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTRmxvYXQzMkFycmF5X2giCisj
ZGVmaW5lICJKU0Zsb2F0MzJBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiAiSlNGbG9hdDY0QXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQ2NEFycmF5
X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0NjRB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBBIHR5cGVkIGFycmF5IHZpZXcgaXMgb3VyIHJlcHJlc2VudGF0aW9u
IG9mIGEgdHlwZWQgYXJyYXkgb2JqZWN0IGFzIHNlZW4KKy8vIGZyb20gSmF2YVNjcmlwdC4gRm9y
IGV4YW1wbGU6CisvLworLy8gdmFyIG8gPSBuZXcgSW50OEFycmF5KDEwMCk7CisvLworLy8gSGVy
ZSwgJ28nIHBvaW50cyB0byBhIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PGludDhfdD4uCisvLwor
Ly8gVmlld3MgY29udGFpbiBmaXZlIGZpZWxkczoKKy8vCisvLyAgICAgU3RydWN0dXJlKiBTICAg
ICAvLyBmcm9tIEpTQ2VsbAorLy8gICAgIEJ1dHRlcmZseSogQiAgICAgLy8gZnJvbSBKU09iamVj
dAorLy8gICAgIEVsZW1lbnRUeXBlKiBWCisvLyAgICAgdWludDMyX3QgTAorLy8gICAgIFR5cGVk
QXJyYXlNb2RlIE0KKy8vCisvLyBUaGVzZSBmaWVsZHMgdGFrZSB1cCBhIHRvdGFsIG9mIGZvdXIg
cG9pbnRlci13aWR0aCB3b3Jkcy4gRklYTUU6IE1ha2UKKy8vIGl0IHRha2UgbGVzcyB3b3JkcyEK
Ky8vCisvLyBCIGlzIHVzdWFsbHkgdW51c2VkIGJ1dCBtYXkgc3RvcmVkIHNvbWUgYWRkaXRpb25h
bCAib3ZlcmZsb3ciIGRhdGEgZm9yCisvLyBvbmUgb2YgdGhlIG1vZGVzLiBWIGFsd2F5cyBwb2lu
dHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHR5cGVkIGFycmF5J3MgZGF0YSwKKy8vIGFuZCBtYXkgcG9p
bnQgdG8gZWl0aGVyIEdDLW1hbmFnZWQgY29waWVkIHNwYWNlLCBvciBkYXRhIGluIHRoZSBDIGhl
YXA7CisvLyB3aGljaCBvZiB0aG9zZSB0aGluZ3MgaXQgcG9pbnRzIHRvIGlzIGdvdmVybmVkIGJ5
IHRoZSBtb2RlIGFsdGhvdWdoIGZvcgorLy8gc2ltcGxlIGFjY2Vzc2VzIHRvIHRoZSB2aWV3IHlv
dSBjYW4ganVzdCByZWFkIGZyb20gdGhlIHBvaW50ZXIgZWl0aGVyCisvLyB3YXkuIE0gc3BlY2lm
aWVzIHRoZSBtb2RlIG9mIHRoZSB2aWV3LiBMIGlzIHRoZSBsZW5ndGgsIGluIHVuaXRzIHRoYXQK
Ky8vIGRlcGVuZCBvbiB0aGUgdmlldydzIHR5cGUuCisKKy8vIFRoZSBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyBpcyB0ZW1wbGF0aXplZCBieSBhbiBBZGFwdG9yIHRoYXQgY29udHJvbHMKKy8vIHRo
ZSBlbGVtZW50IHR5cGUgYW5kIGhvdyBpdCdzIGNvbnZlcnRlZDsgaXQgc2hvdWxkIG9iZXkgdGhl
IGZvbGxvd2luZworLy8gaW50ZXJmYWNlOyBJIHVzZSBpbnQ4X3QgYXMgYW4gZXhhbXBsZToKKy8v
CisvLyBzdHJ1Y3QgQWRhcHRvciB7CisvLyAgICAgdHlwZWRlZiBpbnQ4X3QgVHlwZTsKKy8vICAg
ICB0eXBlZGVmIEludDhBcnJheSBWaWV3VHlwZTsKKy8vICAgICB0eXBlZGVmIEpTSW50OEFycmF5
IEpTVmlld1R5cGU7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShkb3VibGUpOworLy8g
ICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIGludDhf
dCB0b05hdGl2ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgSlNWYWx1ZSB0
b0pTVmFsdWUoaW50OF90KTsKKy8vICAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGludDhfdCk7
CisvLyB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZWxlbWVudFNpemUgPSBzaXplb2YoQWRhcHRvcjo6VHlwZSk7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7Cisg
ICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+
IGltcGwpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFN0cnVj
dHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1w
bCk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpOyB9CisgICAgc2l6ZV90IGJ5dGVTaXplKCkgY29u
c3QgeyByZXR1cm4gc2l6ZU9mKG1fbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOyB9Cisg
ICAgCisgICAgY29uc3QgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rv
cik7CisgICAgfQorICAgIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0K
KworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNz
IG1ldGhvZHMgdGhhdCBKU09iamVjdAorICAgIC8vIHN1cHBvcnRzIC0gaGVuY2UgdGhlIHNsaWdo
dCByZWR1bmRhbmN5LgorICAgIGJvb2wgY2FuR2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisg
ICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICBib29sIGNhblNl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xl
bmd0aDsKKyAgICB9CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSBnZXRJbmRleFF1aWNrbHlBc05h
dGl2ZVZhbHVlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IG1fbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIHR5cGVkVmVjdG9yKClbaV07CisgICAgfQorICAgIAorICAgIGRv
dWJsZSBnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEFkYXB0b3I6OnRvRG91YmxlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkp
OworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnRvSlNWYWx1ZShnZXRJbmRleFF1aWNrbHlB
c05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlU
b05hdGl2ZVZhbHVlKHVuc2lnbmVkIGksIEFkYXB0b3I6OlR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoaSA8IG1fbGVuZ3RoKTsKKyAgICAgICAgdHlwZWRWZWN0b3IoKVtpXSA9IHZh
bHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvRG91YmxlKHVuc2ln
bmVkIGksIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0
aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJbmRleFF1aWNrbHkoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQWRhcHRvcjo6VHlw
ZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIHZhbHVlKTsKKyAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBz
ZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuU2V0UXVpY2tseSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZzZXQgPD0gbV9sZW5ndGgK
KyAgICAgICAgICAgICYmIG9mZnNldCArIGxlbmd0aCA8PSBtX2xlbmd0aAorICAgICAgICAgICAg
Ly8gY2hlY2sgb3ZlcmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCArIGxlbmd0aCA+PSBvZmZz
ZXQ7CisgICAgfQorICAgIAorICAgIC8vIExpa2UgY2FuU2V0UXVpY2tseSwgZXhjZXB0OiBpZiBp
dCByZXR1cm5zIGZhbHNlLCBpdCB3aWxsIHRocm93IHRoZQorICAgIC8vIGFwcHJvcHJpYXRlIGV4
Y2VwdGlvbi4KKyAgICBib29sIHZhbGlkYXRlU2V0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
c2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUo
RXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24g
ZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJv
d24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGlj
IGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5
cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZv
aWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKwor
ICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRh
IGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2
ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NsYXNzIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisKK3Byb3RlY3Rl
ZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29u
c3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBD
YWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51
bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMyksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHByb3RvdHlwZSA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0sIHBy
b3RvdHlwZSwgbmFtZSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorU3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVx
dWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9CisgICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNz
OjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBq
c0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPmFyZ3VtZW50KDAp
KWpzQnVmZmVyKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZm
ZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDog
MDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVu
dFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQg
aXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBs
ZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVt
ZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdD
bGFzczo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3
ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5
LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4g
aW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFu
ZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3
Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgp
OworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4
ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVzdGVk
IGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3
Q2xhc3M6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47Cisg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitDYWxsRGF0YSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdD
bGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8
Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19o
CisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVj
dGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRl
eHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7
CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5o
ZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0
cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBz
aXplb2YoQWRhcHRvcjo6VHlwZSksIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXpl
KTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZt
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZp
ZXc6OnZlcmlmeVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKSkgeworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVm
ZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4
dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAg
ICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9
CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRl
eHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBs
KQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1w
bC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGlt
cGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwg
aW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Ojp2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShv
ZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZz
ZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5
cGU+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lm
aWNUeXBlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMg
Y2FzZTogdGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAor
ICAgIC8vIGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1
c2UgdGhlcmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxl
bmd0aCBvZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8v
IGFyZSwgb3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNv
cnQgdG8gdGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9u
ZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0
IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0
ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRl
UmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJv
cihleGVjLCB0aHJvd1JhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBj
aGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBzZXRJbmRl
eFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBDbGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8g
VGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBz
YW1lIHR5cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4ob2JqZWN0KTsKKyAgICAgICAgbGVuZ3RoID0gc3Rk
OjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSgKKyAgICAgICAgICAgIHR5cGVkVmVjdG9y
KCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3RvcigpLAorICAgICAgICAgICAgb3RoZXItPmxl
bmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMs
IGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0lu
dDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4o
b2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNl
dFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9m
ZnNldCk7CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0
aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCks
IG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCk7
CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlw
ZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywg
anNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgTm90VHlwZWRBcnJh
eToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2Uo
ZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0
LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0
KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0
aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRv
cjo6VHlwZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVt
YmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkp
IHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4UXVpY2tseShpbmRl
eCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0
byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHku
CisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5
TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90
LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNl
OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZp
b3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVm
aW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2
ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQt
b25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRo
cm93RXhjZXB0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJ
bmRleCgpICE9IFByb3BlcnR5TmFtZS5Ob3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAg
IAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlO
YW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZh
bHVlKGdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5h
bWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hv
dWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAg
ICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5
TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIWNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywg
cmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ug
c3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAg
YXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9k
ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBt
b2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAg
c3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7
CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JU
b2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5
OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5i
eXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3Zv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisg
ICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlw
ZWRBcnJheVZlY3RvclRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVj
dC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1f
dmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3Bh
Y2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9s
ZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1f
dmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tp
bmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVz
ZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAg
Ly8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5
IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVj
ZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2Ug
aGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0
byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5z
ZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0
ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3Rs
eSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJh
eSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2Vy
dGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZh
c3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBv
ZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2Fz
ZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6
ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2Vy
IGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFk
KiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisg
ICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0lu
ZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0
ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9t
b2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZseSAmJiBzaXplID49
IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxv
Y2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9idXR0ZXJmbHkgPSBz
dGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0Fy
cmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0oKSwgdGhpc09iamVj
dCwgc3RydWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBG
YXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlz
T2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICAvLyBG
SVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxpa2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4
dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5jZSByaWdodCBub3cgdGhpcyBjYXNlIHdp
bGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2UgcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8g
dGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFk
b3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBidXR0ZXJm
bHkoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVu
Y2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdU
eXBlOjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5i
eXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZV9oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6
IHB1YmxpYyBKU09iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFt
aWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmpl
Y3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CisgICAgCisgICAgSlNPYmplY3QqIHNvdXJjZUFycmF5ID0ganNEeW5hbWljQ2Fz
dDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXNvdXJjZUFycmF5KQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
Rmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4iKSk7CisgICAgCisgICAgdW5zaWdu
ZWQgb2Zmc2V0OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAg
ICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzb3VyY2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgCisgICAgdGhpc09iamVjdC0+c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQs
IGxlbmd0aCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVj
LT5jYWxsZWUoKSk7CisgICAgCisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAg
aWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1l
bnQuIikpOworICAgIAorICAgIGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhl
Yy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAg
CisgICAgLy8gR2V0IHRoZSBsZW5ndGggaGVyZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0
aCBkaWRuJ3QgY2hhbmdlLgorICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5s
ZW5ndGgoKTsKKyAgICAKKyAgICAvLyBIYW5kbGUgbmVnYXRpdmUgaW5kaWNlczogLXggPT4gbGVu
Z3RoIC0geAorICAgIGlmIChiZWdpbiA8IDApCisgICAgICAgIGJlZ2luID0gdGhpc0xlbmd0aCAt
IGJlZ2luOworICAgIGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSB0aGlzTGVuZ3RoIC0gZW5k
OworICAgIAorICAgIC8vIENsYW1wIHRoZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFy
cmF5LgorICAgIEFTU0VSVChiZWdpbiA+PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAg
IGJlZ2luID0gc3RkOjptaW4oYmVnaW4sIHRoaXNMZW5ndGgpOworICAgIGVuZCA9IHN0ZDo6bWlu
KGVuZCwgdGhpc0xlbmd0aCk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgorICAg
IGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0gYmVn
aW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIg
PSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0gdGhp
c09iamVjdC0+bGVuZ3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAg
ICAgICAgY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xh
c3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1bHQg
PSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBhcnJh
eUJ1ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmll
d0NsYXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAgbGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50
U2l6ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNl
dCwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0PFZpZXdDbGFzcz4sIERvbnRFbnVt
LCAyKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8Vmlld0NsYXNzPiwgRG9udEVudW0s
IDIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0Ns
YXNzPjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPih2bS5o
ZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUodm0sIHN0cnVj
dHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHBy
b3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorU3RydWN0dXJlKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1
cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDYgKzIxNCwzMCBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHJvdG9BY2Nlc3Nvci0+c2V0U2V0dGVyKGV4
ZWMtPnZtKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xv
YmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEFj
Y2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3Rv
QWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUt
PnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlw
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMtPnZtKCksIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50
OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQ4QXJyYXlQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52
bSgpLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDMyQXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgp
LCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50
OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDhDbGFtcGVk
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQx
NildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWlu
dDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0o
KSwgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFW
aWV3UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIAorICAgIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5
QnVmZmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDhBcnJheTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUlu
dDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDMyQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUlu
dDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
VWludDhDbGFtcGVkKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xh
bXBlZEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNVaW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTVWludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnN0
cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5w
cm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IGpzTnVsbCgpKSk7CiAgICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051
bGwoKSkpOwpAQCAtMzE4LDYgKzM0MiwyNiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgp
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuSlNPTiwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLk1hdGgsIE1hdGhPYmplY3Q6
OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOworICAgIAorICAg
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA9IEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKTsKKyAgICBGaXhlZEFy
cmF5PEpTT2JqZWN0KiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiB0eXBlZEFycmF5Q29u
c3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50OCld
ID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50OEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90
eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52
bSgpLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5cGVkQXJy
YXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJy
YXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBK
U1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDhBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5
cGUuZ2V0KCksICJVaW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwg
IlVpbnQ4Q2xhbXBlZEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVVaW50MTYpXSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIlVp
bnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNG
bG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSwgIkZs
b2F0NjRBcnJheSIpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUtPnB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJh
eUJ1ZmZlciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgdHlwZWRBcnJheUluZGV4ID0gTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVT
OyB0eXBlZEFycmF5SW5kZXgtLTspIHsKKyAgICAgICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5
SW5kZXhdLnByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5k
ZXhdLT5uYW1lKGV4ZWMpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0s
IERvbnRFbnVtKTsKKyAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFs
c1tdID0gewogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oZXhlYy0+cHJvcGVydHlOYW1lcygp
Lk5hTiwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5
cGUuaCIKQEAgLTE2Niw2ICsxNjgsMTYgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
aW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8SlNBcnJh
eUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZTsKKyAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJlOworICAgIAorICAgIHN0cnVjdCBU
eXBlZEFycmF5RGF0YSB7CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gcHJvdG90eXBl
OworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CisgICAgfTsKKyAg
ICAKKyAgICBGaXhlZEFycmF5PFR5cGVkQXJyYXlEYXRhLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlf
VFlQRVM+IG1fdHlwZWRBcnJheXM7CiAgICAgICAgIAogICAgIHZvaWQqIG1fc3BlY2lhbFBvaW50
ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNpYWwgcG9pbnRlcnMgdXNlZCBieSB0aGUg
TExJbnQgYW5kIEpJVC4KIApAQCAtMzMwLDYgKzM0MiwxNSBAQCBwdWJsaWM6CiAgICAgU3RydWN0
dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4
cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVnRXhwU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBT
dHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmdldCgpOyB9CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogYXJyYXlC
dWZmZXJQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdl
dCgpOyB9CisgICAgU3RydWN0dXJlKiBhcnJheUJ1ZmZlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IHR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3R5cGVkQXJyYXlzW3RvSW5kZXgodHlwZSldLnN0cnVjdHVyZS5nZXQo
KTsKKyAgICB9CiAKICAgICB2b2lkKiBhY3R1YWxQb2ludGVyRm9yKFNwZWNpYWw6OlBvaW50ZXIg
cG9pbnRlcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQ4QXJy
YXlfaCIKKyNkZWZpbmUgIkpTSW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlz
LmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmICJKU0ludDE2QXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MTZBcnJheV9oIgorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQxNkFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MzJBcnJheV9oIgorI2RlZmlu
ZSAiSlNJbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRp
ZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCwxMCArMjY0LDYg
QEAgU3RyaW5nIEpTT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplYwogCiBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgLy8gTkIuIFRoZSBm
YWN0IHRoYXQgd2UncmUgZGlyZWN0bHkgY29uc3VsdGluZyBvdXIgaW5kZXhlZCBzdG9yYWdlIGlt
cGxpZXMgdGhhdCBpdCBpcyBub3QKLSAgICAvLyBsZWdhbCBmb3IgYW55b25lIHRvIG92ZXJyaWRl
IGdldE93blByb3BlcnR5U2xvdCgpIHdpdGhvdXQgYWxzbyBvdmVycmlkaW5nCi0gICAgLy8gZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCgpLgotICAgIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CiAgICAgCiAgICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNv
bnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsiRnVuY3Rpb24i
LCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMj
dHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lO
Rk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVp
bnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8o
VWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxv
YXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRh
Vmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rv
cjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJy
YXk+IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OEFycmF5PiBK
U1VpbnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3Ry
dWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50
MTZBcnJheT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0
MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlDb25z
dHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Rh
dGFWaWV3PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBc
CisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19p
bmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjUHJvdG90eXBlKX0KKworTUFLRV9TX0lORk8o
SW50OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJB
cnJheSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBl
ZEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFy
cmF5KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJy
YXkpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBl
c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlPEpTSW50OEFycmF5PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90
b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJB
cnJheT4gSlNJbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4g
SlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNV
aW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0
QXJyYXlQcm90b3R5cGU7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBl
ZEFycmF5UHJvdG90eXBlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAg
IHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNBcnJheTo6c19pbmZvID0geyN0
eXBlICJBcnJheSIsICZKUyMjdHlwZSMjQXJyYXk6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQXJyYXkpfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01B
S0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4
KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFL
RV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxv
YXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5c19oCisKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlB
ZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVk
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpT
VWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0
b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0
MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiAiSlNVaW50OEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4QXJyYXlfaCIKKworI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1Vp
bnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4Q2xhbXBlZEFycmF5X2giCisKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xhbXBlZEFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDE2QXJyYXlf
aCIKKyNkZWZpbmUgIkpTVWludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiAiSlNVaW50MzJBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MzJBcnJheV9o
IgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJQYXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJy
YXlCdWZmZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciogbmF0aXZlKQoreworICAgIGlm
IChKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBuYXRpdmUtPm1fd3JhcHBlci5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0Fy
cmF5QnVmZmVyOjpjcmVhdGUoZXhlYywgbmF0aXZlKTsKKyAgICBuYXRpdmUtPm1fd3JhcHBlciA9
IFBhc3NXZWFrKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gK
KyNkZWZpbmUgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxl
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFRoZSBkZWZhdWx0IGNvbnRyb2xsZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0
aW9uc2hpcCBiZXR3ZWVuCisvLyBhcnJheSBidWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBK
YXZhU2NyaXB0Q29yZS4gVGhpcyBpc24ndCB3aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBp
cyB3aGF0IEpTQyB1c2VzIHdoZW4gcnVubmluZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0
dHkgc2ltcGxlOgorLy8KKy8vIC0gSWYgdGhlIEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0
aGUgQXJyYXlCdWZmZXIgc3RheXMgYWxpdmUuCisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5
QnVmZmVyIGZvciBhIEpTQXJyYXlCdWZmZXIgYWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJl
ZW4gY3JlYXRlZCBhbmQgaXQgZGlkbid0IGRpZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAg
IG9uZS4KKworY2xhc3MgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRB
cnJheUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KCk7CisgICAgdmlydHVhbCB+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
LCBBcnJheUJ1ZmZlciopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5QWRhcHRvcnNfaAorI2RlZmluZSBU
eXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZp
ZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBl
ZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAg
IHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBl
ZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisKKyAgICBzdGF0aWMgVHlwZSB0
b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUu
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAg
IHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0Rv
dWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcs
IHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yIHsK
KyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdU
eXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBj
b25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisgICAgCisgICAg
c3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUg
dG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2
YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
TmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpT
VmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1i
ZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7
CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRvcjsK
K3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4
Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFw
dG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFt
cGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBV
aW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+
IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0
b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRB
ZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNz
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpT
VWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFw
dG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8Rmxv
YXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlw
ZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07Citz
dHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJ
bnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNV
aW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdy
YWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXks
IFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFy
cmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50
MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8
ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07Citz
dHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxv
YXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVJ
bnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVk
ZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBl
ZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVW
YWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRp
dmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8
IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAy
NTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3Qg
dG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMy
KCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAg
cmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1w
KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50
OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
aWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorVHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBUeXBlZEFycmF5
Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU0Fy
cmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2NsYXNzIFR5cGVkQXJyYXlDb250
cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNvbnRyb2xsZXI+IHsKK3B1Ymxp
YzoKKyAgICBUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflR5cGVkQXJyYXlD
b250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlE
ZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3Jf
aAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFy
cmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0gICAg
VHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWlu
dDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAot
ICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRB
cnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwg
bV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0g
ICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
LCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBt
X2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VP
ZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAg
ICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9y
YWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRB
cnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBl
ZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRp
bmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5VHlwZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVkQXJy
YXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5
cGVJbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAg
IG91dC5wcmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVV
aW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDhD
bGFtcGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAg
IG91dC5wcmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91dC5w
cmludCgiVHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURhdGFW
aWV3OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5VHlwZV9oCisjZGVmaW5lIFR5cGVkQXJy
YXlUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsKKworZW51bSBUeXBlZEFycmF5VHlwZSB7CisgICAgTm90VHlwZWRBcnJheSwKKyAgICBUeXBl
SW50OCwKKyAgICBUeXBlVWludDgsCisgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKKyAgICBUeXBlSW50
MTYsCisgICAgVHlwZVVpbnQxNiwKKyAgICBUeXBlSW50MzIsCisgICAgVHlwZVVpbnQzMiwKKyAg
ICBUeXBlRmxvYXQzMiwKKyAgICBUeXBlRmxvYXQ2NCwKKyAgICBUeXBlRGF0YVZpZXcKK307CisK
KyNkZWZpbmUgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTIFR5cGVEYXRhVmlldworCitpbmxp
bmUgdW5zaWduZWQgdG9JbmRleChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgLSAxOworfQorCitpbmxpbmUgYm9vbCBpc1R5cGVk
VmlldyhUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwor
aW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2Ug
VHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50
MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBU
eXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAg
ICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFt
cGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19o
CisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRl
ZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7
Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFy
cmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4
QXJyYXlfaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBVaW50OEFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVk
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50
OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
IlVpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJVaW50OENsYW1wZWRBcnJheV9oIgorCisj
aW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQxNkFycmF5X2giCisjZGVmaW5l
ICJVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8v
IFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
aW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIlVpbnQzMkFy
cmF5X2giCisjZGVmaW5lICJVaW50MzJBcnJheV9oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzMzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVk
ZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJl
Z0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3Rp
dmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtMjU4LDYgKzI1OSwxMCBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVz
ZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0
YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEg
ZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAg
Ly8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVm
KG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNp
bmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiV2F0Y2hk
b2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCkBAIC0zODEsNiArMzgyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwog
ICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7
CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJv
bGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQ
b2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZm
ZXIuY3BwCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQXJyYXlCdWZm
ZXJWaWV3LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJy
YXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
PiYgbmV1dGVyZWRWaWV3cykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0
aGlzKTsKLQotICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEpIHsKLSAgICAgICAgcmVzdWx0Lm1f
ZGF0YSA9IDA7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGFsbFZp
ZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZlclZpZXcqIGkgPSBt
X2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAgaWYgKCFpLT5pc05l
dXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCi0gICAgICAgIG1fY29udGVu
dHMudHJhbnNmZXIocmVzdWx0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgbV9jb250ZW50cy5jb3B5
VG8ocmVzdWx0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQubV9kYXRhKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHdoaWxlIChtX2ZpcnN0VmlldykgewotICAgICAgICBB
cnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAgcmVtb3ZlVmll
dyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50
LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigpOwotICAgICAg
ICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQot
ewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gMDsK
LSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3
KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0gICAgbV9maXJzdFZp
ZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3KEFycmF5QnVmZmVy
VmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1ZmZlcik7Ci0gICAg
aWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZpZXctPm1fcHJldlZp
ZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZWaWV3KQotICAgICAg
ICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICBp
ZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9maXJzdFZpZXcgPSB2aWV3LT5tX25l
eHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRWaWV3ID0gMDsKLX0K
LQotfQpJbmRleDogU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTMzNTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCi0jZGVmaW5lIEFycmF5QnVmZmVyX2gKLQot
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFt
ZXNwYWNlIFdURiB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotY2xhc3MgQXJyYXlCdWZmZXJWaWV3
OwotCi1jbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKLXB1YmxpYzoKLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
KCkgCi0gICAgICAgIDogbV9kYXRhKDApCi0gICAgICAgICwgbV9zaXplSW5CeXRlcygwKQotICAg
IHsgfQotCi0gICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0KLSAgICB2b2lkKiBk
YXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSB7IHJl
dHVybiBtX3NpemVJbkJ5dGVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50
cyh2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykgCi0gICAgICAgIDogbV9kYXRhKGRh
dGEpCi0gICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKLSAgICB7IH0KLQotICAg
IGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKLQotICAgIGVudW0gSW5pdGlhbGl6YXRpb25Qb2xp
Y3kgewotICAgICAgICBaZXJvSW5pdGlhbGl6ZSwKLSAgICAgICAgRG9udEluaXRpYWxpemUKLSAg
ICB9OwotCi0gICAgc3RhdGljIGlubGluZSB2b2lkIHRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVs
ZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEluaXRpYWxpemF0aW9uUG9saWN5LCBB
cnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0gICAgdm9pZCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRl
bnRzJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghb3RoZXIubV9kYXRhKTsKLSAgICAg
ICAgb3RoZXIubV9kYXRhID0gbV9kYXRhOwotICAgICAgICBvdGhlci5tX3NpemVJbkJ5dGVzID0g
bV9zaXplSW5CeXRlczsKLSAgICAgICAgbV9kYXRhID0gMDsKLSAgICAgICAgbV9zaXplSW5CeXRl
cyA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjb3B5VG8oQXJyYXlCdWZmZXJDb250ZW50cyYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBBU1NFUlQoIW90aGVyLm1fZGF0YSk7Ci0gICAgICAgIEFycmF5
QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKG1fc2l6ZUluQnl0ZXMsIHNpemVvZihjaGFyKSwg
QXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUsIG90aGVyKTsKLSAgICAgICAgaWYg
KCFvdGhlci5tX2RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1lbWNweShvdGhl
ci5tX2RhdGEsIG1fZGF0YSwgbV9zaXplSW5CeXRlcyk7Ci0gICAgICAgIG90aGVyLm1fc2l6ZUlu
Qnl0ZXMgPSBtX3NpemVJbkJ5dGVzOwotICAgIH0KLQotICAgIHZvaWQqIG1fZGF0YTsKLSAgICB1
bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwotfTsKLQotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25l
ZCBlbGVtZW50Qnl0ZVNpemUpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCogc291cmNlLCB1bnNpZ25lZCBieXRlTGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShB
cnJheUJ1ZmZlckNvbnRlbnRzJik7Ci0KLSAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwotCi0gICAgaW5saW5lIHZvaWQqIGRhdGEoKTsK
LSAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25l
ZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gc2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luKSBjb25zdDsKLQotICAgIHZvaWQgYWRkVmll
dyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3
Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNv
bnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3Mp
OwotICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQot
Ci0gICAgfkFycmF5QnVmZmVyKCkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2ln
bmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Q
b2xpY3kpOwotCi0gICAgaW5saW5lIEFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsK
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2VJbXBsKHVuc2lnbmVkIGJl
Z2luLCB1bnNpZ25lZCBlbmQpIGNvbnN0OwotICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4
KGludCBpbmRleCkgY29uc3Q7Ci0gICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQg
eCwgaW50IGxlZnQsIGludCByaWdodCk7Ci0KLSAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29u
dGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKLX07Ci0KLWludCBBcnJh
eUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKLXsKLSAgICBB
U1NFUlQobGVmdCA8PSByaWdodCk7Ci0gICAgaWYgKHggPCBsZWZ0KQotICAgICAgICB4ID0gbGVm
dDsKLSAgICBpZiAocmlnaHQgPCB4KQotICAgICAgICB4ID0gcmlnaHQ7Ci0gICAgcmV0dXJuIHg7
Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUodW5zaWdu
ZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6
Olplcm9Jbml0aWFsaXplKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3RoZXIpCi17Ci0gICAgcmV0dXJuIEFycmF5QnVmZmVy
OjpjcmVhdGUob3RoZXItPmRhdGEoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGUoY29uc3Qgdm9pZCogc291cmNl
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVu
dHM7Ci0gICAgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUoYnl0ZUxlbmd0aCwgMSwg
QXJyYXlCdWZmZXJDb250ZW50czo6WmVyb0luaXRpYWxpemUsIGNvbnRlbnRzKTsKLSAgICBpZiAo
IWNvbnRlbnRzLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKLSAgICBt
ZW1jcHkoYnVmZmVyLT5kYXRhKCksIHNvdXJjZSwgYnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIGJ1
ZmZlci5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi17Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQotewotICAgIHJldHVybiBjcmVhdGUobnVt
RWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRp
YWxpemUpOwotfQotCi1QYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVm
ZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSkKLXsKLSAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzIGNvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9j
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIHBvbGljeSwgY29udGVudHMpOwotICAg
IGlmICghY29udGVudHMubV9kYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7Ci19Ci0KLUFycmF5QnVmZmVyOjpBcnJh
eUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3
KDApCi17Ci0gICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7Ci19Ci0KLXZvaWQqIEFy
cmF5QnVmZmVyOjpkYXRhKCkKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX2RhdGE7Ci19Ci0K
LWNvbnN0IHZvaWQqIEFycmF5QnVmZmVyOjpkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b250ZW50cy5tX2RhdGE7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwotfQotCi1QYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1w
SW5kZXgoZW5kKSk7Ci19Ci0KLVBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpz
bGljZShpbnQgYmVnaW4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4
KGJlZ2luKSwgYnl0ZUxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJy
YXlCdWZmZXI6OnNsaWNlSW1wbCh1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKSBjb25zdAot
ewotICAgIHVuc2lnbmVkIHNpemUgPSBiZWdpbiA8PSBlbmQgPyBlbmQgLSBiZWdpbiA6IDA7Ci0g
ICAgcmV0dXJuIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEoKSkgKyBiZWdpbiwgc2l6ZSk7Ci19Ci0KLXVuc2lnbmVkIEFycmF5QnVmZmVyOjpjbGFtcElu
ZGV4KGludCBpbmRleCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjdXJyZW50TGVuZ3RoID0gYnl0
ZUxlbmd0aCgpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIGluZGV4ID0gY3VycmVudExl
bmd0aCArIGluZGV4OwotICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVu
Z3RoKTsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJl
c3VsdCkKLXsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3Rh
bCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlv
biBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYg
dGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAgIC8v
IHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KLSAgICBpZiAo
bnVtRWxlbWVudHMpIHsKLSAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMg
KiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAh
PSBlbGVtZW50Qnl0ZVNpemUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgYWxsb2NhdGlvblN1
Y2NlZWRlZCA9IGZhbHNlOwotICAgIGlmIChwb2xpY3kgPT0gWmVyb0luaXRpYWxpemUpCi0gICAg
ICAgIGFsbG9jYXRpb25TdWNjZWVkZWQgPSBXVEY6OnRyeUZhc3RDYWxsb2MobnVtRWxlbWVudHMs
IGVsZW1lbnRCeXRlU2l6ZSkuZ2V0VmFsdWUocmVzdWx0Lm1fZGF0YSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChwb2xpY3kgPT0gRG9udEluaXRpYWxpemUpOwotICAgICAgICBhbGxvY2F0
aW9uU3VjY2VlZGVkID0gV1RGOjp0cnlGYXN0TWFsbG9jKG51bUVsZW1lbnRzICogZWxlbWVudEJ5
dGVTaXplKS5nZXRWYWx1ZShyZXN1bHQubV9kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAoYWxsb2Nh
dGlvblN1Y2NlZWRlZCkgewotICAgICAgICByZXN1bHQubV9zaXplSW5CeXRlcyA9IG51bUVsZW1l
bnRzICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3Vs
dC5tX2RhdGEgPSAwOwotfQotCi1BcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250
ZW50cygpCi17Ci0gICAgV1RGOjpmYXN0RnJlZShtX2RhdGEpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlcjsKLQotI2VuZGlmIC8vIEFycmF5QnVmZmVy
X2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzMzUyKQor
KysgU291cmNlL1dURi93dGYvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFy
cmF5QnVmZmVyVmlldy5oIgotCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLUFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9m
ZnNldCkKLSAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAgICAgLCBtX2lz
TmV1dGVyYWJsZSh0cnVlKQotICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBt
X3ByZXZWaWV3KDApCi0gICAgICAgICwgbV9uZXh0VmlldygwKQotewotICAgIG1fYmFzZUFkZHJl
c3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBt
X2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAgICBtX2J1ZmZlci0+
YWRkVmlldyh0aGlzKTsKLX0KLQotQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkK
LXsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMp
OwotfQotCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKLXsKLSAgICBtX2J1ZmZlciA9
IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dURi93dGYv
QXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDE1MzM1MikKKysrIFNvdXJjZS9XVEYvd3RmL0FycmF5QnVmZmVy
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBBcnJheUJ1ZmZlclZpZXdfaAotI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAotCi0jaW5jbHVk
ZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8
bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0K
LWNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyVmll
dz4gewotICBwdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAot
ICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5
cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAg
ICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQs
Ci0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRU
eXBlKCkgY29uc3QgPSAwOwotCi0gICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlcjsKLSAgICB9Ci0KLSAgICB2b2lk
KiBiYXNlQWRkcmVzcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVz
czsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7Ci0gICAgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxh
ZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KLSAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZp
ZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldFJhbmdlSW1w
bChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBj
YWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJh
eVNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
KiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCi0gICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0
aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCi0gICAgLy8gd2l0aGlu
IHJhbmdlLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlm
eVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQotICAgIHsKLSAgICAgICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChzaXplb2YoVCkg
PiAxICYmIGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0g
KGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgICAg
IGlmIChudW1FbGVtZW50cyA+IHJlbWFpbmluZ0VsZW1lbnRzKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJbnB1dCBvZmZz
ZXQgaXMgaW4gbnVtYmVyIG9mIGVsZW1lbnRzIGZyb20gdGhpcyBhcnJheSdzIHZpZXc7Ci0gICAg
Ly8gb3V0cHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgdW5kZXJseWlu
ZyBidWZmZXIncyB2aWV3LgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2
b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YXJyYXlCeXRlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgKm9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1h
eE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7Ci0gICAg
ICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7Ci0gICAgICAgICAgICAqb2Zmc2V0ID0gYnVm
ZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgICAgICAqbnVtRWxlbWVudHMgPSAwOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICpvZmZzZXQgPSBhcnJheUJ5dGVPZmZz
ZXQgKyAqb2Zmc2V0ICogc2l6ZW9mKFQpOwotICAgICAgICAqb2Zmc2V0ID0gc3RkOjptaW4oYnVm
ZmVyLT5ieXRlTGVuZ3RoKCksICpvZmZzZXQpOwotICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdF
bGVtZW50cyA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtICpvZmZzZXQpIC8gc2l6ZW9mKFQpOwot
ICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihyZW1haW5pbmdFbGVtZW50cywgKm51bUVs
ZW1lbnRzKTsKLSAgICB9Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIG5l
dXRlcigpOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIn
cyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KLSAgICB2b2lkKiBtX2Jhc2VBZGRyZXNz
OwotCi0gICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDogMzE7Ci0gICAgYm9vbCBtX2lzTmV1dGVy
YWJsZSA6IDE7Ci0KLSAgcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7Ci0g
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1f
cHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3OwotfTsKLQotYm9vbCBB
cnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSwgdW5zaWduZWQg
Ynl0ZU9mZnNldCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAg
ICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVMZW5ndGgoKSA+IGJ5dGVMZW5ndGgoKQotICAg
ICAgICB8fCBieXRlT2Zmc2V0ICsgYXJyYXktPmJ5dGVMZW5ndGgoKSA8IGJ5dGVPZmZzZXQpIHsK
LSAgICAgICAgLy8gT3V0IG9mIHJhbmdlIG9mZnNldCBvciBvdmVyZmxvdwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGNoYXIqIGJhc2UgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oYmFzZUFkZHJlc3MoKSk7Ci0gICAgbWVtbW92ZShiYXNlICsgYnl0ZU9mZnNldCwgYXJyYXkt
PmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3RoKCkpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEFycmF5QnVmZmVyVmlldzo6c2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLXsKLSAgICBpZiAo
Ynl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgZGF0YUJ5
dGVMZW5ndGggPiBieXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIGRhdGFCeXRl
TGVuZ3RoIDwgYnl0ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9y
IG92ZXJmbG93Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgY2hhciog
YmFzZSA9IHN0YXRpY19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsKLSAgICBtZW1tb3ZlKGJh
c2UgKyBieXRlT2Zmc2V0LCBkYXRhLCBkYXRhQnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBi
eXRlTGVuZ3RoKCkKLSAgICAgICAgfHwgYnl0ZU9mZnNldCArIHJhbmdlQnl0ZUxlbmd0aCA+IGJ5
dGVMZW5ndGgoKQotICAgICAgICB8fCBieXRlT2Zmc2V0ICsgcmFuZ2VCeXRlTGVuZ3RoIDwgYnl0
ZU9mZnNldCkgewotICAgICAgICAvLyBPdXQgb2YgcmFuZ2Ugb2Zmc2V0IG9yIG92ZXJmbG93Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgY2hhciogYmFzZSA9IHN0YXRp
Y19jYXN0PGNoYXIqPihiYXNlQWRkcmVzcygpKTsKLSAgICBtZW1zZXQoYmFzZSArIGJ5dGVPZmZz
ZXQsIDAsIHJhbmdlQnl0ZUxlbmd0aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJy
YXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5k
LCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCi17Ci0gICAg
aWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwotICAgIGlmIChzdGFy
dCA8IDApCi0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5k
ICs9IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLSAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCkgPiBhcnJheVNpemUpCi0gICAgICAgIGVuZCA9
IGFycmF5U2l6ZTsKLSAgICBpZiAoZW5kIDwgc3RhcnQpCi0gICAgICAgIGVuZCA9IHN0YXJ0Owot
ICAgICpvZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOwotICAgICpsZW5ndGgg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpBcnJheUJ1ZmZlclZpZXc7Ci0KLSNlbmRpZiAvLyBBcnJheUJ1
ZmZlclZpZXdfaApJbmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUg
RGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBh
bGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxs
IHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFz
CisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4g
ZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUg
dXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNv
bWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbmV0ID0gMjsKKyAgICAKK3B1Ymxp
YzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbElu
Y3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBu
b3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7Cisg
ICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisg
ICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5j
cmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorCisgICAgYm9vbCBz
ZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7
CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7Cisg
ICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVu
c2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVm
ZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAg
aWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlz
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNv
dW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5k
aWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlw
Qnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlwQnl0ZXNfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBuZWVkVG9G
bGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklH
X0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxp
dHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWludDE2X3QgZmxpcEJ5dGVzKHVpbnQx
Nl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMGZmKSA8PCA4KQorICAgICAg
ICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitpbmxpbmUgdWludDMyX3QgZmxpcEJ5
dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDBmZikg
PDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZmMDApIDw8IDgpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAw
MDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZsaXBCeXRlcyh1aW50NjRfdCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwMDBmZmxsdSkgPDwgNTYp
CisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwZmYwMGxsdSkgPDwgNDApCisgICAg
ICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxsdSkgPDwgMjQpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVl
ICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAw
MDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAw
MDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwMDAwMDAw
MDBsbHUpID4+IDU2KQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5
dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDIpCisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50MTZfdD4odmFsdWUpKSk7
CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpKTsKKyAgICBpZiAo
c2l6ZW9mKHZhbHVlKSA9PSA4KQorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBC
eXRlcyhiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlKSkpOworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6
OmZsaXBCeXRlczsKKworI2VuZGlmIC8vIEZsaXBCeXRlc19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208473</attachid>
            <date>2013-08-09 22:41:59 -0700</date>
            <delta_ts>2013-08-09 22:58:34 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>310647</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtOTcsMjQgKzk3LDI0IEBAIGlubGluZSBKSVRBcnJheU1vZGUg
aml0QXJyYXlNb2RlRm9ySW5kZXgKIAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVG
b3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgc3dpdGNoIChj
bGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUlu
dDg6CisgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVTdG9yYWdlVHlwZSkgeworICAgIGNhc2Ug
VHlwZUludDg6CiAgICAgICAgIHJldHVybiBKSVRJbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5SW50MTY6CisgICAgY2FzZSBUeXBlSW50MTY6CiAgICAgICAgIHJldHVybiBKSVRJbnQxNkFy
cmF5OwotICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgorICAgIGNhc2UgVHlwZUludDMyOgogICAg
ICAgICByZXR1cm4gSklUSW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAg
ICBjYXNlIFR5cGVVaW50ODoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7Ci0gICAgY2Fz
ZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVk
QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICAgICAgcmV0dXJuIEpJVFVpbnQ4Q2xhbXBlOworICAgIGNhc2UgVHlwZVVpbnQx
NjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVp
bnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAg
ICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2
NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlu
bGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGlu
ZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1v
ZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAg
ICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1
cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJy
YXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSwyNCBAQCBwcml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKK2NsYXNzIERlZmVy
R0NGb3JBV2hpbGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVyR0NGb3JBV2hpbGUp
OworcHVibGljOgorICAgIERlZmVyR0NGb3JBV2hpbGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBt
X2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIG1faGVhcC5pbmNyZW1lbnREZWZlcnJhbERlcHRo
KCk7CisgICAgfQorICAgIAorICAgIH5EZWZlckdDRm9yQVdoaWxlKCkKKyAgICB7CisgICAgICAg
IG1faGVhcC5kZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEhlYXAmIG1faGVhcDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGVm
ZXJHQ19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZF9oCisK
KyNpbmNsdWRlIDx3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBvYmplY3QgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFs
IHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0byBpbmNvbWluZyByZWZlcmVuY2VzIGZyb20gdGhl
IGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGluCisvLyByZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dz
IGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBTdWNoIG9iamVjdHMgYWxzbworLy8gaGF2ZSB0aGUg
aW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBoYXZlIHJlZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBH
QworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZD
b3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBH
Q0luY29taW5nUmVmQ291bnRlZCgpCisgICAgICAgIDogbV9lbmNvZGVkUG9pbnRlcigwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICB7CisgICAg
ICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkpCisgICAgICAgICAgICBkZWxldGUgdmVjdG9yT2ZD
ZWxscygpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5j
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7CisgICAg
fQorICAgIAorICAgIEpTQ2VsbCogaW5jb21pbmdSZWZlcmVuY2VBdChzaXplX3QgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIGlm
IChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAg
ICAgICByZXR1cm4gc2luZ2xldG9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlY3Rv
ck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIGdlbmVyYWxs
eSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LCBzaW5jZSBpZiB0aGlzCisg
ICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUgc3VwcG9zZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRv
IHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2FsbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDo6YWRk
UmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBib29sIGFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2Vs
bCopOworICAgIAorICAgIC8vIEEgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3
aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisgICAgLy8gcmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYg
d2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0aGUgb2JqZWN0LAorICAgIC8vIGFuZCBpZiBpdCBk
b2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4gSW4gZ2VuZXJhbCwgeW91IGRvbid0IHdhbnQKKyAg
ICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmlsdGVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBm
YWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUgYWxzbyB3YWxraW5nIHRoZSBHQydzIGxpc3QuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rpb25UeXBlPgorICAgIGJvb2wgZmlsdGVy
SW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYpOworICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgdWludHB0cl90IHNpbmdsZXRvbkZsYWcoKSB7IHJldHVybiAxOyB9CisgICAg
CisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxzKCkgY29uc3QgeyByZXR1cm4gIShtX2VuY29kZWRQ
b2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsgfQorICAgIGJvb2wgaGFzQW55SW5jb21pbmcoKSBj
b25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50ZXI7IH0KKyAgICBib29sIGhhc1NpbmdsZXRv
bigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUluY29taW5nKCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMo
KTsgfQorICAgIAorICAgIEpTQ2VsbCogc2luZ2xldG9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlND
ZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5zaW5nbGV0b25GbGFnKCkpOworICAgIH0KKyAgICAK
KyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rvck9mQ2VsbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VmVjdG9yPEpTQ2VsbCo+ID4obV9lbmNvZGVkUG9pbnRlcik7CisgICAgfQorICAgIAorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDogdGhpcyBpcyBhIEpTQ2VsbCouCisgICAgLy8gU2lu
Z2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBpcyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2Vs
bHMuCisgICAgdWludHB0cl90IG1fZW5jb2RlZFBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1
ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citi
b29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwq
IGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2Rl
ZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWco
KTsKKyAgICAgICAgc2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1Npbmds
ZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChI
ZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOwor
ICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4q
IHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQo
c2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9l
bmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAg
IEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRl
ckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29t
aW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAg
IGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVmZXJyZWQoKSk7
CisgICAgICAgIEFTU0VSVChyZWZDb3VudCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAgICAgCisgICAgQVNTRVJUKGlzRGVmZXJyZWQoKSk7CisgICAgICAgIAorICAgIGlm
IChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24oc2luZ2xldG9u
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIG1f
ZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOwor
ICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHZlY3Rvck9mQ2VsbHMoKS0+YXQoaSkpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaS0tKSA9IHZl
Y3Rvck9mQ2VsbHMoKS0+bGFzdCgpOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPnJlbW92ZUxh
c3QoKTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+
PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNl
bGxzKCktPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rv
ck9mQ2VsbHMoKS0+YXQoMCkpIHwgc2luZ2xldG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5n
bGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0X2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCisjaW5jbHVk
ZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFQgPSBz
b21lIHN1YnR5cGUgb2YgR0NJbmNvbWluZ1JlZkNvdW50ZWQsIG11c3Qgc3VwcG9ydCBhIGdjU2l6
ZUVzdGltYXRlSW5CeXRlcygpCisvLyBtZXRob2QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQgeworcHVibGljOgorICAgIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0KCk7CisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCk7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBuYXRpdmUgb2JqZWN0IGlzIG5ldyB0byB0aGlzIHNldC4K
KyAgICBib29sIGFkZFJlZmVyZW5jZShKU0NlbGwqLCBUKik7CisgICAgCisgICAgdm9pZCBzd2Vl
cCgpOworICAgIAorICAgIHZvaWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXMgfTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlQWxsKEpTQ2VsbCopOworICAgIHN0
YXRpYyBib29sIHJlbW92ZURlYWQoSlNDZWxsKik7CisgICAgCisgICAgVmVjdG9yPFQqPiBtX3Zl
Y3RvcjsKKyAgICBzaXplX3QgbV9ieXRlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpHQ0luY29taW5nUmVmQ291bnRlZFNl
dCgpCisgICAgOiBtX2J5dGVzKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitHQ0lu
Y29taW5nUmVmQ291bnRlZFNldDxUPjo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3ZlY3Rv
cltpXS0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZUFsbCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBUKiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmFkZEluY29t
aW5nUmVmZXJlbmNlKGNlbGwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92ZWN0b3Iu
YXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5C
eXRlcygpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6c3dlZXAoKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVCogb2JqZWN0ID0g
bV92ZWN0b3JbaV07CisgICAgICAgIHNpemVfdCBzaXplID0gb2JqZWN0LT5nY1NpemVFc3RpbWF0
ZUluQnl0ZXMoKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNl
cyhyZW1vdmVEZWFkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2J5dGVzIC09
IHNpemU7CisgICAgICAgIG1fdmVjdG9yW2ktLV0gPSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAg
IG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVEZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBy
ZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDYgKzM1OCwxNCBA
QCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdDb2Rl
QmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJlbmNl
KEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJheUJ1
ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVzdGlt
YXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVj
dHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50
U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwxNCAr
NjI5LDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7Cisg
ICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKK30K
Kwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUo
KSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYVNp
emUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSAr
IGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKQpAQCAtNzQ1LDYgKzc1OCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUg
c3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAg
CisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAg
bV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tT
bmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAt
OTI0LDEyICs5NDIsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAg
ICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBt
X2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwog
ICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBI
ZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIK
ICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIK
ICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVm
UHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEg
bWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSw2ICsxODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgICAgIAogICAgICAg
ICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gbV9q
aXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkUmVmZXJlbmNlKEpT
Q2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtMjMwLDYgKzIzNSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRl
Y3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7
CkBAIC0yNDUsNiArMjUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2Nh
dG9yIG1fYmxvY2tBbGxvY2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7
CiAgICAgICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5n
UmVmQ291bnRlZFNldDxBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVf
dCBtX2V4dHJhTWVtb3J5VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5H
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOCArNDgy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
Jiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAg
ICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAu
IHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBz
dG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDksMTMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEs
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2Rl
KGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRG
bG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpA
QCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVS
b3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5dFR5
cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCkBAIC0xNjY4LDcgKzE2MjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMp
KTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0
eXBlKQogewogICAgIC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRv
IHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAvLyBjbG9i
YmVyaW5nIHRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBh
bmQgcHJvcGVydHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAog
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxMCArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAKLSNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKLQogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MiwxMyArMzksOSBAQCBi
b29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0g
ICAgZm9yIChBcnJheUJ1ZmZlclZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4
dFZpZXcpIHsKLSAgICAgICAgaWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFs
bFZpZXdzQXJlTmV1dGVyYWJsZSA9IGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzTmV1dGVyYWJs
ZSA9ICFtX3BpbkNvdW50OwogCi0gICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSkKKyAgICBp
ZiAoaXNOZXV0ZXJhYmxlKQogICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7CkBAIC01NiwzNiAr
NDksMTMgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHdoaWxlIChtX2ZpcnN0Vmlldykgewot
ICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAg
cmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8
fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigp
OwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKKyAgICBmb3IgKHNpemVf
dCBpID0gbnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKTsgaS0tOykgeworICAgICAgICBKU0Fy
cmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihp
bmNvbWluZ1JlZmVyZW5jZUF0KGkpKTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2
aWV3LT5uZXV0ZXIoKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlC
dWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVm
ZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRW
aWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0
Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12
b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAg
ICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZp
ZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZW
aWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3
LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0g
dmlldykKLSAgICAgICAgbV9maXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXct
Pm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRWaWV3ID0gMDsKLX0KK30gLy8gbmFtZXNwYWNlIEpT
QwogCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVy
LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxNSArMjYsMTYgQEAKICNpZm5kZWYgQXJy
YXlCdWZmZXJfaAogI2RlZmluZSBBcnJheUJ1ZmZlcl9oCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiV2Vhay5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBB
cnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7
CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAtNDUsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgeyB9
CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMoKTsKLQorICAgIAogICAgIHZvaWQq
IGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsg
cmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApAQCAtODYsMTIgKzg3LDEzIEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKLWNsYXNzIEFycmF5QnVmZmVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGlj
IEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJy
YXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNp
Z25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAtMTAyLDkgKzEwNCw5IEBAIHB1YmxpYzoKIAogICAg
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQp
IGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVn
aW4pIGNvbnN0OwotCi0gICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOwotICAgIHZv
aWQgcmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICAKKyAgICB2b2lkIHBpbigpOwor
ICAgIHZvaWQgdW5waW4oKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYg
bmV1dGVyZWRWaWV3cyk7CiAgICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVu
dHMubV9kYXRhOyB9CkBAIC0xMTksOCArMTIxLDExIEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVu
c2lnbmVkIGNsYW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsKICAgICBzdGF0aWMgaW5saW5lIGlu
dCBjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKIAorICAgIHVuc2lnbmVk
IG1fcGluQ291bnQ7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFy
cmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7CisKK3B1YmxpYzoKKyAgICBXZWFrPEpTQXJyYXlC
dWZmZXI+IG1fd3JhcHBlcjsKIH07CiAKIGludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQg
eCwgaW50IGxlZnQsIGludCByaWdodCkKQEAgLTE1OSw2ICsxNjQsMTIgQEAgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJy
YXlCdWZmZXIoY29udGVudHMpKTsKIH0KIAorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OmNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0
aCkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGRhdGEsIGJ5dGVMZW5ndGgp
OworICAgIHJldHVybiBjcmVhdGUoY29udGVudHMpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50
cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVybiBjcmVhdGUobnVtRWxl
bWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxp
emUpOwpAQCAtMTc0LDcgKzE4NSw3IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmUKIH0KIAogQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVu
dHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZpZXcoMCkKKyAgICA6IG1fcGluQ291bnQoMCkK
IHsKICAgICBjb250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKIH0KQEAgLTIxOCw2ICsyMjks
MTYgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJldHVy
biBjbGFtcFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJheUJ1
ZmZlcjo6cGluKCkKK3sKKyAgICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6
OnVucGluKCkKK3sKKyAgICBtX3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJDb250
ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5
LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgLy8gRG8gbm90IGFsbG93IDMy
LWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KQEAgLTI1Myw3ICsyNzQsNSBAQCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCi11c2luZyBKU0M6OkFycmF5QnVmZmVyOwotdXNpbmcgSlNDOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOwotCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDI4ICszMCwzNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZz
ZXQpCi0gICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICwgbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9wcmV2VmlldygwKQotICAgICwgbV9uZXh0VmlldygwKQorQXJyYXlCdWZmZXJWaWV3
OjpBcnJheUJ1ZmZlclZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZz
ZXQpCisgICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKKyAgICAgICAgLCBtX2J1ZmZlcihi
dWZmZXIpCiB7CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNo
YXIqPihtX2J1ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAwOwotICAgIGlmIChtX2J1
ZmZlcikgCi0gICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwogfQogCiBBcnJheUJ1ZmZl
clZpZXc6On5BcnJheUJ1ZmZlclZpZXcoKQogewotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAg
bV9idWZmZXItPnJlbW92ZVZpZXcodGhpcyk7CisgICAgaWYgKCFtX2lzTmV1dGVyYWJsZSkKKyAg
ICAgICAgbV9idWZmZXItPnVucGluKCk7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQogewot
ICAgIG1fYnVmZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOworICAgIGlmIChmbGFnID09
IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05ldXRlcmFi
bGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAgZWxzZQor
ICAgICAgICBtX2J1ZmZlci0+cGluKCk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJ
KHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEFycmF5
QnVmZmVyVmlld19oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCisjaW5jbHVkZSAiVHlw
ZWRBcnJheVR5cGUiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNyw0NCArMzcsNDMgQEAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJh
eUJ1ZmZlclZpZXc+IHsKLXB1YmxpYzoKLSAgICBlbnVtIFZpZXdUeXBlIHsKLSAgICAgICAgVHlw
ZUludDgsCi0gICAgICAgIFR5cGVVaW50OCwKLSAgICAgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKLSAg
ICAgICAgVHlwZUludDE2LAotICAgICAgICBUeXBlVWludDE2LAotICAgICAgICBUeXBlSW50MzIs
Ci0gICAgICAgIFR5cGVVaW50MzIsCi0gICAgICAgIFR5cGVGbG9hdDMyLAotICAgICAgICBUeXBl
RmxvYXQ2NCwKLSAgICAgICAgVHlwZURhdGFWaWV3Ci0gICAgfTsKLSAgICB2aXJ0dWFsIFZpZXdU
eXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIFR5cGVkQXJy
YXlUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJl
ZCgpOworICAgIH0KKyAgICAKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFk
ZHJlc3MoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNl
dDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7
CiAKLSAgICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0g
ZmxhZzsgfQorICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAgIGJvb2wgaXNO
ZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJvdGVjdGVkOgor
ICBwcm90ZWN0ZWQ6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CiAKICAgICBpbmxpbmUg
Ym9vbCBzZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwpAQCAt
ODMsMTQgKzgyLDE3IEBAIHByb3RlY3RlZDoKIAogICAgIGlubGluZSBib29sIHplcm9SYW5nZUlt
cGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7CiAKLSAgICBz
dGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50
IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVu
Z3RoKTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGlu
dCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3Ro
KTsKIAogICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBh
biBBcnJheUJ1ZmZlciBpcwogICAgIC8vIHdpdGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRz
KQorICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
KQogICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgIGlmIChpc05ldXRlcmVkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChzaXplb2YoVCkgPiAxICYm
IGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
MDUsNyArMTA3LDEwIEBAIHByb3RlY3RlZDoKICAgICAvLyBJbnB1dCBvZmZzZXQgaXMgaW4gbnVt
YmVyIG9mIGVsZW1lbnRzIGZyb20gdGhpcyBhcnJheSdzIHZpZXc7CiAgICAgLy8gb3V0cHV0IG9m
ZnNldCBpcyBpbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgdW5kZXJseWluZyBidWZmZXIncyB2
aWV3LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zm
c2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBhcnJheUJ5dGVPZmZzZXQsIHVuc2lnbmVkICpvZmZzZXQsIHVuc2lnbmVkICpudW1FbGVtZW50
cykKKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCiAgICAgewogICAg
ICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVPZmZzZXQpIC8g
c2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewpAQCAtMTE5LDE5
ICsxMjQsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihy
ZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRk
cmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4K
ICAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDog
MzE7CiAgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CiAKLXByaXZhdGU6CisgIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
bV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVm
ZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBs
KEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyAr
MTc3LDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUltcGwodW5zaQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5k
TGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCog
b2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0
ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCArPSBhcnJheVNpemU7CkBAIC0xOTYsNiArMTk4LDQgQEAgdm9pZCBBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotdXNpbmcg
SlNDOjpBcnJheUJ1ZmZlclZpZXc7Ci0KICNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGFz
aEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxlOwogCiBz
dHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTYsNiArOTcsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxl
IHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9u
UHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7
CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5l
IENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOSw2ICsxNDYsOCBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpz
bG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJy
YXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkocmV2
aXNpb24gMTUzNzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5j
cHA6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1bmlvbiBWYWx1ZSB7Cisg
ICAgVCBkYXRhOworICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKK307CisKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5
QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhfdCkpOworICAgIGlmICghYnVmZmVy
LmdldCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwg
bGVuZ3RoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpCit7CisgICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7CisgICAgQ2hlY2tlZDx1aW50
MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tl
ZExlbmd0aDsKKyAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1h
eC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0
ZUxlbmd0aCkpOworfQorCitEYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorICAg
IDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAsIG1fYnl0ZUxlbmd0
aChieXRlTGVuZ3RoKQoreworfQorCitzdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBs
aXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVu
ZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5s
aW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCit7CisgICAgY2hhciB0ZW1wID0g
KnA7CisgICAgKnAgPSAqcTsKKyAgICAqcSA9IHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBC
eXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQoreworICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Cit9CisK
K3N0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQoreworICAgIHN3YXBCeXRl
cyhwLCBwICsgMyk7CisgICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Cit9CisKK3N0YXRpYyB2
b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQoreworICAgIHN3YXBCeXRlcyhwLCBwICsg
Nyk7CisgICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7CisgICAgc3dhcEJ5dGVzKHAgKyAyLCBw
ICsgNSk7CisgICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGZs
aXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRp
YW4pCit7CisgICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3dpdGNoIChzaXplKSB7CisgICAgY2FzZSAxOgorICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGZsaXBC
eXRlc0ZvcjE2Qml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAg
ICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4
OgorICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBEYXRhVmlldzo6Z2V0RGF0YSh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0Cit7CisgICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7CisgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8v
IFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQg
Y2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5h
bGlnbmVkIGxvYWRzLgorICAgIFZhbHVlPFQ+IHZhbHVlOworICAgIG1lbWNweSh2YWx1ZS5ieXRl
cywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwg
c2l6ZW9mKFQpKTsKKyAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQp
LCBsaXR0bGVFbmRpYW4pOworICAgIHJldHVybiB2YWx1ZS5kYXRhOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBU
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYg
KGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBz
dG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBv
biBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgorICAg
IFZhbHVlPFQ+IHRlbXBWYWx1ZTsKKyAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOworICAgIGZs
aXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4p
OworICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zm
c2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Cit9CisKK2ludDhfdCBEYXRhVmlldzo6
Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBy
ZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Cit9CisKK3VpbnQ4
X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBl
Yyk7Cit9CisKK2ludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordWludDE2
X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+
KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCitpbnQzMl90IERhdGFWaWV3Ojpn
ZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0
dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVj
KTsKK30KKworZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXRE
YXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKworZG91YmxlIERh
dGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOworfQorCit2
b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlh
biwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMp
OworfQorCit2b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9
CisKK3ZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCit7CisgICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoKTsKKyAgICBtX2J5dGVMZW5ndGggPSAwOworfQorCit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwzOSArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFWaWV3LmgiCiAKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQp
XTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERhdGFWaWV3
PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhf
dCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVmlldz4g
RGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQg
PiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ2hlY2tlZDx1
aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7Ci0gICAg
Q2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0
aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBj
aGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVy
Zmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQorbmFtZXNwYWNlIEpTQyB7CiAKIERh
dGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiAgICAgOiBBcnJheUJ1ZmZlclZpZXco
YnVmZmVyLCBieXRlT2Zmc2V0KQpAQCAtNjYsMTc5ICszNCwxMSBAQCBEYXRhVmlldzo6RGF0YVZp
ZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlCiB7CiB9CiAKLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBC
eXRlcyhib29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1
cm4gbGl0dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRp
ZgotfQotCi1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBj
aGFyIHRlbXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAg
KyAxKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0g
ICAgc3dhcEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0K
LQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5
dGVzKHAsIHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0
ZXMocCArIDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3Rh
dGljIHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29s
IGxpdHRsZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4p
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0g
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAg
ICAgICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA0OgotICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3
OjpnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkp
IHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5j
ZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qg
c3VwcG9ydCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5
KHZhbHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBi
eXRlT2Zmc2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVz
LCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEg
YnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBz
dG9yZXMuCi0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFs
dWU7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxp
dHRsZUVuZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNz
KSArIGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90
IERhdGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsK
LX0KLQotdWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXVpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBn
ZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotaW50
MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+
KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MzJfdCBEYXRhVmlldzo6
Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWZsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICByZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7
Ci19Ci0KLWRvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8ZG91YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRh
Vmlldzo6c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFs
c2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50
OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZz
ZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CiAKLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17
Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oOjE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIERhdGFWaWV3X2gKKyNkZWZpbmUgRGF0YVZpZXdfaAorCisjaW5jbHVkZSA8cnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNz
IERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDE2X3QgZ2V0
VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIHVpbnQxNl90IGdldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBp
bnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFs
c2UsIGVjKTsgfQorICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGZsb2F0IGdldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0
MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBk
b3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZG91Ymxl
IGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBz
ZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0
ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9IAorICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Cisg
ICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRG
bG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRGbG9h
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworCisgICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBUeXBlRGF0YVZpZXc7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIG5ldXRlcigpOworCitwcml2YXRlOgorICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWdu
ZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGgg
fHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB1bnNpZ25lZCBtX2J5dGVM
ZW5ndGg7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERhdGFW
aWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDc2ICsyNiwzMyBAQAogI2lmbmRlZiBEYXRhVmlld19oCiAjZGVmaW5lIERh
dGFWaWV3X2gKIAotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90
ZWN0ZWQ6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICAKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxl
bmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGlu
dCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50
MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDE2X3Qg
Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsg
fQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxvYXQgZ2V0
RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
Z2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAg
ICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDgodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAg
ICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVp
bnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lk
IHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5
dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlw
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OwogICAgIH0KIAot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogcHJpdmF0ZToKLSAgICBE
YXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSBib29sIGJleW9uZFJhbmdlKHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5
dGVPZmZzZXQgPj0gbV9ieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5
dGVMZW5ndGg7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotCiAgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogfTsKIAotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNCw4NCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgRmxvYXQzMkFycmF5X2gKLSNkZWZpbmUgRmxvYXQzMkFycmF5X2gKKyNpZm5kZWYgIkZs
b2F0MzJBcnJheV9oIgorI2RlZmluZSAiRmxvYXQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBl
ZEFycmF5QmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBGbG9hdDMyQXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8Rmxv
YXQzMkFycmF5PiBjcmVhdGUoY29uc3QgZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJl
IGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0
cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxmbG9hdD46OnNldDsK
LQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoaW5kZXggPj0gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjptX2xlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpkYXRhKClbaW5k
ZXhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5s
aW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5l
IEZsb2F0MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OwotfTsK
LQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8Rmxv
YXQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQz
MkFycmF5OjpjcmVhdGUoY29uc3QgZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4oYXJy
YXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6
OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
OjpjcmVhdGU8RmxvYXQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQzMkFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDMy
QXJyYXk6OkZsb2F0MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGZs
b2F0PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9h
dDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0
MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxGbG9hdDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpGbG9hdDMyQXJyYXk7CisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEZsb2F0MzJBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMSw5OCArMTAsMjMgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEZsb2F0NjRBcnJheV9oCi0j
ZGVmaW5lIEZsb2F0NjRBcnJheV9oCisjaWZuZGVmICJGbG9hdDY0QXJyYXlfaCIKKyNkZWZpbmUg
IkZsb2F0NjRBcnJheV9oIgogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQ2NEFy
cmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4gewotcHVibGljOgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShjb25z
dCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5
IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVk
LiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2Ny
aXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICB1c2luZyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNp
Z25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5
cGVkQXJyYXlCYXNlPGRvdWJsZT46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZs
b2F0NjRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlw
ZUZsb2F0NjQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDY0QXJyYXkoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT47Ci19OwotCi1QYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5
PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5Ojpj
cmVhdGUoY29uc3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihhcnJheSwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVh
dGU8RmxvYXQ2NEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVh
dGVVbmluaXRpYWxpemVkPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQ2NEFycmF5
OjpGbG9hdDY0QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxkb3VibGU+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0NjRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0NjRBcnJheTsKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNp
bmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVy
aWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgor
ICAgIEdlbmVyaWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3Jl
YXRlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUmIGRh
dGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJl
c3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0SW1w
bChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBzZXRSYW5nZShjb25zdCBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxl
bmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1w
bCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAg
ICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgb2Zmc2V0ICogc2l6
ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5z
aWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9S
YW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2Yo
QWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAg
IHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXpl
b2YoQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+
bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4
IDwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICBkYXRh
KClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0
CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAg
ICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3Mg
PD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYg
b2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
UGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6
VHlwZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
Y3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3Vs
dCA9IGNyZWF0ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxl
bmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1
ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlKGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmlj
VHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAg
ICAgICAgQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRh
cHRvcjo6VHlwZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRB
cnJheVZpZXc6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3ViYXJy
YXkoc3RhcnQsIGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc6OnN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQs
IGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbGVuZ3Ro
KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRh
cHRvcjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVy
LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyVmlldzsKIGNsYXNzIEJ1dHRlcmZseTsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1
LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVu
Z3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBh
dXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAg
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsg
fQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyByZXR1cm4g
dS50eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGlu
Z0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0x
MTcsNiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5n
dGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlw
ZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNs
eSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZl
Y3Rvckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdl
LiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhl
IHR5cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5
OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDhBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsODAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIEludDhBcnJheV9oCi0jZGVmaW5lIEludDhBcnJheV9oCisjaWZu
ZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkludDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50
ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlC
dWZmZXI7Ci0KLWNsYXNzIEludDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PGludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJy
YXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQ4QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJl
IGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0
cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0g
ICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAg
aW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUeXBlSW50ODsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIElu
dDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OwotfTsKLQot
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4o
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKGNv
bnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50
OEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQ4QXJyYXk+
KGxlbmd0aCk7Ci19Ci0KLUludDhBcnJheTo6SW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQg
c3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwg
aW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDhBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDhBcnJh
eTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gSW50OEFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgpAQCAtMjMsODAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIEludDE2QXJyYXlfaAotI2RlZmluZSBJbnQxNkFycmF5X2gKKyNpZm5kZWYgIkludDE2QXJy
YXlfaCIKKyNkZWZpbmUgIkludDE2QXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1j
bGFzcyBJbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gY3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJh
eSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGly
ZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAg
dXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5l
IFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUeXBlSW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJ
bnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1
cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsK
LQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6
Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRl
PEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQ8SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJh
eShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4g
SW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXlJbXBsPEludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQxNkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgi
CiAKICNlbmRpZiAvLyBJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludDMyQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAog
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3NyArMjMsMTAgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSW50MzJBcnJheV9oCi0jZGVmaW5lIElu
dDMyQXJyYXlfaAorI2lmbmRlZiAiSW50MzJBcnJheV9oIgorI2RlZmluZSAiSW50MzJBcnJheV9o
IgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgSW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGlu
dD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50
MzJBcnJheT4gY3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5
IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJl
Y3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotICAgIHVzaW5n
IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBUeXBlSW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQzMkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgot
ICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ+OwotfTsKLQotUGFzc1JlZlB0cjxJ
bnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgaW50KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+
OjpjcmVhdGU8SW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LUludDMyQXJyYXk6OkludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlPGludD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAot
ewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRy
PEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQzMkFycmF5OworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBJbnQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNiArMTMxLDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpCiAgICAgeworICAgICAgICAvLyBG
SVhNRTogaG1tLCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHByZXR0eSBhd2Vzb21lIHRvIGdl
dCBzX2luZm8KKyAgICAgICAgLy8gdG8gYmUgYSBzdGF0aWMuIE5vdCBzdXJlIGlmIHRoYXQgd29y
a3MuCiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywg
aW5kZXhpbmdUeXBlKTsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNf
aW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1
ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChh
cnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhl
YXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVh
cCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICBy
ZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1
Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAg
IE5vbkFycmF5KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVm
ZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
IHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3Qt
PmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6cHV0
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxs
KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAi
QXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHku
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWNUKiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5l
IHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXIq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgSlNBcnJheUJ1ZmZlciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4pOworICAgIAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29udHMgeyBy
ZXR1cm4gbV9pbXBsOyB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiwgRXhlY1NUYXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisK
K3ByaXZhdGU6CisgICAgQXJyYXlCdWZmZXIqIG1faW1wbDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
c19pbmZvID0geworICAgICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IpCit9OworCitKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lk
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5
QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sICJBcnJheUJ1ZmZlciIpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSk7Cit9CisKK0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisg
ICAgICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90
b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitT
dHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCku
dG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAg
SlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBl
eGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0
dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorewor
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7
CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
K3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsK
KyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBK
U0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERh
dGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24q
IGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIq
PihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2Yg
c2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIuIikpOworICAgIAorICAgIGlmICghZXhlYy0+
YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIp
KTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgp
OworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09iamVjdC0+
aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxl
ZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCk7CisgICAgCisgICAgSlNB
cnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2lu
Zm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyUHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1
ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgRG9udEVudW0sIDIp
OworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0FycmF5QnVmZmVyUHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisK
K3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5
cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8gPSB7
CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpOworfTsKKworSlNBcnJheUJ1ZmZlclZpZXc6OkNv
bnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwK
KyAgICBJbml0aWFsaXphdGlvbk1vZGUgbW9kZSkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAg
LCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX2J1dHRlcmZseSgwKQoreworICAgIGlmIChsZW5n
dGggPD0gZmFzdFNpemVMaW1pdCkgeworICAgICAgICAvLyBBdHRlbXB0IEdDIGFsbG9jYXRpb24u
CisgICAgICAgIHZvaWQqIHRlbXA7CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0
aCwgZWxlbWVudFNpemUpOworICAgICAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdl
KDAsIHNpemUsICZ0ZW1wKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3N0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgbV92ZWN0b3IgPSB0ZW1wOworICAgICAgICBtX21v
ZGUgPSBGYXN0VHlwZWRBcnJheTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlm
IChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgICAgICB1aW50NjRfdCogYXNXb3JkcyA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Kj4obV92ZWN0b3IpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc2l6ZSAvIHNpemVvZih1aW50NjRfdCk7IGktLTspCisgICAgICAgICAgICAgICAgYXNX
b3Jkc1tpXSA9IDA7CisgICAgICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGFsbG93IGEgdHlw
ZWQgYXJyYXkgdG8gdXNlIG1vcmUgdGhhbiA0R0IgbGVzcyBhIGZldyBieXRlcy4KKyAgICBpZiAo
bGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFVJTlRfTUFYIC0gV2FzdGVmdWxUeXBlZEFy
cmF5KSAvIGVsZW1lbnRTaXplKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1vZGUg
PT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGxlbmd0aCwgZWxlbWVu
dFNpemUpLmdldFZhbHVlKG1fdmVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoIXRyeU1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFs
dWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBl
bGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9t
b2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3Ry
dWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZSgw
KQorICAgICwgbV92ZWN0b3Ioc3RhdGljX2Nhc3Q8dWludDhfdCo+KGFycmF5QnVmZmVyLT5kYXRh
KCkpICsgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fbW9kZShX
YXN0ZWZ1bFR5cGVkQXJyYXkpCit7CisgICAgSW5kZXhpbmdIZWFkZXIgaW5kZXhpbmdIZWFkZXI7
CisgICAgaW5kZXhpbmdIZWFkZXIuc2V0QXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIuZ2V0KCkpOwor
ICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGUodm0sIDAsIDAsIDAsIHRydWUsIGlu
ZGV4aW5nSGVhZGVyLCAwKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJW
aWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0s
IGNvbnRleHQuc3RydWN0dXJlKCksIGNvbnRleHQuYnV0dGVyZmx5KCkpCisgICAgLCBtX3ZlY3Rv
cihjb250ZXh0LnZlY3RvcigpKQorICAgICwgbV9sZW5ndGgoY29udGV4dC5sZW5ndGgoKSkKKyAg
ICAsIG1fbW9kZShjb250ZXh0Lm1vZGUoKSkKK3sKKyAgICBjb250ZXh0LmRpc293bigpOworfQor
Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2Fz
ZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3ZlcnNpemVUeXBl
ZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgdm0u
aGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFy
cmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUoCisgICAgICAgICAgICBleGVjLT52bSgpLnR5cGVkQXJyYXlDb250cm9sbGVyLT50b0pTKAor
ICAgICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aGlzT2Jq
ZWN0LT5idWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLnR5cGVkQXJyYXlDb250cm9sbGVy
LT50b0pTKAorICAgICAgICAgICAgICAgIGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCB0aGlzT2JqZWN0LT5idWZmZXIoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNsb3Qu
aXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIHJlYWQtb25seSB0eXBlZCBh
cnJheSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNl
OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRo
cm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5
LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9v
bCBKU0FycmF5QnVmZmVyVmlldzo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJh
eUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxs
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpk
ZWxldGVQcm9wZXJ0eShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJy
YXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBsZW5ndGgv
Ynl0ZU9mZnNldC9ieXRlTGVuZ3RoIGFyZSBEb250RW51bSwgYXQgbGVhc3QgaW4gRmlyZWZveC4K
KyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7CisgICAgICAgIGFy
cmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCk7CisgICAgICAgIGFycmF5
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2Rl
KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKiBjZWxsKQor
eworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6
ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7
CisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpCisgICAg
ICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3X2gKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGlzIGNsYXNzIHNlcnZl
cyB0d28gcHVycG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlkZXMgdGhvc2UgcGFydHMgb2YgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBlbmQKKy8vICAgIG9uIHRlbXBsYXRl
IHBhcmFtZXRlcnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50cyB0aGUgRE9NL1dlYkNvcmUtdmlz
aWJsZSAiSlNBcnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNoCisvLyAgICBDKysgY29kZSB1c2Vz
IHdoZW4gaXQgd2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3IG9mIGFuIGFycmF5IGJ1ZmZlcgor
Ly8gICAgd2l0aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZpZXcuCisv
LworLy8gVGhlc2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuICgxKSBpcyBqdXN0IGEg
bWF0dGVyIG9mIG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5kIGxpbmsgdGltZXMgYnkgaGF2aW5n
IGFzIG11Y2ggY29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBub3QKKy8vIGJlIHN1YmplY3QgdG8g
dGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxtb3N0KiBhIG1hdHRlciBvZgorLy8g
c2VtYW50aWNzOyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3QgaXQgaXMgYSBtYXR0ZXIgb2Ygb2Jl
eWluZyBhIGNvbnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0aCBXZWJDb3JlIHJpZ2h0IG5vdy4K
Ky8vCisvLyBPbmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNhdmVzIHVzIGZyb20gdG9vIG11Y2gg
Y3JhenkgaXMgdGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBpbnN0YW50aWFibGUsIGRl
c3BpdGUgaGF2aW5nIGEgImNvbnN0cnVjdG9yIiBhbmQgYQorLy8gcHJvdG90eXBlLgorCisvLyBU
eXBlZCBhcnJheSB2aWV3cyBoYXZlIGRpZmZlcmVudCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJp
ZyB0aGV5IGFyZSBhbmQKKy8vIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhh
dCByZXF1aXJlcyBhIHNlcGFyYXRlIGJhY2tpbmcKKy8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNp
ZmllZCBuZXV0ZXJpbmcgY2FwYWJpbGl0aWVzLgorZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAg
Ly8gU21hbGwgYW5kIGZhc3QgdHlwZWQgYXJyYXkuIEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBh
IHZlY3RvcgorICAgIC8vIGFsbG9jYXRlZCBpbiBjb3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5
cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcworICAgIC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkg
dGhlIHZpZXcncyBsaXZlbmVzcy4KKyAgICBGYXN0VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBB
IGxhcmdlIHR5cGVkIGFycmF5IHRoYXQgc3RpbGwgYXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBt
dWNoCisgICAgLy8gbWVtb3J5LiBCIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0
aGF0IGNvdWxkIGhvbGQgYQorICAgIC8vIGJ1ZmZlciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZl
Y3RvciBhbGxvY2F0ZWQgdXNpbmcgZmFzdENhbGxvYygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNp
emVUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAg
IC8vIHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXpl
ciB0byBkZWxldGUgVi4KKyAgICBPdmVyc2l6ZVR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0
eXBlZCBhcnJheSB0aGF0IHdhcyB1c2VkIGluIHNvbWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdI
ZWFkZXIKKyAgICAvLyBpcyBoaWphY2tlZCB0byBjb250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBu
YXRpdmUgYXJyYXkgYnVmZmVyLiBUaGUKKyAgICAvLyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBw
b2ludHMgYmFjayB0byB0aGUgSlMgdmlldy4gViBwb2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBh
bGxvY2F0ZWQgdXNpbmcgd2hvLWtub3dzLXdoYXQsIGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5
LgorICAgIC8vIFRoZSB2aWV3IGRvZXMgbm90IG93biB0aGUgdmVjdG9yLgorICAgIFdhc3RlZnVs
VHlwZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2ViQ29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZp
ZXcsIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZm
ZXJWaWV3IGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdh
c3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRl
cmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2
aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MK
Ky8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3
ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxp
bWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5n
dGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGgg
KiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAg
JiB+c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBjbGFz
cyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29u
c3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBJ
bml0aWFsaXphdGlvbk1vZGUgeyBaZXJvRmlsbCwgRG9udEluaXRpYWxpemUgfTsKKyAgICAgICAg
CisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBs
ZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLCBJbml0aWFsaXphdGlvbk1vZGUgPSBaZXJvRmls
bCk7CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgICAgICAgICAg
Vk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAgICAgICAgICAgIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICB+
Q29uc3RydWN0aW9uQ29udGV4dCgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhc3RydWN0dXJlOyB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgICAgIHZv
aWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgICAgIHVpbnQzMl90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFR5cGVkQXJyYXlN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICB2b2lkKiBt
X3ZlY3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlN
b2RlIG1fbW9kZTsKKyAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICB9OworICAg
IAorICAgIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU1RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0
ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciwgbmF0aXZlIHZpZXcsIGFuZCBKUyBidWZmZXI7
IGFsc28KKyAgICAvLyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYgbmVjZXNzYXJ5
LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgCisg
ICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2b2lkKiB2ZWN0b3IoKSB7
IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3Rh
dGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
QXJyYXlCdWZmZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBt
X2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworCisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAg
VHlwZWRBcnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3
SW5saW5lc19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQg
SlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpCit7
CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIG1ldGhvZFRh
YmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7Cit9CisKK2lubGluZSBBcnJheUJ1
ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhp
bmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhv
ZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIHsKKyAgICAgICAgQVNTRVJUKG1fbW9k
ZSA9PSBGYXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBkZWx0YSA9CisgICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3RvcikgLSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihyZXN1bHQpID09IGRlbHRhKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIzLDQgKzIyMywxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJy
YXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3Iiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisK
K0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250
ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyogSlNEYXRh
Vmlldzo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
cGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx1
aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7CisgICAgICAgIHRocm93
Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUg
b2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0
dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBKU0RhdGFWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkgSlNEYXRhVmlldyh2bSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
SlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVy
ZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJl
dHVybiAwOworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAg
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1i
ZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNl
bGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNP
YmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNEYXRh
Vmlldzo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0KQoreworICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7Cisg
ICAgcmV0dXJuIERhdGFWaWV3OjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigp
LCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZp
ZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3IDogcHVibGljIEpTQXJy
YXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJh
c2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gMTsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAg
IAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoCisgICAgICAgIFZNJiwg
U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhv
ZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRv
CisgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3
aGVyZS4KKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0
cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVEYXRhVmlldzsK
KworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93
bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMg
SlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0
b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1By
b3RvdHlwZTo6c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2lu
Zm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRGF0YVZpZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90
b3R5cGUubHV0LmgKK0BiZWdpbiBkYXRhVGFibGUKKyAgZ2V0SW50OCAgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4ICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQxNiAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDMyICAgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQz
MiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMiAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY0dldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4ICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2ICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MTYgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQzMiAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBzZXRGbG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQ2NCAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCitAZW5kCisqLworCitKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK0pTRGF0YVZpZXdQcm90b3R5cGUqIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTRGF0YVZp
ZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTRGF0YVZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0RhdGFWaWV3UHJv
dG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNEYXRhVmlld1Byb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1By
b3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAgIGV4
ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PERhdGFWaWV3UHJvdG90
eXBlKj4oY2VsbCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNE
YXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6
ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PERhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwK
KyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmll
dyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNl
dCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgw
KS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBs
aXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKEFkYXB0b3I6OlR5cGUpID4gMSAm
JiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBl
eGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmll
bmQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5n
dGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBBZGFwdG9yOjpUeXBl
IHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYg
KG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZh
bHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNE
YXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhv
ZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFu
ZCB2YWx1ZSkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAg
QWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRp
YW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1
bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmllbmQoKSk7Cisg
ICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJP
dXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZM
aXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFs
dWUpOworICAgIAorICAgICpyZWludGVycHJldF9jYXN0PEFkYXB0b3I6OlR5cGUqPihzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpID0gdmFsdWU7
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJ
bnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRh
PEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0
VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MTZBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBn
ZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9h
dDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRhcHRv
cj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERh
dGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1Nl
dFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50OEFkYXB0
b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNl
dERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMy
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERh
dGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rh
dGFWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZp
ZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90
eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90
b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiAiSlNGbG9hdDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxv
YXQ2NEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJh
eV9oIgorI2RlZmluZSAiSlNGbG9hdDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJy
YXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMg
c2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5l
dyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRz
OgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0
dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8v
ICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZp
ZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTog
TWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQg
YnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9u
ZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQg
YXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3Bp
ZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5n
cyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBz
aW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9p
bnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwg
aXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlw
ZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFu
IEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3Mg
Y29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkg
dXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAg
ICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBl
OworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMg
aW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShK
U1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0
YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5
QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNl
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZihBZGFwdG9y
OjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhW
TSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRp
YWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRl
TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSk7
IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgs
IHNpemVvZihBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBl
KiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6VHlw
ZSogdHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0
b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
bWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAg
Ly8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5H
ZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9s
ZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisg
ICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBBZGFw
dG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0
b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91Ymxl
KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0
SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUg
Z2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRv
cjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRh
cHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOwor
ICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBp
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVW
YWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNl
dEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBBZGFwdG9yOjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUo
ZXhlYywgdmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUo
dmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5T
ZXRRdWlja2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVu
Z3RoIDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAg
ICAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlr
ZSBjYW5TZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhy
b3cgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVT
ZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0
IHdpbGwgdGhyb3cgb24gZXJyb3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgor
ICAgIGJvb2wgc2V0V2l0aFNwZWNpZmljVHlwZShFeGVjU3RhdGUqLCBPdGhlclR5cGUqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaWYgaXQgcmV0dXJucyBmYWxzZQor
ICAgIC8vIHRoZW4gaXQgd2lsbCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgYm9vbCBz
ZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5vbkFy
cmF5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRB
cnJheVN0b3JhZ2VUeXBlID0gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIAorcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwg
Q29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9u
IG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8g
bmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAu
CisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5
SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9o
CisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVk
ZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVy
bmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNW
YWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUg
Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Jf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1l
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvciogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJv
dG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUq
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFy
cmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQu
IikpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUoCisgICAgICAgICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7Cisg
ICAgCisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0
KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGgg
bWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6
ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZz
ZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwg
YnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNz
OjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlC
dWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5
dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6Cisg
ICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0
IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFy
cmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlm
IChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3Vt
ZW50KDApKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0
LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmll
d0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0o
KSwgc3RydWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAg
aW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxl
bmd0aCA8IDApCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUs
IGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RU
eXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29u
c3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAg
IGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDYWxsRGF0YSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygK
KyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZt
LCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUo
CisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVj
dCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgdm0s
IHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSksIENvbnN0cnVjdGlvbkNv
bnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2Jq
ZWN0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRl
KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7Cisg
ICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAg
ICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0
aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFk
YXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBz
dHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7Cisg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250
ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8
QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmpl
Y3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNh
bkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJU
eXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8g
SGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGgg
Y291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQn
bGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZl
Y3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGlu
ZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBm
b29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3Jz
dCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBn
ZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmls
aXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAg
ICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgp
IHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCB0aHJvd1JhbmdlRXJyb3IoZXhlYywgIkxlbmd0
aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBp
LS07KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4
UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDbGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFzc0lu
Zm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBl
VmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVt
Y3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4ob2JqZWN0KTsK
KyAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSgKKyAg
ICAgICAgICAgIHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3RvcigpLAor
ICAgICAgICAgICAgb3RoZXItPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRX
aXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNl
dCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNU
eXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNh
c2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50
ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWlu
dDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgor
ICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENs
YW1wZWRBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJh
eSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1
cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVj
dCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdp
dGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zm
c2V0KTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNp
ZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOwor
ICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAg
ICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1
dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9m
ZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVu
Z3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4
UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShnZXRJbmRleFF1aWNrbHko
aW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlz
T2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFk
YXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdl
dEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KGdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAg
IC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRvIHN0b3JlIHRv
IHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUuIEkg
d2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1h
dGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0
dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGll
cyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMu
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisg
ICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGlu
ZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0
ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAg
ICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZS5Ob3RBbkluZGV4KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlf
SU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6
OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICgh
Y2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAg
IAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJv
d2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
Ym9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAg
ICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisg
ICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
Pgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyAr
K2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpu
dW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBj
YXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmpl
Y3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmpl
Y3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwgQ29w
eVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KG9iamVjdCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAm
JiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAg
ICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9p
ZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVT
aXplKCkpOworICAgICAgICBtZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3Qt
PmJ5dGVTaXplKCkpOworICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsK
KyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CisgICAgfQorICAgIAorICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwg
dmlzaXRvciwgdG9rZW4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShK
U1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwor
ICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJl
IGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNz
IHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUK
KyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEg
R0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVu
b3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisg
ICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVy
IGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50
ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAg
Ly8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBo
ZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29y
c3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJy
YXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24g
YW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3Rw
cmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVw
LiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVj
aywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0
aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFw
OjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7
CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKwor
ICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogdGhpcyBzaG91bGQgcmVjb3JkLCBpbiB0aGUgYnV0dGVyZmx5LCB3aGF0IG91ciBvZmZz
ZXQgaXMuCisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJh
eQorICAgICAgICAmJiAhbV9idXR0ZXJmbHkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSB7CisgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBh
bGwgcG9zc2libGUuCisgICAgICAgIG1fYnV0dGVyZmx5ID0gc3RhdGljX2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPihtX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
YnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAg
ICAgbV9idXR0ZXJmbHksIGhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHN0cnVjdHVyZSgpLAorICAg
ICAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsK
KyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0
Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAg
ICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRo
aXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5n
IHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAg
Ly8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0
aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisg
ICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1f
dmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJ1dHRlcmZseSgp
LT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0
aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0KQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gQWRhcHRvcjo6Vmlld1R5cGU6
OmNyZWF0ZSgKKyAgICAgICAgdGhpc09iamVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVP
ZmZzZXQoKSwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlIDogcHVi
bGljIEpTT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFz
ZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCitwdWJsaWM6
CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
KyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nh
c3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAgIGlm
ICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50
LiIpKTsKKyAgICAKKyAgICBKU09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpT
T2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmICghc291cmNlQXJyYXkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJz
dCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBv
ZmZzZXQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIG9m
ZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBvZmZzZXQgPSAwOworICAgIAorICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAKKyAgICB0aGlzT2JqZWN0LT5zZXQoZXhlYywgc291cmNlQXJyYXksIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFycmF5KEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNh
bGxlZSgpKTsKKyAgICAKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJS
ZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5h
cmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAg
ICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRlciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRp
ZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhpc0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0
aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGgg
LSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAgICAgYmVnaW4gPSB0aGlzTGVuZ3RoIC0gYmVn
aW47CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9IHRoaXNMZW5ndGggLSBlbmQ7Cisg
ICAgCisgICAgLy8gQ2xhbXAgdGhlIGluZGljZXMgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXku
CisgICAgQVNTRVJUKGJlZ2luID49IDApOworICAgIEFTU0VSVChlbmQgPj0gMCk7CisgICAgYmVn
aW4gPSBzdGQ6Om1pbihiZWdpbiwgdGhpc0xlbmd0aCk7CisgICAgZW5kID0gc3RkOjptaW4oZW5k
LCB0aGlzTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDbGFtcCBlbmQgdG8gYmVnaW4uCisgICAgZW5k
ID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisgICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7
CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZW5k
IC0gYmVnaW47CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRo
aXNPYmplY3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA9PSB0aGlzT2Jq
ZWN0LT5sZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAg
ICBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6
VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZp
ZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGFycmF5QnVm
ZmVyLAorICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkgKyBvZmZzZXQgKiBWaWV3Q2xh
c3M6OmVsZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXpl
KTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykp
OworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmlld0NsYXNzPiwgRG9udEVudW0sIDIp
OworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+
OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KHZtLmhlYXAp
KQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJl
KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90
eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZSgK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
ICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDMwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
dm0oKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxG
dW5jUHJvdG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNz
b3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nl
c3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3Ry
dWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+
dm0oKSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlSW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpT
VWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
VWludDhDbGFtcGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xh
bXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OENsYW1wZWRBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0u
cHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpj
cmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MzJB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQz
MildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBK
U0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXdQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgCisgICAgbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlCdWZm
ZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0u
cHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNild
LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNild
LnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIp
XS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4
KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4
KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50
OENsYW1wZWQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVk
QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU1VpbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNVaW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSkp
OworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3Rv
dHlwZS5nZXQoKSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNO
dWxsKCkpKTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgp
KSk7CkBAIC0zMTgsNiArMzQyLDI2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFs
dWUgcHJvdG8KIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywg
SlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9iamVjdDo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAgCisgICAgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0gSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJyYXk8
SlNPYmplY3QqLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBK
U0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQ4QXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUu
Z2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgo
VHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCks
IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
SW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZShleGVjLT52bSgpLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50MzJBcnJheSIp
OworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgpXSA9IEpTVWlu
dDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OEFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5n
ZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGUoZXhlYy0+dm0oKSwgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWlu
dDhDbGFtcGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlw
ZVVpbnQxNildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwg
SlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
VWludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMy
QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIp
XSA9IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0
MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQz
MildLnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2
NEFycmF5Iik7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkFycmF5QnVm
ZmVyLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5
cGVkQXJyYXlJbmRleC0tOykgeworICAgICAgICBtX3R5cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRl
eF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlw
ZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0t
Pm5hbWUoZXhlYyksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9u
dEVudW0pOworICAgIH0KIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10g
PSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTmFO
LCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJKU0FycmF5Lmgi
CiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5o
IgpAQCAtMTY2LDYgKzE2OCwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9z
dHJpbmdPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbnRl
cm5hbEZ1bmN0aW9uU3RydWN0dXJlOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVm
ZmVyUHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0IFR5cGVk
QXJyYXlEYXRhIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5cGU7Cisg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9OworICAgIAor
ICAgIEZpeGVkQXJyYXk8VHlwZWRBcnJheURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBF
Uz4gbV90eXBlZEFycmF5czsKICAgICAgICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9pbnRlcnNb
U3BlY2lhbDo6VGFibGVTaXplXTsgLy8gU3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRoZSBMTElu
dCBhbmQgSklULgogCkBAIC0zMzAsNiArMzQyLDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUq
IHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBTdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVj
dHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IGFycmF5QnVmZmVyQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyQ29u
c3RydWN0b3IuZ2V0KCk7IH0KKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBhcnJheUJ1ZmZl
clByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCk7
IH0KKyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHlw
ZWRBcnJheVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3RydWN0dXJlLmdldCgpOwor
ICAgIH0KIAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lhbDo6UG9pbnRlciBwb2lu
dGVyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDhBcnJheV9o
IgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFycmF5X2giCisKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2QXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5X2giCisjZGVmaW5lICJK
U0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8v
IEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyJGdW5jdGlvbiIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7
CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitN
QUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtF
X1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKK01BS0Vf
U19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVj
dG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
VHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5PiBKU0ludDhBcnJh
eUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlDb25z
dHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1Vp
bnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVk
QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4gSlNVaW50MzJB
cnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0
NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19J
TkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJv
dG90eXBlOjpzX2luZm8gPSB7I3R5cGUgIlByb3RvdHlwZSIsICZKUyMjdHlwZTo6QmFzZTo6c19p
bmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitN
QUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1Nf
SU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8o
VWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lO
Rk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZP
KEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJy
YXlQcm90b3R5cGVzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50
MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90
eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xh
bXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJv
dG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQz
MkFycmF5PiBKU1VpbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5
PiBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0
eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5Ojpz
X2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZP
KEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9T
X0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVp
bnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtF
X1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJy
YXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAi
VHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNV
aW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2
QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJh
eV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1w
ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJy
YXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhD
bGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Vp
bnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNV
aW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJKU1Vp
bnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1Np
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7
IH0KKworSlNBcnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKiBuYXRpdmUp
Cit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdl
dCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJl
c3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+
bV93cmFwcGVyID0gUGFzc1dlYWsocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNs
dWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2lu
ZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdy
YXBwZXJzIGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNl
cywgYnV0IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMK
Ky8vIGlzIHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBs
aXZlLCB0aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBh
c2sgYW4gQXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAg
IGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhl
IHNhbWUKKy8vICAgb25lLgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1
YmxpYyBUeXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigp
OworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIEFycmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19o
CisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywg
dHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRB
cnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3Ig
eworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmll
d1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGlj
IGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0
YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNO
dW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMy
KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigp
KTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
ZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8CisgICAgdHlwZW5h
bWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcs
CisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEZsb2F0VHlwZWRBcnJh
eUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5
cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7Cisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsK
KyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlw
ZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9E
b3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50
MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7Citz
dHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0
IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFk
YXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMy
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9y
PiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQx
NkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxG
bG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENs
YW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMy
QWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50
OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IEludDE2QWRhcHRvciA6IEludGVncmFsVHlw
ZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50
MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1
Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50
OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0
b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNV
aW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJh
eSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFy
cmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0
MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8
ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9Owor
CitzdHJ1Y3QgVUludDhDbGFtcGVkQWRhcHRvciB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7
CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpT
VWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWlu
dDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25h
bih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
ICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkp
OworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZh
bHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9K
U1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVy
KCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5l
IFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsK
K2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlw
ZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxl
cj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+
VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIq
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5Q29udHJv
bGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlE
ZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotI2RlZmluZSBUeXBlZEFycmF5
RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1l
bnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5
SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAgVHlwZWRBcnJheUludDMyLAotICAgIFR5
cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWludDhDbGFtcGVkLAotICAgIFR5cGVkQXJy
YXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQzMiwK
LSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
IHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0gICAgICAgIDogbV9jbGFzc0luZm8oMCkK
LSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgw
KQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQot
ICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZz
ZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQp
Ci0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwotICAgIHNp
emVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQot
ZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRBcnJheSwKLSAgICBV
bnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1
bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5nCi19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuICZKU0ludDhBcnJheTo6
c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gJkpTVWludDhBcnJh
eTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuICZK
U1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAg
IHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVJbnQzMjoK
KyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50
MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50MzJBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlw
ZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAmSlNGbG9hdDMyQXJyYXk6OnNfaW5mbzsKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gJkpTRmxvYXQ2NEFycmF5OjpzX2luZm87
CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAmSlNEYXRhVmlldzo6c19p
bmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBU
eXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90
VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJOb3RUeXBlZEFycmF5Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDMyOgor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIG91dC5wcmludCgiVHlw
ZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDE2Ogor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVG
bG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRGF0YVZpZXciKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBU
eXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2VudW0gVHlwZWRBcnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisg
ICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAg
VHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50
MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3
Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcK
KworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5lIGJvb2wg
aXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBU
eXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4g
MTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJl
dHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5
cGVkQXJyYXlUeXBlIHR5cGUpOworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2Fz
ZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUlu
dDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2ln
bmVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAg
ICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzQ2xhbXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IFR5cGVVaW50OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpU
eXBlZEFycmF5VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRB
cnJheVR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19o
CisjZGVmaW5lIFR5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWlu
dDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFw
dG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFk
YXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQz
MkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZs
b2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc5ICsyMywxMCBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50OEFycmF5X2gKLSNkZWZpbmUgVWludDhBcnJh
eV9oCisjaWZuZGVmICJVaW50OEFycmF5X2giCisjZGVmaW5lICJVaW50OEFycmF5X2giCiAKLSNp
bmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlz
IGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJl
dHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5n
IGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFz
ZTx1aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhf
dD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0
VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwotICAgIH0KLQot
cHJvdGVjdGVkOgotICAgIGlubGluZSBVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29u
c3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFy
cmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJh
eTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRl
PFVpbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IFVpbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LVVpbnQ4QXJyYXk6OlVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IEludGVncmFsVHlwZWRBcnJh
eUJhc2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAot
ewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpVaW50OEFycmF5OworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShy
ZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENs
YW1wZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMiwxMTIgKzEwLDIzIEBACiAgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQog
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBVaW50OENsYW1wZWRBcnJheV9oCi0jZGVmaW5lIFVpbnQ4Q2xhbXBlZEFycmF5X2gK
KyNpZm5kZWYgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJVaW50OENsYW1wZWRBcnJh
eV9oIgogCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1Ymxp
YyBVaW50OEFycmF5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNl
ZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0g
ICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0
aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gSXQncyBvbmx5IG5lZWRlZCB0byBwb3RlbnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRo
ZSBhcnJheQotICAgIC8vIHdhcyBjcmVhdGVkIHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQg
aW5pdGlhbGl6YXRpb24gcGF0aHMKLSAgICAvLyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Lgot
ICAgIGlubGluZSB2b2lkIHplcm9GaWxsKCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1
aW50OF90Pjo6c2V0OwotICAgIGlubGluZSB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91Ymxl
IHZhbHVlKTsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWlu
dDhDbGFtcGVkOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJy
YXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8
VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZTxVaW50OENsYW1wZWRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFt
cGVkQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6
Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9p
ZCBVaW50OENsYW1wZWRBcnJheTo6emVyb0ZpbGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5n
dGgoKSk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIHZhbHVlKQotewotICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZh
bHVlID0gMDsKLSAgICBlbHNlIGlmICh2YWx1ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7
Ci0gICAgZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7
Ci19Ci0KLVVpbnQ4Q2xhbXBlZEFycmF5OjpVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LTogVWludDhBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0K
LQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PFVpbnQ4Q2xhbXBlZEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLXVzaW5nIEpTQzo6VWludDhDbGFtcGVkQXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMu
aCIKIAogI2VuZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEw
ICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3
OSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDE2QXJyYXlf
aAotI2RlZmluZSBVaW50MTZBcnJheV9oCisjaWZuZGVmICJVaW50MTZBcnJheV9oIgorI2RlZmlu
ZSAiVWludDE2QXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MTZB
cnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNy
ZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBT
aG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxs
IGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkg
dG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0
aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsKLSAgICB1c2lu
ZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBh
c3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBV
aW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3Vw
ZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OwotfTsK
LQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVp
bnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZB
cnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4o
YXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5
OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQx
Nl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2
X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50
MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFz
c1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQxNkFycmF5PihzdGFydCwg
ZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6VWludDE2QXJyYXk7
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZp
c2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgVWludDMyQXJyYXlfaAotI2RlZmluZSBVaW50MzJBcnJheV9oCisjaWZuZGVmICJVaW50
MzJBcnJheV9oIgorI2RlZmluZSAiVWludDMyQXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFs
VHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVy
OwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhl
IGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50MzJf
dD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVj
dG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJh
c2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVp
bnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNy
ZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMy
QXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQzMkFycmF5Pihs
ZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
OiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxl
bmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0
aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVp
bnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5n
IEpTQzo6VWludDMyQXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8v
IFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEu
aCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgor
I2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291cmNl
UHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtMjU4LDYgKzI1OSwxMCBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAg
ICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlm
CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNz
ZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRo
aXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dl
bmVyYXRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRl
ICJXZWFrUmFuZG9tLmgiCkBAIC0zOTAsNiArMzkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8
UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0
cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAg
UmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9y
IG1fcmVnRXhwQWxsb2NhdG9yOwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3Vu
dGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNvdW50ZWRf
aAorI2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2YgUmVmQ291
bnRlZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQsCisvLyBh
bmQgY2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5rIG9mIGEg
ZGVmZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhjZXB0IHRo
YXQgeW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVuZWQgLSB0
aGlzIGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21ldGltZXMg
ZXZlbiBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERlZmVycmFi
bGVSZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVycmVkRmxh
ZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVuZXQgPSAyOwor
ICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQg
Kz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9y
ZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlZmVy
cmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVmZXJy
ZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50
ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAt
PSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisK
KyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVy
cmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAg
eworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nh
c3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZCh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZl
cnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJsZVJlZkNvdW50
ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRl
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBi
b29sIG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQorewor
I2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAg
IHJldHVybiAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBmbGlw
Qnl0ZXModWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYpIDw8
IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50
MzJfdCBmbGlwQnl0ZXModWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAw
eDAwMDAwMGZmKSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwgOCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVl
ICYgMHhmZjAwMDAwMCkgPj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVzKHVp
bnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAwMGZm
bGx1KSA8PCA1NikKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1KSA8
PCA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAyNCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAgICAg
ICB8ICgodmFsdWUgJiAweDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwgKCh2
YWx1ZSAmIDB4MDAwMGZmMDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1ZSAm
IDB4MDBmZjAwMDAwMDAwMDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYw
MDAwMDAwMDAwMDAwMGxsdSkgPj4gNTYpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citpbmxp
bmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSAxKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMikKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVpbnQxNl90
Pih2YWx1ZSkpKTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KQorICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkp
OworICAgIGlmIChzaXplb2YodmFsdWUpID09IDgpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpKSk7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbjsK
K3VzaW5nIFdURjo6ZmxpcEJ5dGVzOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAg
IGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
bGVuZ3RoLCBzaXplb2YodWludDhfdCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17
Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZz
ZXQoYnl0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBp
ZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQot
Ci1EYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlCdWZmZXJW
aWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQot
ewotfQotCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17
Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0g
ICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5
dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAq
cTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhj
aGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZs
aXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0g
ICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0Zv
cjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5
dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dh
cEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVk
KGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYg
KCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9y
MzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlw
Qnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAg
aWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50
IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJy
b3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgot
ICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAg
ICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4p
OwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+
KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBk
aXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVz
IHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBW
YWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVk
KHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShz
dGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUu
Ynl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxp
bnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6Omdl
dFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2
X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6Omdl
dFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7
Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXRE
YXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQg
RGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBz
aG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2
X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3Qg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRE
YXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
dm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12
b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxm
bG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERh
dGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91Ymxl
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5
dGVMZW5ndGggPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9E
YXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IERhdGFWaWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3
IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGlu
dDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90IGdl
dEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsg
fQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
Z2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldElu
dDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
eXBlRGF0YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRl
cigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9m
ZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9m
ZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19
OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208474</attachid>
            <date>2013-08-09 22:58:34 -0700</date>
            <delta_ts>2013-08-10 10:57:08 -0700</delta_ts>
            <desc>started the jit crazy</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>327500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtOTcsMjQgKzk3LDI0IEBAIGlubGluZSBKSVRBcnJheU1vZGUg
aml0QXJyYXlNb2RlRm9ySW5kZXgKIAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVG
b3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgc3dpdGNoIChj
bGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUlu
dDg6CisgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVTdG9yYWdlVHlwZSkgeworICAgIGNhc2Ug
VHlwZUludDg6CiAgICAgICAgIHJldHVybiBKSVRJbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5SW50MTY6CisgICAgY2FzZSBUeXBlSW50MTY6CiAgICAgICAgIHJldHVybiBKSVRJbnQxNkFy
cmF5OwotICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgorICAgIGNhc2UgVHlwZUludDMyOgogICAg
ICAgICByZXR1cm4gSklUSW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAg
ICBjYXNlIFR5cGVVaW50ODoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7Ci0gICAgY2Fz
ZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVk
QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICAgICAgcmV0dXJuIEpJVFVpbnQ4Q2xhbXBlOworICAgIGNhc2UgVHlwZVVpbnQx
NjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVp
bnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAg
ICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2
NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlu
bGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGlu
ZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1v
ZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAg
ICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1
cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJy
YXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDMyIEBAIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lv
blRvU3RyaW5nKEFycmEKICAgICB9CiB9CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5
cGUoQXJyYXk6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIElu
dDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSW50MTZBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEludDMyQXJyYXk6CisgICAgICAg
IHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBVaW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQ4OworICAgIGNhc2UgVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlVWludDE2OworICAgIGNhc2UgVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWlu
dDMyOworICAgIGNhc2UgRmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7
CisgICAgY2FzZSBGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIHZv
aWQgQXJyYXlNb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnBy
aW50KHR5cGUoKSwgYXJyYXlDbGFzcygpLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgY29uc3QgY2hhciogYXJyYXlDbGFzc1RvU3Ry
aW5nKEFycmF5OjpDbAogY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKEFycmF5
OjpTcGVjdWxhdGlvbik7CiBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJh
eTo6Q29udmVyc2lvbik7CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6
OlR5cGUpOworCiBjbGFzcyBBcnJheU1vZGUgewogcHVibGljOgogICAgIEFycmF5TW9kZSgpCkBA
IC0zODAsNiArMzgyLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJh
eTo6U3RyaW5nOwogICAgIH0KICAgICAKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG9UeXBlZEFycmF5VHlwZSh0eXBlKCkp
OworICAgIH0KKyAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJyYXlNb2RlJiBvdGhl
cikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NzEsNDYgKzI4NzEsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5
cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMzIgKzU4Myw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICB9CiB9CiAgICAgCi1jb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlw
dG9yKEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgp
KSB7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZt
KCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogot
ICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQz
MkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAg
IHJldHVybiAmbV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFy
cmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50
OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0g
ICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5m
bG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotfQotCiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dG
b3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFycmF5TW9kZSwg
SW5kZXhpbmdUeXBlIHNoYXBlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3Mo
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
QXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRB
cnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBl
ZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSos
IHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVj
ayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsK
ICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3Vs
YXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6
SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5n
VHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5n
VHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSwyNCBAQCBwcml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKK2NsYXNzIERlZmVy
R0NGb3JBV2hpbGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVyR0NGb3JBV2hpbGUp
OworcHVibGljOgorICAgIERlZmVyR0NGb3JBV2hpbGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBt
X2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIG1faGVhcC5pbmNyZW1lbnREZWZlcnJhbERlcHRo
KCk7CisgICAgfQorICAgIAorICAgIH5EZWZlckdDRm9yQVdoaWxlKCkKKyAgICB7CisgICAgICAg
IG1faGVhcC5kZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEhlYXAmIG1faGVhcDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGVm
ZXJHQ19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZF9oCisK
KyNpbmNsdWRlIDx3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBvYmplY3QgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFs
IHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0byBpbmNvbWluZyByZWZlcmVuY2VzIGZyb20gdGhl
IGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGluCisvLyByZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dz
IGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBTdWNoIG9iamVjdHMgYWxzbworLy8gaGF2ZSB0aGUg
aW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBoYXZlIHJlZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBH
QworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZD
b3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBH
Q0luY29taW5nUmVmQ291bnRlZCgpCisgICAgICAgIDogbV9lbmNvZGVkUG9pbnRlcigwKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICB7CisgICAg
ICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkpCisgICAgICAgICAgICBkZWxldGUgdmVjdG9yT2ZD
ZWxscygpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5j
ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7CisgICAg
fQorICAgIAorICAgIEpTQ2VsbCogaW5jb21pbmdSZWZlcmVuY2VBdChzaXplX3QgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIGlm
IChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAg
ICAgICByZXR1cm4gc2luZ2xldG9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlY3Rv
ck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIGdlbmVyYWxs
eSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LCBzaW5jZSBpZiB0aGlzCisg
ICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUgc3VwcG9zZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRv
IHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2FsbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDo6YWRk
UmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBib29sIGFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2Vs
bCopOworICAgIAorICAgIC8vIEEgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3
aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisgICAgLy8gcmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYg
d2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0aGUgb2JqZWN0LAorICAgIC8vIGFuZCBpZiBpdCBk
b2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4gSW4gZ2VuZXJhbCwgeW91IGRvbid0IHdhbnQKKyAg
ICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmlsdGVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBm
YWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUgYWxzbyB3YWxraW5nIHRoZSBHQydzIGxpc3QuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rpb25UeXBlPgorICAgIGJvb2wgZmlsdGVy
SW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYpOworICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgdWludHB0cl90IHNpbmdsZXRvbkZsYWcoKSB7IHJldHVybiAxOyB9CisgICAg
CisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxzKCkgY29uc3QgeyByZXR1cm4gIShtX2VuY29kZWRQ
b2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsgfQorICAgIGJvb2wgaGFzQW55SW5jb21pbmcoKSBj
b25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50ZXI7IH0KKyAgICBib29sIGhhc1NpbmdsZXRv
bigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUluY29taW5nKCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMo
KTsgfQorICAgIAorICAgIEpTQ2VsbCogc2luZ2xldG9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlND
ZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5zaW5nbGV0b25GbGFnKCkpOworICAgIH0KKyAgICAK
KyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rvck9mQ2VsbHMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8VmVjdG9yPEpTQ2VsbCo+ID4obV9lbmNvZGVkUG9pbnRlcik7CisgICAgfQorICAgIAorICAg
IC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDogdGhpcyBpcyBhIEpTQ2VsbCouCisgICAgLy8gU2lu
Z2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBpcyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2Vs
bHMuCisgICAgdWludHB0cl90IG1fZW5jb2RlZFBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1
ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citi
b29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwq
IGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2Rl
ZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWco
KTsKKyAgICAgICAgc2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1Npbmds
ZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChI
ZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOwor
ICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4q
IHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQo
c2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9l
bmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAg
IEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRl
ckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29t
aW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAg
IGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVmZXJyZWQoKSk7
CisgICAgICAgIEFTU0VSVChyZWZDb3VudCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAgICAgCisgICAgQVNTRVJUKGlzRGVmZXJyZWQoKSk7CisgICAgICAgIAorICAgIGlm
IChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24oc2luZ2xldG9u
KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIG1f
ZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOwor
ICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHZlY3Rvck9mQ2VsbHMoKS0+YXQoaSkpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaS0tKSA9IHZl
Y3Rvck9mQ2VsbHMoKS0+bGFzdCgpOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPnJlbW92ZUxh
c3QoKTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+
PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNl
bGxzKCktPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAg
ICAgCisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rv
ck9mQ2VsbHMoKS0+YXQoMCkpIHwgc2luZ2xldG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5n
bGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0X2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCisjaW5jbHVk
ZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFQgPSBz
b21lIHN1YnR5cGUgb2YgR0NJbmNvbWluZ1JlZkNvdW50ZWQsIG11c3Qgc3VwcG9ydCBhIGdjU2l6
ZUVzdGltYXRlSW5CeXRlcygpCisvLyBtZXRob2QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQgeworcHVibGljOgorICAgIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0KCk7CisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCk7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBuYXRpdmUgb2JqZWN0IGlzIG5ldyB0byB0aGlzIHNldC4K
KyAgICBib29sIGFkZFJlZmVyZW5jZShKU0NlbGwqLCBUKik7CisgICAgCisgICAgdm9pZCBzd2Vl
cCgpOworICAgIAorICAgIHZvaWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXMgfTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlQWxsKEpTQ2VsbCopOworICAgIHN0
YXRpYyBib29sIHJlbW92ZURlYWQoSlNDZWxsKik7CisgICAgCisgICAgVmVjdG9yPFQqPiBtX3Zl
Y3RvcjsKKyAgICBzaXplX3QgbV9ieXRlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpHQ0luY29taW5nUmVmQ291bnRlZFNl
dCgpCisgICAgOiBtX2J5dGVzKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitHQ0lu
Y29taW5nUmVmQ291bnRlZFNldDxUPjo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3ZlY3Rv
cltpXS0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZUFsbCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBUKiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QtPmFkZEluY29t
aW5nUmVmZXJlbmNlKGNlbGwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92ZWN0b3Iu
YXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5C
eXRlcygpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6c3dlZXAoKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVCogb2JqZWN0ID0g
bV92ZWN0b3JbaV07CisgICAgICAgIHNpemVfdCBzaXplID0gb2JqZWN0LT5nY1NpemVFc3RpbWF0
ZUluQnl0ZXMoKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNl
cyhyZW1vdmVEZWFkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2J5dGVzIC09
IHNpemU7CisgICAgICAgIG1fdmVjdG9yW2ktLV0gPSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAg
IG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVEZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBy
ZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDYgKzM1OCwxNCBA
QCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdDb2Rl
QmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJlbmNl
KEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJheUJ1
ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElmTmVj
ZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVzdGlt
YXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVj
dHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50
U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwxNCAr
NjI5LDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7Cisg
ICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKK30K
Kwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUo
KSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYVNp
emUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSAr
IGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291
bnQoKQpAQCAtNzQ1LDYgKzc1OCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUg
c3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAg
CisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAg
bV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tT
bmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAt
OTI0LDEyICs5NDIsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAg
ICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBt
X2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwog
ICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBI
ZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIK
ICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIK
ICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVm
UHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEg
bWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSw2ICsxODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgICAgIAogICAgICAg
ICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gbV9q
aXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkUmVmZXJlbmNlKEpT
Q2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtMjMwLDYgKzIzNSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRl
Y3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7
CkBAIC0yNDUsNiArMjUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2Nh
dG9yIG1fYmxvY2tBbGxvY2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7
CiAgICAgICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5n
UmVmQ291bnRlZFNldDxBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVf
dCBtX2V4dHJhTWVtb3J5VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5H
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOCArNDgy
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlz
dCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
Jiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAg
ICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAu
IHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBz
dG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDksMTMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEs
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2Rl
KGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRG
bG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpA
QCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVS
b3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5dFR5
cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCkBAIC0xNjY4LDggKzE2MjMsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmlj
KSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5l
c3Mgc2lnbmVkbmVzcykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIC8vIFRoZSBiZXN0
IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBu
ZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAvLyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0
IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVydHkuCiAKQEAgLTE2ODks
MTkgKzE2NDYsMTkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0Qgog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0
eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAg
c3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNp
Z25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUp
KQogICAgICAgICAgICAgbG9hZDhTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1l
c09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkOChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVk
VHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9h
ZDE2U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXls
b2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChiYXNlLCBw
cm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE3MTQsNyArMTY3MSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICB9CiAgICAgCiAg
ICAgSnVtcCBkb25lOwotICAgIGlmIChlbGVtZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0g
VW5zaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKHR5cGUgPT0gVHlwZVVpbnQzMikgewogICAg
ICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRQ
YXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CkBAIC0xNzQwLDggKzE2OTcsMTAgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOworICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwpAQCAtMTc1OCwxMSAr
MTcxNywxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUp
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBsb2FkRmxvYXQo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKICAgICAgICAg
Y29udmVydEZsb2F0VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7CkBAIC0xNzg5LDggKzE3NDgs
MTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIHJldHVy
biBzbG93Q2FzZXM7ICAgIAogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90
IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgcm91bmRpbmcpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7
CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4MDgsOCArMTc2OSw4IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNj
cmF0Y2gpOwpAQCAtMTgyMSwxMSArMTc4MiwxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGlu
dG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBh
dGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5n
KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChzaWduZWRuZXNzLCBzaWduZWRuZXNzID0gVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBp
ZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKKyAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMy
KDB4ZmYpKTsKICAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFy
bHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0
Y2gsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODM2LDcgKzE3OTcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAg
ICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNo
LCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkpOwogICAgICAgICBi
cmVhazsKQEAgLTE4NTMsOCArMTgxNCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5
cGVkQXJyYXlQdXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTg3Miw4
ICsxODM1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9y
VHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODk4LDkgKzE4NjEsOSBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgCiAgICAgLy8gV2Ugd291bGQg
YmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0
aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4K
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBs
YXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0
OgogICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKICAgICAg
ICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDEwICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKIAotI2luY2x1ZGUg
IkFycmF5QnVmZmVyVmlldy5oIgotCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQyLDEzICszOSw5IEBAIGJv
b2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAg
ICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0
VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxs
Vmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxl
ID0gIW1fcGluQ291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlm
IChpc05ldXRlcmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAg
ICBlbHNlIHsKICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs0
OSwxMyBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0g
ICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICBy
ZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8
IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7
Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90
IGkgPSBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJy
YXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGlu
Y29taW5nUmVmZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZp
ZXctPm5ldXRlcigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1
ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZm
ZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZp
ZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RW
aWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZv
aWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAg
IEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0Vmll
dykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZp
ZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXct
Pm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2
aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+
bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlND
CiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNiBAQAogI2lmbmRlZiBBcnJh
eUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFy
cmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZlcjsK
IAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB7IH0K
IAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisgICAgCiAgICAgdm9pZCog
ZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyBy
ZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiArODcsMTMgQEAgcHJpdmF0ZToKICAg
ICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMg
R0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50
cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJh
eTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2ln
bmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC0xMDIsOSArMTA0LDkgQEAgcHVibGljOgogCiAgICAg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkg
Y29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
bikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9p
ZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOworICAgIAorICAgIHZvaWQgcGluKCk7Cisg
ICAgdm9pZCB1bnBpbigpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBu
ZXV0ZXJlZFZpZXdzKTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50
cy5tX2RhdGE7IH0KQEAgLTExOSw4ICsxMjEsMTEgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdW5z
aWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisgICAgdW5zaWduZWQg
bV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJy
YXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdlYWs8SlNBcnJheUJ1
ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4
LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NCwxMiBAQCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJh
eUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwgYnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVt
ZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6
ZSk7CkBAIC0xNzQsNyArMTg1LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9waW5Db3VudCgwKQog
ewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAtMjE4LDYgKzIyOSwx
NiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAgICAgcmV0dXJu
IGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lkIEFycmF5QnVm
ZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6
dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ks
IEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICAvLyBEbyBub3QgYWxsb3cgMzIt
Yml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgpAQCAtMjUzLDcgKzI3NCw1IEBAIEFycmF5
QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXI7Ci11c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVu
dHM7Ci0KICNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDM2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1B
cnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNl
dCkKLSAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0g
ICAgLCBtX3ByZXZWaWV3KDApCi0gICAgLCBtX25leHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6
OkFycmF5QnVmZmVyVmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisg
ICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNl
dCkKKyAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1
ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVm
ZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVy
Vmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBt
X2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKKyAgICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAg
ICAgICBtX2J1ZmZlci0+dW5waW4oKTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRl
cigpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0g
ICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9mZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0g
bV9pc05ldXRlcmFibGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJs
ZSA9IGZsYWc7CisgICAgCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChmbGFnKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYnVmZmVyLT5waW4oKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlC
dWZmZXJWaWV3X2gKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBl
ZEFycmF5VHlwZSIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM3LDQ0ICszNyw0MyBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5
QnVmZmVyVmlldz4gewotcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBl
SW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAg
ICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwK
LSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVG
bG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgVHlwZWRBcnJh
eVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKIAorICAgIGJvb2wgaXNOZXV0ZXJlZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVyLT5pc05ldXRlcmVk
KCk7CisgICAgfQorICAgIAogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNv
bnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKICAgICB9CiAKICAgICB2b2lkKiBiYXNlQWRk
cmVzcygpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwogICAgIH0KIAogICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVy
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0
OwogICAgIH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0ID0gMDsK
IAotICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFibGUgPSBm
bGFnOyB9CisgICAgdm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZyk7CiAgICAgYm9vbCBpc05l
dXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmV1dGVyYWJsZTsgfQogCiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVmZmVyVmlldygpOwogCi1wcm90ZWN0ZWQ6Cisg
IHByb3RlY3RlZDoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKIAogICAgIGlubGluZSBi
b29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CkBAIC04
MywxNCArODIsMTcgQEAgcHJvdGVjdGVkOgogCiAgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1w
bCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKIAotICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQg
ZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5n
dGgpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50
IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgp
OwogCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFu
IEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxlbWVudHMp
CisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMp
CiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYg
Ynl0ZU9mZnNldCAlIHNpemVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEw
NSw3ICsxMDcsMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1i
ZXIgb2YgZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQgb2Zm
c2V0IGlzIGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZp
ZXcuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZz
ZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1lbnRz
KQorICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0ZU9mZnNldCkgLyBz
aXplb2YoVCk7CiAgICAgICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7CkBAIC0xMTksMTkg
KzEyNCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWluKHJl
bWFpbmluZ0VsZW1lbnRzLCAqbnVtRWxlbWVudHMpOwogICAgIH0KIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KICAgICAvLyBUaGlzIGlzIHRoZSBhZGRy
ZXNzIG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zmc2V0Lgog
ICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5dGVPZmZzZXQgOiAz
MTsKICAgICBib29sIG1faXNOZXV0ZXJhYmxlIDogMTsKIAotcHJpdmF0ZToKKyAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBt
X2J1ZmZlcjsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZm
ZXJWaWV3KiBtX25leHRWaWV3OwogfTsKIAogYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwo
QXJyYXlCdWZmZXJWaWV3KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKQEAgLTE3Niw3ICsx
NzcsOCBAQCBib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRM
ZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBv
ZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRl
T2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCog
b2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQogewogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAg
IHN0YXJ0ICs9IGFycmF5U2l6ZTsKQEAgLTE5Niw2ICsxOTgsNCBAQCB2b2lkIEFycmF5QnVmZmVy
Vmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCi11c2luZyBK
U0M6OkFycmF5QnVmZmVyVmlldzsKLQogI2VuZGlmIC8vIEFycmF5QnVmZmVyVmlld19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIYXNo
RW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFibGU7CiAKIHN0
cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25Q
dHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1ZmZlclZpZXcqKTsK
KyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07CiAKICNkZWZpbmUg
Q1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0Niw4IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVjdFZpcnR1YWwsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZDbGFzc05hbWU6OnNs
b3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0VHlwZWRBcnJh
eUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZp
c2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNw
cDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9uIFZhbHVlIHsKKyAg
ICBUIGRhdGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKworfQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlC
dWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAgaWYgKCFidWZmZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBs
ZW5ndGgpOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2Vk
TGVuZ3RoOworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4
LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRl
TGVuZ3RoKSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAg
OiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3Ro
KGJ5dGVMZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxp
dHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5k
aWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxp
bmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBjaGFyIHRlbXAgPSAq
cDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5
dGVzRm9yMTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKK30KKwor
c3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVz
KHAsIHAgKyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30KKworc3RhdGljIHZv
aWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyA3
KTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0ZXMocCArIDIsIHAg
KyA1KTsKKyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3RhdGljIHZvaWQgZmxp
cEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlh
bikKK3sKKyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmxpcEJ5
dGVzRm9yMTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAg
ICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6
CisgICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3OjpnZXREYXRhKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKK3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAg
ZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8g
V2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBj
YXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFs
aWduZWQgbG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5KHZhbHVlLmJ5dGVz
LCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBz
aXplb2YoVCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCks
IGxpdHRsZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
YmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0
b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9u
IGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCisgICAg
VmFsdWU8VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7CisgICAgZmxp
cEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7
CisgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZz
ZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90IERhdGFWaWV3Ojpn
ZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJl
dHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKK30KKwordWludDhf
dCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsKK30KKworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXRE
YXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1aW50MTZf
dCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3QgRGF0YVZpZXc6Omdl
dEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OworfQorCitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCitkb3VibGUgRGF0
YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9m
ZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDgodW5z
aWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3Zv
aWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVF
bmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlh
biwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7
Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91
YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
c2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30K
Kwordm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRl
cigpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDM5ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCld
OwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+
IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90
KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBE
YXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVp
bnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3Ro
KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNo
ZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJm
bG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAogRGF0
YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmlldyhi
dWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFWaWV3OjpEYXRhVmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5
dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVy
biBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlm
Ci19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNo
YXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCAr
IDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAg
ICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQot
Ci1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0
ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRl
cyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0
aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wg
bGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAg
ICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6
OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkg
ewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNl
IGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBz
dXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHko
dmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5
dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMs
IHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0
ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBi
dXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0
b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1
ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0
dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3Mp
ICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3Qg
RGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwot
fQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0
LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVm
UHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsK
LSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdl
dERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQz
Ml90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3Ojpn
ZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0
YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxz
ZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0
LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5
dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsK
LSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19
Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlIDxydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3Mg
RGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBj
b25zdCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MTZfdCBnZXRV
aW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdl
dFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2X3QgZ2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
CisgICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGlu
dDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQz
MihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGRv
dWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBkb3VibGUg
Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhf
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQz
Ml90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAg
ICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEZsb2F0MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZs
b2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZsb2F0
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgbmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25l
ZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8
fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2lnbmVkIG1fYnl0ZUxl
bmd0aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0YVZp
ZXdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gKICNkZWZpbmUgRGF0
YVZpZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3Rl
Y3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50
LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQx
Nl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZfdCBn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBnZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAg
IGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWlu
dDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQg
c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0
ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CiAgICAgfQogCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2YXRlOgotICAgIERh
dGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5l
IGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0
ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0
ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0KICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKQEAgLTI0LDg0ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBGbG9hdDMyQXJyYXlfaAotI2RlZmluZSBGbG9hdDMyQXJyYXlfaAorI2lmbmRlZiAiRmxv
YXQzMkFycmF5X2giCisjZGVmaW5lICJGbG9hdDMyQXJyYXlfaCIKIAotI2luY2x1ZGUgIlR5cGVk
QXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDMyQXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0Owot
Ci0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRl
eF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUg
RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBz
dXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19Owot
Ci1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9h
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMy
QXJyYXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJh
eSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6
Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJB
cnJheTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8Zmxv
YXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0
MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQz
MkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0MzJBcnJheTsKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExLDk4ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKLSNk
ZWZpbmUgRmxvYXQ2NEFycmF5X2gKKyNpZm5kZWYgIkZsb2F0NjRBcnJheV9oIgorI2RlZmluZSAi
RmxvYXQ2NEFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDY0QXJy
YXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKGNvbnN0
IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkg
YmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQu
IERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3Jp
cHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxG
bG9hdDY0QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IHVzaW5nIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxk
b3VibGU+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8Rmxv
YXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBl
RmxvYXQ2NDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0NjRBcnJheShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4K
LSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+
KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNy
ZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGFycmF5LCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0
ZTxGbG9hdDY0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDY0QXJyYXk6
OkZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5OworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6Cisg
ICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVh
dGUoY29uc3QgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSYgZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUqPihiYXNlQWRkcmVz
cygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0KEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRJbXBs
KGFycmF5LCBvZmZzZXQgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAg
ICBib29sIHNldFJhbmdlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0UmFuZ2VJbXBs
KAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksCisgICAg
ICAgICAgICBkYXRhTGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBvZmZzZXQgKiBzaXpl
b2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5nZSh1bnNp
Z25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gemVyb1Jh
bmdlSW1wbChvZmZzZXQgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSksIGxlbmd0aCAqIHNpemVvZihB
ZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCgpCisgICAg
eworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVv
ZihBZGFwdG9yOjpUeXBlKTsKKyAgICB9CisKKyAgICBBZGFwdG9yOjpUeXBlIGl0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5s
ZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZGF0YSgpW2luZGV4XTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCk7CisgICAgICAgIGRhdGEo
KVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAg
ICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8
PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBv
ZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5l
cmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAg
LCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpU
eXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBj
cmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0
ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVu
Z3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZp
ZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVm
ZmVyOworICAgIGlmICghdmVyaWZ5U3ViUmFuZ2UoYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNU
eXBlZEFycmF5VmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAg
ICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZihBZGFw
dG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJldHVybiBzdWJhcnJh
eShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c3Vi
YXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIG9mZnNldCwg
bGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCBsZW5ndGgo
KSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxBZGFw
dG9yOjpUeXBlPihidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKKyAg
ICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIu
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgQnV0dGVyZmx5OwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUs
OSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5n
dGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1
eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9
CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHJldHVybiB1
LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3RhdGljIEluZGV4aW5n
SGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKQEAgLTEx
Nyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0
aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBl
LCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcgdGhlIHB1YmxpY2x5
IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAgdWludDMyX3QgdmVj
dG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2Uu
IFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRoaXMsIGFuZCB0aGUg
dHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogYnVmZmVyOworICAgICAgICB9IHR5cGVkQXJyYXk7
CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
OEFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw4MCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgSW50OEFycmF5X2gKLSNkZWZpbmUgSW50OEFycmF5X2gKKyNpZm5k
ZWYgIkludDhBcnJheV9oIgorI2RlZmluZSAiSW50OEFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1
ZmZlcjsKLQotY2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8
aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDhBcnJheT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAg
ICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLQotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50
OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1Q
YXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29u
c3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4
QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDhBcnJheT4o
bGVuZ3RoKTsKLX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0K
LQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50OEFycmF5PihzdGFy
dCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6SW50OEFycmF5
OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCkBAIC0yMyw4MCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgSW50MTZBcnJheV9oCi0jZGVmaW5lIEludDE2QXJyYXlfaAorI2lmbmRlZiAiSW50MTZBcnJh
eV9oIgorI2RlZmluZSAiSW50MTZBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNs
YXNzIEludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90PiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBjcmVhdGUoY29uc3QgaW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5
IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJl
Y3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OnNldDsKLSAgICB1
c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlu
bGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIElu
dDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3Vw
ZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50MTZfdD47Ci19Owot
Ci1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZB
cnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5Ojpj
cmVhdGUoY29uc3QgaW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihhcnJheSwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8
SW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1JbnQxNkFycmF5OjpJbnQxNkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJ
bnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBz
dWJhcnJheUltcGw8SW50MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi11c2luZyBKU0M6OkludDE2QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIK
IAogI2VuZGlmIC8vIEludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc3ICsyMywxMCBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbnQzMkFycmF5X2gKLSNkZWZpbmUgSW50
MzJBcnJheV9oCisjaWZuZGVmICJJbnQzMkFycmF5X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2gi
CiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDMyQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19OwotCi1QYXNzUmVmUHRyPElu
dDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShjb25zdCBpbnQqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46
OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQot
SW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDMyQXJyYXk7CisjaW5jbHVk
ZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEludDMyQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSw2ICsxMzEsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkKICAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBobW0sIGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgcHJldHR5IGF3ZXNvbWUgdG8gZ2V0
IHNfaW5mbworICAgICAgICAvLyB0byBiZSBhIHN0YXRpYy4gTm90IHN1cmUgaWYgdGhhdCB3b3Jr
cy4KICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBp
bmRleGluZ1R5cGUpOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlcjo6c19p
bmZvID0geworICAgICJBcnJheUJ1ZmZlciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlcil9OworCitKU0FycmF5QnVmZmVyOjpKU0FycmF5QnVm
ZmVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9pbXBsKGFy
cmF5QnVmZmVyLmdldCgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgdm0uaGVh
cC5hZGRSZWZlcmVuY2UodGhpcywgbV9pbXBsKTsKK30KKworSlNBcnJheUJ1ZmZlciogSlNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlcikKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPQor
ICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyPih2bS5oZWFw
KSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlcih2bSwgc3RydWN0dXJlLCBidWZmZXIpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVj
dHVyZSogSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywKKyAgICAgICAg
Tm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5U2xvdCgK
KyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQor
Citib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZm
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkg
eworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpwdXQo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJB
dHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY1QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlcl9oCisKKyNpbmNsdWRl
ICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0FycmF5QnVmZmVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJvdGVjdGVk
OgorICAgIEpTQXJyYXlCdWZmZXIoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorcHVibGljOgorICAg
IHN0YXRpYyBKU0FycmF5QnVmZmVyKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPik7CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGltcGwoKSBjb250cyB7IHJl
dHVybiBtX2ltcGw7IH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU1RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKwor
cHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7CisgICAgIkZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwKKyAgICBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcikKK307CisKK0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAg
ICAgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0
cnVjdHVyZSogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvciogY29uc3RydWN0b3IgPQorICAgICAgICBqc0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiQXJyYXlCdWZmZXIgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50
b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBK
U0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4
ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1
cmUoKSwgYnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKAorICAgIEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7Cisg
ICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsK
KyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQor
eworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOwor
ICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTsKKworY2xhc3MgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqKTsKKworcHVibGljOgorICAgIHN0
YXRpYyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlC
dWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAg
SlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBz
bGljZSBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlci4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJTbGljZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikp
OworICAgIAorICAgIGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7
CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBuZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5p
bXBsKCktPnNsaWNlKGJlZ2luLCBlbmQpOworICAgIGlmICghbmV3QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY2FsbGVlLT5n
bG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVl
LT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBKU0Fy
cmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3Ry
dWN0dXJlLCBuZXdCdWZmZXIpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OnNfaW5m
byA9IHsKKyAgICAiQXJyYXlCdWZmZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJQcm90b3R5cGUpCit9OworCitKU0FycmF5QnVm
ZmVyUHJvdG90eXBlOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7
Cit9CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVy
UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKyNkZWZpbmUgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgSlNBcnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9IHsK
KyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0FycmF5QnVmZmVyVmlldyk7Cit9OworCitKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLAor
ICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDApCit7CisgICAgaWYgKGxlbmd0
aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4K
KyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3Ro
LCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
MCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9k
ZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYg
KG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBl
ZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDRHQiBsZXNzIGEgZmV3IGJ5dGVzLgorICAgIGlmIChs
ZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oVUlOVF9NQVggLSBXYXN0ZWZ1bFR5cGVkQXJy
YXkpIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9
PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50
U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICghdHJ5TWFsbG9jKGxlbmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1
ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHZtLmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVs
ZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21v
ZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1
Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKDAp
CisgICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEo
KSkgKyBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdh
c3RlZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsK
KyAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7Cisg
ICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5k
ZXhpbmdIZWFkZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZp
ZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwg
Y29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9y
KGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAg
ICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQoreworICAgIGNvbnRleHQuZGlzb3duKCk7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNl
IEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVk
QXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICB2bS5o
ZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJy
YXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7Cisg
ICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1
ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisg
ICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlwZWRBcnJheUNvbnRyb2xsZXIt
PnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5p
c1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFy
cmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
Ym9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAg
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHku
Iik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxlbmd0aC9i
eXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94Lgor
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAgICAgYXJy
YXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUp
OworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7
CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXpl
VHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsK
KyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAg
ICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
QXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVz
IHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUg
cGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNp
YmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMg
d2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisv
LyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8v
CisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBt
YXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcg
YXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBz
ZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5
aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93Lgor
Ly8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBj
cmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVz
cGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3IiIGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5
cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmln
IHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0
IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lm
aWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAv
LyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEg
dmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlw
ZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0
aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEg
bGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11
Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRo
YXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVj
dG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6
ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAg
Ly8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVy
IHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5
cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hl
YWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5h
dGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBv
aW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFs
bG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXku
CisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3duIHRoZSB2ZWN0b3IuCisgICAgV2FzdGVmdWxU
eXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmll
dywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZl
clZpZXcgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2Fz
dGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVy
Zmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZp
YSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMgY2xhc3Mncwor
Ly8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdl
IGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGlt
aXQgPSAxMDAwOworICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc2l6ZU9mKHVpbnQzMl90IGxlbmd0
aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAgeworICAgICAgICByZXR1cm4gKGxlbmd0aCAq
IGVsZW1lbnRTaXplICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAtIDEpCisgICAgICAgICAgICAm
IH5zaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIGNsYXNz
IENvbnN0cnVjdGlvbkNvbnRleHQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25z
dHJ1Y3Rpb25Db250ZXh0KTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBlbnVtIElu
aXRpYWxpemF0aW9uTW9kZSB7IFplcm9GaWxsLCBEb250SW5pdGlhbGl6ZSB9OworICAgICAgICAK
KyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGxl
bmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsIEluaXRpYWxpemF0aW9uTW9kZSA9IFplcm9GaWxs
KTsKKyAgICAgICAgCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBW
TSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIH5D
b25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9p
ZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1f
dmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1v
ZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAg
CisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFsbG9jYXRl
cyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsg
YWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3Nhcnku
CisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAg
ICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgQXJy
YXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBs
KCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVy
biBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlC
dWZmZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0
aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRB
cnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
c19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpCit7CisgICAg
aWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCkt
PnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlclZp
ZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxl
KCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xlbmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNp
Z25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1f
bW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIHsKKyAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBG
YXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHB0cmRpZmZfdCBkZWx0YSA9CisgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3RvcikgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGRlbHRhKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1
bHQpID09IGRlbHRhKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIzLDQgKzIyMywxNCBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZm
ZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3IiwgJkJhc2U6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisKK0pTRGF0
YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQor
ICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6
Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2Vk
QnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7CisgICAgICAgIHRocm93Vk1FcnJv
cigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0
IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBi
dWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAg
ICBKU0RhdGFWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkgSlNEYXRhVmlldyh2bSwgY29udGV4dCk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNEYXRh
VmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAw
OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4g
MDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
IHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3Qt
Pm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6
Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0KQoreworICAgIEpTRGF0
YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0
dXJuIERhdGFWaWV3OjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rh
dGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdfaAor
I2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3IDogcHVibGljIEpTQXJyYXlCdWZm
ZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gMTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVi
bGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoCisgICAgICAgIFZNJiwgU3RydWN0
dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAg
ICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdo
aWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAg
Ly8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4K
KyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZShWTSYs
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5
cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVEYXRhVmlldzsKKworcHJv
dGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdh
c3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICAK
K3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgSlNfRVhQ
T1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNEYXRhVmlld1Byb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlw
ZTo6c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAs
IEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0
YVZpZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUu
bHV0LmgKK0BiZWdpbiBkYXRhVGFibGUKKyAgZ2V0SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jR2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IGdldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4ICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQxNiAgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNHZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgZ2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2ICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDMyICAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQzMiAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIGdldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQ4ICAg
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jU2V0VWludDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldElu
dDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2ICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQzMiAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRGbG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQ2NCAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCitAZW5kCisqLworCitKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3UHJvdG90
eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCit7Cit9CisKK0pTRGF0YVZpZXdQcm90b3R5cGUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTRGF0YVZpZXdQcm90
b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
RGF0YVZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0RhdGFWaWV3UHJvdG90eXBl
KHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAor
ICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4
ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PERhdGFWaWV3UHJvdG90eXBlKj4o
Y2VsbCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmll
d1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZp
ZXdUYWJsZShleGVjKSwganNDYXN0PERhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAgICAg
ICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpT
RGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRo
b2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCkuIikp
OworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJ
bnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVF
bmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5h
cmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmllbmQoKSk7
CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIHZhbHVl
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRU
b0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0g
ZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0
b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
RW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmll
dyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUo
KSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0
IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1
ZSkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgw
KS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgQWRhcHRv
cjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEp
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBm
YWxzZTsKKyAgICBpZiAoc2l6ZW9mKEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmllbmQoKSk7CisgICAgfQor
ICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2Yg
Ym91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIAorICAgICpyZWludGVycHJldF9jYXN0PEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpID0gdmFsdWU7CisgICAg
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDE2
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MTZBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRh
PFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhl
Yyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50
OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4
ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8Rmxv
YXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90
b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYs
IFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0
YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiAiSlNGbG9hdDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgor
I2RlZmluZSAiSlNGbG9hdDY0QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmll
dyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2Vlbgor
Ly8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4
QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8K
Ky8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5
KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1
aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0
YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQor
Ly8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1h
eSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0
aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkn
cyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3Bh
Y2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBw
b2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUg
YWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBl
aXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhl
IGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKwor
Ly8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0
b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVy
dGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGlu
dDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBl
ZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8g
ICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90
IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVl
KTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwor
Ly8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBk
b3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVy
VmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZihBZGFwdG9yOjpUeXBl
KTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENv
bnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVk
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRp
YyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1Jl
ZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRy
PEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSk7IH0KKyAg
ICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVv
ZihBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25zdCBBZGFwdG9yOjpUeXBlKiB0eXBl
ZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
QWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgQWRhcHRvcjo6VHlwZSogdHlw
ZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5
cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQg
dG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3Vw
cG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7
CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpU
eXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtp
XTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2ln
bmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5k
ZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9K
U1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAg
ICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5k
ZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShB
ZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4
UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBBZGFwdG9yOjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywg
dmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodmFsdWUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5TZXRRdWlj
a2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9
IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYg
b2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5T
ZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhl
CisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVTZXQoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwg
dGhyb3cgb24gZXJyb3IuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgorICAgIGJv
b2wgc2V0V2l0aFNwZWNpZmljVHlwZShFeGVjU3RhdGUqLCBPdGhlclR5cGUqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1
Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaWYgaXQgcmV0dXJucyBmYWxzZQorICAgIC8v
IHRoZW4gaXQgd2lsbCBoYXZlIHRocm93biBhbiBleGNlcHRpb24uCisgICAgYm9vbCBzZXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sIE5vbkFycmF5KTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0
b3JhZ2VUeXBlID0gQWRhcHRvcjo6dHlwZVZhbHVlOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZp
c2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2
ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNz
YXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAg
c3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChK
U1R5cGVkQXJyYXlWaWV3Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVm
aW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVu
Y3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
SlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBl
IGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdD
bGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90
eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ciogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBl
LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4gcHJvdG90
eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJl
KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
dyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJE
YXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwor
ICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUo
CisgICAgICAgICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisg
ICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVm
ZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9m
ZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
VUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZp
ZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMg
dGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7
CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8g
Vmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVy
LCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBl
ZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIg
Zm9yIHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcg
YnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8g
LSBBbm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5
LgorICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9m
IHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09i
amVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDAp
KSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNz
KiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgc3Ry
dWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxl
bmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8
IDApCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0
aCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0
RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0
cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDYWxsRGF0YSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxs
RGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmlj
VHlwZWRBcnJheVZpZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBW
TSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250
ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENv
bnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihB
ZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJl
c3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0s
IGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgdm0sIHN0cnVj
dHVyZSwgbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSksIENvbnN0cnVjdGlvbkNvbnRleHQ6
OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
cmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2
bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAg
IFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBh
c3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYg
KCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAg
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQg
b2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29u
c3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0
ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6
OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1w
bC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1
cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNT
RVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAg
ICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4o
dm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsK
KyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRv
cjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZt
KCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vz
c1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29u
c2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBv
dGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxl
IHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQg
aGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2
ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9u
IGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVy
ZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3Mg
Z2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNl
LCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29w
aWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5Lgor
ICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAg
ICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCB0aHJvd1JhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvZiBp
bmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQor
ICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4UXVpY2ts
eShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCisgICAg
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBDbGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsK
KyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUp
IHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNp
bmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4ob2JqZWN0KTsKKyAgICAg
ICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSgKKyAgICAgICAg
ICAgIHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3RvcigpLAorICAgICAg
ICAgICAgb3RoZXItPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7Cisg
ICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4
ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlw
ZUludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJh
eSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRB
cnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBy
ZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9i
amVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0
V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9m
ZnNldCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVj
aWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsK
KyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlw
ZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAo
IXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdo
dCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCAr
IGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkg
KiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2ts
eShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShnZXRJbmRleFF1aWNrbHkoaW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0
LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAg
ICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6
OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4
UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGdldElu
ZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIC8vIEZp
cmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRvIHN0b3JlIHRvIHRoZSBs
ZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0IG1vZGUuIEkgd2lsbCBk
byB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMs
IGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisg
ICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5n
IEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRz
IHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0
eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAg
IHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3
cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3Bl
cnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwg
cHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZS5Ob3RBbkluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghY2FuR2V0
SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBh
bnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
Cit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBy
ZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAg
ICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9p
ZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAor
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIo
aSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3Zv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZh
c3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5
cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT3Zl
cnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2Fn
ZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0
b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNp
dG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2
b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3
VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkp
OworICAgICAgICBtZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVT
aXplKCkpOworICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAg
ICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Cisg
ICAgfQorICAgIAorICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRv
ciwgdG9rZW4pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVk
QXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxh
YmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4
ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAv
LyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBq
dXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4g
VGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8g
bGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8g
dGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93
YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2Yg
YWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFu
eXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2Fz
ZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBh
bmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdh
c3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3
aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQg
aWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQg
d2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBh
bmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFw
KHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAg
CisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNp
emVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
dGhpcyBzaG91bGQgcmVjb3JkLCBpbiB0aGUgYnV0dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQgaXMu
CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQorICAg
ICAgICAmJiAhbV9idXR0ZXJmbHkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7
CisgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9z
c2libGUuCisgICAgICAgIG1fYnV0dGVyZmx5ID0gc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIq
PihtX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgbV9i
dXR0ZXJmbHksIGhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHN0cnVjdHVyZSgpLAorICAgICAgICAg
ICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9
CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRo
aXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1
ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmpl
Y3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92
ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0
aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29z
dCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0
aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAg
IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9y
LCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJ1dHRlcmZseSgpLT5zZXRB
cnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2Jq
ZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5Vmlldyogb2JqZWN0KQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNyZWF0
ZSgKKyAgICAgICAgdGhpc09iamVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQo
KSwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gK
KyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlIDogcHVibGljIEpT
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCitwdWJsaWM6CisgICAg
c3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1
Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmll
d0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2Vp
dmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsK
KyAgICAKKyAgICBKU09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1
bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQ7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIG9mZnNldCA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBvZmZzZXQgPSAwOworICAgIAorICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAK
KyAgICB0aGlzT2JqZWN0LT5zZXQoZXhlYywgc291cmNlQXJyYXksIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgp
KTsKKyAgICAKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdD
bGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZl
ciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7Cisg
ICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVu
dCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0g
ZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBH
ZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRlciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBj
aGFuZ2UuCisgICAgdW5zaWduZWQgdGhpc0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwor
ICAgIAorICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4Cisg
ICAgaWYgKGJlZ2luIDwgMCkKKyAgICAgICAgYmVnaW4gPSB0aGlzTGVuZ3RoIC0gYmVnaW47Cisg
ICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9IHRoaXNMZW5ndGggLSBlbmQ7CisgICAgCisg
ICAgLy8gQ2xhbXAgdGhlIGluZGljZXMgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuCisgICAg
QVNTRVJUKGJlZ2luID49IDApOworICAgIEFTU0VSVChlbmQgPj0gMCk7CisgICAgYmVnaW4gPSBz
dGQ6Om1pbihiZWdpbiwgdGhpc0xlbmd0aCk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCB0aGlz
TGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDbGFtcCBlbmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3Rk
OjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisgICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAg
dW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVn
aW47CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmpl
Y3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aCA9PSB0aGlzT2JqZWN0LT5s
ZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICBjYWxs
ZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRB
cnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFz
czo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGFycmF5QnVmZmVyLAor
ICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkgKyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVs
ZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdD
bGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAg
IAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAg
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAg
ICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTUzNzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDMwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0
KEpTVmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJv
dG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3Nvciwg
QWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJl
KCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50
MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDhB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhD
bGFtcGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFy
cmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OENsYW1wZWRBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MzJBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnBy
b3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0
NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0
YVZpZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgCisg
ICAgbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1
ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlCdWZmZXJQcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5zdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5zdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0uc3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJv
dG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1w
ZWQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlVWludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1Vp
bnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNVaW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0uc3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5n
ZXQoKSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkp
KTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQWN0
aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CkBA
IC0zMTgsNiArMzQyLDI2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJv
dG8KIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAgCisgICAgSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0gSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSksIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJyYXk8SlNPYmpl
Y3QqLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7
CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCks
ICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUlu
dDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50
MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYp
XS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLT52bSgpLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50MzJBcnJheSIpOworICAg
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgpXSA9IEpTVWludDhBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OEFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSwg
IlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVp
bnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhDbGFt
cGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQx
NildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50
MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2
KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3Ry
dWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMyQXJyYXki
KTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpT
RmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnBy
b3RvdHlwZS5nZXQoKSwgIkZsb2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5
Iik7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBh
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkFycmF5QnVmZmVyLCBh
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5cGVkQXJy
YXlJbmRleC0tOykgeworICAgICAgICBtX3R5cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRleF0ucHJv
dG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJh
eUluZGV4XSwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0tPm5hbWUo
ZXhlYyksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0p
OworICAgIH0KIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTmFOLCBqc05h
TigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgog
I2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtP
YmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAt
MTY2LDYgKzE2OCwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9yZWdFeHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJpbmdP
YmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbnRlcm5hbEZ1
bmN0aW9uU3RydWN0dXJlOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyUHJv
dG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0IFR5cGVkQXJyYXlE
YXRhIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9OworICAgIAorICAgIEZp
eGVkQXJyYXk8VHlwZWRBcnJheURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gbV90
eXBlZEFycmF5czsKICAgICAgICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lh
bDo6VGFibGVTaXplXTsgLy8gU3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRoZSBMTEludCBhbmQg
SklULgogCkBAIC0zMzAsNiArMzQyLDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4
cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0Fy
cmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSog
c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5
QnVmZmVyQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyQ29uc3RydWN0
b3IuZ2V0KCk7IH0KKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBhcnJheUJ1ZmZlclByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCk7IH0KKyAg
ICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJh
eUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHlwZWRBcnJh
eVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3RydWN0dXJlLmdldCgpOworICAgIH0K
IAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDhBcnJheV9oIgorI2Rl
ZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
IkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJK
U1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2QXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5X2giCisjZGVmaW5lICJKU0ludDMy
QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50
MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRl
PD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5j
dGlvbiIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7CitNQUtF
X1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lO
Rk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitNQUtFX1Nf
SU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5G
TyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKK01BS0VfU19JTkZP
KERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisK
KyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0
cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50
MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rv
cjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJy
YXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlD
b25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxK
U1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNv
bnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
RmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJh
eUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5
cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBl
OjpzX2luZm8gPSB7I3R5cGUgIlByb3RvdHlwZSIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1Nf
SU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJ
bnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhD
bGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0
NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90
b3R5cGVzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJh
eVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJ
bnQzMkFycmF5PiBKU0ludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFy
cmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBl
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5
PiBKU1VpbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zs
b2F0NjRBcnJheVByb3RvdHlwZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBc
CisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8g
PSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgp
OworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8o
VWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7
CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5G
TyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gK
KworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRB
cnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENs
YW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMy
QWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmICJKU1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgor
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhD
bGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
IkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIK
KworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVk
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNVaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZB
cnJheV9oIgorI2RlZmluZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFy
cmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQz
MkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKwor
SlNBcnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7Cisg
ICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQor
ICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFw
cGVyID0gUGFzc1dlYWsocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJI
YW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUg
cmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJz
IGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0
IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlz
IHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0
aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4g
QXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVh
ZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUK
Ky8vICAgb25lLgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBU
eXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAg
IAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIEFycmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAs
MTMgKzIzMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hl
YWRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKCkpOworICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hl
YWRlcihjb25zdCBKU0NlbGwqKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4
ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwxNyBAQCBp
bmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jCiAgICAgICAgIHZtLCB1aWQs
IGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CiB9CiAKK2lubGluZSBi
b29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBp
ZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGpz
Q2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpLT5tb2RlKCkgPT0gV2FzdGVmdWxU
eXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJu
IHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9iamVjdCgpID09
IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJh
eUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFy
ZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVB
cmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBl
QXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVm
IEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5
cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUo
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0
YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBl
IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIo
KSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4g
dG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
SlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051
bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFt
ZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlw
ZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlw
ZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAg
ICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlw
ZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBU
eXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUeXBlPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZl
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNO
dW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2
YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRv
SlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0K
K307CisKK3N0cnVjdCBJbnQ4QWRhcHRvcjsKK3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3Qg
SW50MzJBZGFwdG9yOworc3RydWN0IFVpbnQ4QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRB
ZGFwdG9yOworc3RydWN0IFVpbnQxNkFkYXB0b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0
cnVjdCBGbG9hdDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9h
dDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4g
RmxvYXQ2NEFycmF5OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFk
YXB0b3I+IEpTSW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQx
NkFkYXB0b3I+IEpTSW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50MzJBZGFwdG9yPiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQ4QWRhcHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNG
bG9hdDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFw
dG9yPiBKU0Zsb2F0NjRBcnJheTsKKworc3RydWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjxpbnQ4X3QsIEludDhBcnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7
IH07CitzdHJ1Y3QgSW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQx
Nl90LCBJbnQxNkFycmF5LCBKU0ludDE2QXJyYXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IElu
dDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJh
eSwgSlNJbnQzMkFycmF5LCBUeXBlSW50MzI+IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJh
eSwgVHlwZVVpbnQ4PiB7IH07CitzdHJ1Y3QgVWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8dWludDE2X3QsIFVpbnQxNkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWlu
dDE2PiB7IH07CitzdHJ1Y3QgVWludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3I8dWludDMyX3QsIFVpbnQzMkFycmF5LCBKU1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07
CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBG
bG9hdDMyQXJyYXksIEpTRmxvYXQzMkFycmF5LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZs
b2F0NjRBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJh
eSwgSlNGbG9hdDY0QXJyYXksIFR5cGVGbG9hdDY0PiB7IH07CisKK3N0cnVjdCBVSW50OENsYW1w
ZWRBZGFwdG9yIHsKKyAgICB0eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4
Q2xhbXBlZEFycmF5IFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBK
U1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBU
eXBlVWludDhDbGFtcGVkOworICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8
IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAg
ICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KGxyaW50KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZl
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0
b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4
X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5h
c0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHN0YXRpYyB1aW50OF90IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1
ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBUeXBlZEFycmF5QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBl
ZEFycmF5Q29udHJvbGxlcjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlD
b250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xs
ZXJfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZl
cjsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6
IHB1YmxpYyBSZWZDb3VudGVkPFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAg
VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxl
cigpOworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBl
ZEFycmF5RGVzY3JpcHRvcl9oCi0jZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUg
ewotICAgIFR5cGVkQXJyYXlOb25lLAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJy
YXlJbnQxNiwKLSAgICBUeXBlZEFycmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAg
IFR5cGVkQXJyYXlVaW50OENsYW1wZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBl
ZEFycmF5VWludDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9h
dDY0Ci19OwotCi1zdHJ1Y3QgVHlwZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFn
ZU9mZnNldCgwKQotICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90
IHN0b3JhZ2VPZmZzZXQsIHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0lu
Zm8oY2xhc3NJbmZvKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQot
ICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNl
dDsKLSAgICBzaXplX3QgbV9sZW5ndGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHsKLSAgICBTaWduZWRUeXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQot
fTsKLWVudW0gVHlwZWRBcnJheVJvdW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAg
IENsYW1wUm91bmRpbmcKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlw
ZWRBcnJheURlc2NyaXB0b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlUeXBlLmgiCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisjaW5jbHVkZSAi
SlNEYXRhVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFR5
cGVJbnQ4OgorICAgICAgICByZXR1cm4gJkpTSW50OEFycmF5OjpzX2luZm87CisgICAgY2FzZSBU
eXBlVWludDg6CisgICAgICAgIHJldHVybiAmSlNVaW50OEFycmF5OjpzX2luZm87CisgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gJkpTVWludDhDbGFtcGVkQXJyYXk6
OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuICZKU0ludDE2QXJy
YXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAmSlNVaW50
MTZBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gJkpT
SW50MzJBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJu
ICZKU1VpbnQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAg
cmV0dXJuICZKU0Zsb2F0MzJBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6Cisg
ICAgICAgIHJldHVybiAmSlNGbG9hdDY0QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVEYXRh
VmlldzoKKyAgICAgICAgcmV0dXJuICZKU0RhdGFWaWV3OjpzX2luZm87CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAg
ICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQxNiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIG91dC5wcmludCgi
VHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAg
ICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlw
ZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDhDbGFtcGVkIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIG91dC5wcmludCgi
VHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0MzIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZs
b2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBUeXBlZEFycmF5VHlwZV9oCisjZGVmaW5lIFR5cGVkQXJyYXlUeXBlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBU
eXBlZEFycmF5VHlwZSB7CisgICAgTm90VHlwZWRBcnJheSwKKyAgICBUeXBlSW50OCwKKyAgICBU
eXBlVWludDgsCisgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKKyAgICBUeXBlSW50MTYsCisgICAgVHlw
ZVVpbnQxNiwKKyAgICBUeXBlSW50MzIsCisgICAgVHlwZVVpbnQzMiwKKyAgICBUeXBlRmxvYXQz
MiwKKyAgICBUeXBlRmxvYXQ2NCwKKyAgICBUeXBlRGF0YVZpZXcKK307CisKKyNkZWZpbmUgTlVN
QkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTIFR5cGVEYXRhVmlldworCitpbmxpbmUgdW5zaWduZWQg
dG9JbmRleChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odHlwZSkgLSAxOworfQorCitpbmxpbmUgYm9vbCBpc1R5cGVkVmlldyhUeXBlZEFy
cmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRB
cnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5saW5lIHNpemVf
dCBlbGVtZW50U2l6ZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBl
SW50ODoKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Cisg
ICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgVHlwZUlu
dDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6Cisg
ICAgICAgIHJldHVybiA0OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiA4
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSk7
CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICBj
YXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBl
VWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxv
YXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTaWduZWQoVHlwZWRBcnJheVR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNh
c2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNDbGFt
cGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gVHlwZVVpbnQ4
Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlR5cGVkQXJyYXlUeXBlKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5VHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJh
eXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJU
eXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7
Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0
NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIFVpbnQ4QXJyYXlfaAotI2RlZmluZSBVaW50OEFycmF5X2gKKyNpZm5kZWYgIlVpbnQ4
QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4QXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlw
ZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwot
Ci1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhf
dD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0K
LSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBh
cnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMg
ZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0g
ICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotCi0gICAgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW5s
aW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRv
IHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Owot
fTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVp
bnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJh
eTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYXJyYXks
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3Jl
YXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDhBcnJheTo6VWludDhB
cnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBV
aW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBz
dWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi11c2luZyBKU0M6OlVpbnQ4QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIK
IAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjMgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQ4Q2xhbXBl
ZEFycmF5X2gKLSNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAorI2lmbmRlZiAiVWludDhDbGFt
cGVkQXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCiAKLSNpbmNsdWRlICJV
aW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDogcHVibGljIFVpbnQ4QXJyYXkgewotcHVi
bGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBJdCdzIG9ubHkgbmVlZGVk
IHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGFycmF5Ci0gICAgLy8gd2Fz
IGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBwYXRo
cwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCi0gICAgaW5saW5lIHZvaWQgemVy
b0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0gICAg
aW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpOwotCi0gICAgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29u
c3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBN
YWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3Mg
VHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4o
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVk
QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFy
cmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVk
PFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi12b2lkIFVpbnQ4Q2xhbXBlZEFycmF5
Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsKLX0KLQotdm9pZCBV
aW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi17Ci0g
ICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6
aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAgICAgdmFsdWUgPSAwOwotICAgIGVsc2Ug
aWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9IDI1NTsKLSAgICBkYXRhKClbaW5kZXhd
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKLX0KLQotVWludDhDbGFtcGVk
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBVaW50OEFycmF5KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhDbGFtcGVkQXJyYXk+
KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpVaW50
OENsYW1wZWRBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWlu
dDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9V
aW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc5ICsyMywxMCBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50MTZBcnJheV9oCi0jZGVmaW5lIFVpbnQxNkFy
cmF5X2gKKyNpZm5kZWYgIlVpbnQxNkFycmF5X2giCisjZGVmaW5lICJVaW50MTZBcnJheV9oIgog
Ci0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDogcHVibGljIEludGVn
cmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQxNl90
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
VWludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQg
d2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAg
IC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhv
dXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJy
YXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5
cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVp
bnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFycmF5KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVu
ZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGxlbmd0aCk7
Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoY29uc3Qg
dWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2
QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQ8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5OjpVaW50MTZBcnJh
eShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBz
dWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBV
aW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpVaW50MTZBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAg
KzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc5
ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50MzJBcnJheV9o
Ci0jZGVmaW5lIFVpbnQzMkFycmF5X2gKKyNpZm5kZWYgIlVpbnQzMkFycmF5X2giCisjZGVmaW5l
ICJVaW50MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQzMkFy
cmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3Jl
YXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNo
b3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwg
YmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0
byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0OwotICAgIHVzaW5n
IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gVHlwZVVpbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVp
bnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD47Ci19Owot
Ci1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWlu
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFy
cmF5OjpjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5Pihh
cnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6
OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMy
X3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJf
dD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQz
MkFycmF5OjpVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJh
eUJhc2U8dWludDMyX3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNz
UmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDMyQXJyYXk+KHN0YXJ0LCBl
bmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpVaW50MzJBcnJheTsK
KyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDMyQXJyYXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4
cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCiAj
aW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVz
LmgiCkBAIC0yNTgsNiArMjU5LDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQ
dHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJbml0
aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBpbml0
aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVkQXJy
YXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkp
OwogfQogCiBWTTo6flZNKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgog
I2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgorI2luY2x1
ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0
b3IuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtSYW5kb20uaCIKQEAg
LTM5MCw2ICszOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9maWxl
ciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+
IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9s
bGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdF
eHBDYWNoZTsKICAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFi
bGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJl
ZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYg
dGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVz
dCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBp
ZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBl
aXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0
aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW5ldCA9IDI7CisgICAgCitwdWJsaWM6CisgICAg
dm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNv
dW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5j
cmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6
IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRl
cmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsK
KyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZl
cnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAg
ICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAgICBy
ZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBt
X3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFibGVS
ZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChkZXJl
ZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAg
fQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFzZXRJc0RlZmVycmVkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkg
eyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERl
ZmVycmFibGVSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRmxpcEJ5dGVzX2gKKyNkZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVz
SWZMaXR0bGVFbmRpYW4oYm9vbCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4p
CisgICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRp
YW47CisjZW5kaWYKK30KKworaW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZh
bHVlICYgMHhmZjAwKSA+PiA4KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50
MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQor
ICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUg
JiAweDAwZmYwMDAwKSA+PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAy
NCk7Cit9CisKK2lubGluZSB1aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7Cisg
ICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAg
ICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgo
dmFsdWUgJiAweDAwMDAwMDAwMDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUg
JiAweDAwMDAwMDAwZmYwMDAwMDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAw
MDAwZmYwMDAwMDAwMGxsdSkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAw
MDAwMDAwbGx1KSA+PiAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAw
bGx1KSA+PiA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+
PiA1NikKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZh
bHVlKQoreworICAgIGlmIChzaXplb2YodmFsdWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSAyKQorICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDE2X3Q+KHZhbHVlKSkpOworICAgIGlm
IChzaXplb2YodmFsdWUpID09IDQpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxp
cEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2
YWx1ZSkgPT0gOCkKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0
d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2lu
ZyBXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0
ZXM7CisKKyNlbmRpZiAvLyBGbGlwQnl0ZXNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2Yo
VCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZp
ZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50
OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3
PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNl
dCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVu
Z3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9
IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092
ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXco
YnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCi0gICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0KQotICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29s
IG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElB
TikKLSAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVu
ZGlhbjsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciog
cSkKLXsKLSAgICBjaGFyIHRlbXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsK
LX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dh
cEJ5dGVzKHAsIHAgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNo
YXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEs
IHAgKyAyKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17
Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsK
LSAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0
KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVf
dCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhs
aXR0bGVFbmRpYW4pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAg
ICBjYXNlIDE6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgMjoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1UIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4o
Ynl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBk
aXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVz
IHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7
Ci0gICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNl
QWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVk
KHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVl
LmRhdGE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRh
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAg
ICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdv
dWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0
IHVuYWxpZ25lZCBzdG9yZXMuCi0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1
ZS5kYXRhID0gdmFsdWU7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBz
aXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPiht
X2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsK
LX0KLQotaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsKLX0KLQotdWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhf
dD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi11aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxp
bnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0
YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERh
dGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0
YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90Pihi
eXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6
OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRV
aW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zm
c2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAg
ICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmlu
ZSBEYXRhVmlld19oCi0KLSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZm
ZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCk7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBp
bnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2
X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0
ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJf
dCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0
VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJ
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsg
fQotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJ
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxv
YXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBz
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAg
IHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBp
bmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVy
biBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4g
bV9ieXRlTGVuZ3RoOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0
YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5z
aWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YVZpZXdfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208477</attachid>
            <date>2013-08-10 10:57:08 -0700</date>
            <delta_ts>2013-08-10 11:06:42 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>395925</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZD
MzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1
NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNw
cCAqLzsgfTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTEx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIw
MEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIu
Y3BwICovOyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9
OworCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Qjkx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkw
RjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZC
RjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBG
MkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2
RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNC
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlDb25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9
OworCQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0Yx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
cy5jcHAgKi87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
MTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDhDbGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZC
NUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdB
RTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUx
N0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBB
N0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNw
cCAqLzsgfTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87
IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRB
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNl
cnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU3LDU2
IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBB
QTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENs
YW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
aXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBw
YXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjU1Niw2ICsyNjU2LDEwIEBACiAJCQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERG
R0NvZGVCbG9ja3MuY3BwICovLAogCQkJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdD
b2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0
aW9ucy5oICovLAorCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZC5oICovLAorCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCAqLywKKwkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLywKKwkJCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUx
NjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjExMjJERTE1REQ5QUIzMDA3OTBFM0Eg
LyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLywKQEAgLTI4MjgsNiArMjkzMiw1MiBAQAogCQk3
RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERh
dGFWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcu
aCAqLywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCAqLywKKwkJCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlci5jcHAgKi8sCisJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXIuaCAqLywKKwkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcCAqLywKKwkJCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkI5MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QkEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZC
QjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKKwkJCQkwRjJCNjZC
QzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCisJCQkJ
MEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2
NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMw
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2
QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCisJCQkJMEYyQjY2QzMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2
QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
aCAqLywKKwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2Qzcx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8s
CisJCQkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlSW5saW5lcy5oICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0ludDhBcnJheS5oICovLAorCQkJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5
LmggKi8sCisJCQkJMEYyQjY2Q0MxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5jcHAgKi8sCisJCQkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oICovLAorCQkJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLywKKwkJCQkwRjJCNjZDRjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovLAorCQkJCTBGMkI2NkQwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAqLywKKwkJCQkwRjJCNjZEMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50OENsYW1wZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENjE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2NkQ4MTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLywKKwkJCQkwRjJCNjZEOTE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkRB
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkRDMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2REQxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VG
ODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0
RCAvKiBBcmdMaXN0LmggKi8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3Vt
ZW50cy5jcHAgKi8sCkBAIC0zNTM4LDEyICszNjg4LDE1IEBACiAJCQkJQkMxOEM1MjQwRTE2RkM4
QTAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTY4OENCMTUwRUQxMkI0RTAwMUQ2NDlGIC8qIEFzc2VtYmxlckJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0
QTI2MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4MTZFMUMxNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2Nr
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAg
LyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MEIxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1
RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzU1NSw2ICszNzA4LDcgQEAKIAkJCQlBN0MxRUFFRjE3OTg3QUI2MDAy
OTlEQjIgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVFM0JDMDUw
RTFBRTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAv
KiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjkxNEJDRjk1RjAw
ODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM1NjYsNiArMzcyMCw3IEBACiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJD
IC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAw
NDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcy
N0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29k
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBD
b21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTc2LDYgKzM3
MzEsNyBAQAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNl
cnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0Y2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyog
Q29waWVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMzYwNCw2ICszNzYwLDcgQEAKIAkJCQkw
RjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JB
RjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE3LDYgKzM3NzQs
NyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8qIERGR0Jy
YW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyog
REZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QTE0QzNDRDI5MDA3
QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTAsNiArMzgw
OCw3IEBACiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2QzREMTM2QTEx
RTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
OURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApAQCAtMzY1OCw2ICszODE3LDcgQEAKIAkJCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3
OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3M0E1MzVCMTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjcxLDYgKzM4MzEsNyBAQAog
CQkJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCOTIxQjE2RDAyRjAxMDA1NUE1REIgLyogREZHTm9kZUFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZBNTgxQkIxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNTgxQkMxNTBFOTUz
MDAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEz
MjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdE
ODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY4NCw2ICszODQ1LDggQEAKIAkJCQkwRjIzNUJFRTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBE
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVF
MTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFu
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjkzLDYgKzM4NTYsNyBAQAogCQkJCUE3NDEwMTdGMTc5
REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3Jl
Qm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUw
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZH
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzI2LDYg
KzM4OTAsNyBAQAogCQkJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhp
dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBF
eHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5
cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM3NDYsNiArMzkxMSw3IEBACiAJCQkJMEZFQTBBMkMx
NzBCNjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzhBOTc3RjE3OTczOEQ1MDA5REY3NDQgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBFMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc4
MTE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zODEzLDYgKzM5NzksNyBAQAogCQkJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1
NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2
ODM1RTE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0E0QUUwRDE3OTczQjREMDA1NjEyQjEgLyogSklUU3R1YnNNSVBTLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM4NDAsNiArNDAwNyw3IEBACiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcw
MDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFC
RUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzg1NSw2ICs0MDIzLDcgQEAK
IAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2
OTU3IC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODY2LDYgKzQw
MzUsNyBAQAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODQsNiArNDA1NCw3IEBACiAJCQkJODZF
M0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dl
YWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJC
OTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1h
cC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTE0LDYgKzQwODUsNyBAQAogCQkJCUE3RTVBQjM4MTc5
OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDRDE0QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJ
bnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCNzIzQjgxMkQ3REE2RjAwM0JENUVE
IC8qIE1hY2hpbmVTdGFja01hcmtlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTI2LDYgKzQwOTgs
NyBAQAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3
MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzAyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1Nl
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTM0LDE0ICs0MTA3LDE3IEBACiAJCQkJQzIxMTIyRTMx
NUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyQTBFMTZGQ0MyMDBCMzQ0NjAgLyogTWF0aE9i
amVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwMjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGOTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3QjE0
RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUJGMzAwMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUJGMzAyMTU2MEYwNkEwMDhFOTIyMiAvKiBO
YW1lSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUJGMzA0MTU2MEYwNkEwMDhFOTIy
MiAvKiBOYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURC
MDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3Ry
dWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyog
Tm9kZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzk3MSw2ICs0MTQ3LDcgQEAKIAkJCQkwRjM0
QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQw
RDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTUx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzk5OSw5ICs0MTc2LDExIEBACiAJCQkJMTQ3NEMzM0Ix
NkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZE
RTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJl
Z0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJl
Z0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIg
LyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNDAyNCw2ICs0MjAzLDcg
QEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
b3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZE
MTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC00MDM2LDcgKzQyMTYsOSBAQAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAv
KiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2
QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0
QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBT
dHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RkQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNTI2MEUxNkZDQTcwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNDgsNiArNDIzMCw4IEBACiAJCQkJQzJGRTE4QTQx
NkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJl
U2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcw
MTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAv
KiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUw
OTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC00MDU3LDcgKzQyNDEsMTAgQEAKIAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1
bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3
OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4
MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzAzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTVENTM3MjZGMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFC
MTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVCM0VDRDE2MjM3
RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLApAQCAt
NDQ4OSw2ICs0Njc2LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIg
LyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RG
RDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcw
NDE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZy
YW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTE0LDYg
KzQ3MDIsNyBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYw
MEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3MjE2
RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNFMTMzMDE3OTYyNENEMDBFNERFQTggLyogREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4NTM0QjE3MjND
REE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNDU0Myw2ICs0NzMyLDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZH
Tm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFE
NyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAv
KiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0NkE2RjcxMDBD
RjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFQjE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjE2
LDYgKzQ4MDYsNyBAQAogCQkJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNo
YXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENBN0RDQTAwODVGM0M2
IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NTUxMDdFQzBF
NzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZF
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDJFMzEzNTEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MkUzMTM3MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTdGFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTQ2NjgsMTEgKzQ4NTksMTMgQEAKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFMzE1
RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcy
NzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8q
IEpTT2JqZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEw
QjJEMCAvKiBKU09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZFNjk1MEU1QjVG
OTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpT
U2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY5MCw2ICs0ODgzLDcgQEAKIAkJCQlB
NzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
V3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDcxMiw2ICs0OTA2LDcgQEAKIAkJCQk4
NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVEMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRT
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ3NjIsMTcgKzQ5NTcsMjEgQEAKIAkJCQkxNDc0
QzMzQzE2QUEyRDlCMDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Rh
dGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1
IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkw
MDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEODg1MEVEMjFDM0QwMEI4OTYxOSAvKiBT
YW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA0MDJDMEU2QTc2
NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3
MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MDUsNiArNTAwNCw3IEBA
CiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NF
MDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDIzICs5OCwyMyBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZv
ckluZGV4CiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNzSW5mbyhjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRB
cnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50ODoKKyAgICBjYXNlIFR5
cGVJbnQ4OgogICAgICAgICByZXR1cm4gSklUSW50OEFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJh
eUludDE2OgorICAgIGNhc2UgVHlwZUludDE2OgogICAgICAgICByZXR1cm4gSklUSW50MTZBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKICAgICAg
ICAgcmV0dXJuIEpJVEludDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDg6CisgICAg
Y2FzZSBUeXBlVWludDg6CiAgICAgICAgIHJldHVybiBKSVRVaW50OEFycmF5OwotICAgIGNhc2Ug
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgcmV0dXJuIEpJVFVpbnQ4Q2xhbXBlZEFy
cmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1w
ZWQ6CisgICAgICAgIHJldHVybiBKSVRVaW50OENsYW1wZTsKKyAgICBjYXNlIFR5cGVVaW50MTY6
CiAgICAgICAgIHJldHVybiBKSVRVaW50MTZBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50
MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgogICAgICAgICByZXR1cm4gSklUVWludDMyQXJyYXk7
Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgogICAg
ICAgICByZXR1cm4gSklURmxvYXQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6
CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKICAgICAgICAgcmV0dXJuIEpJVEZsb2F0NjRBcnJheTsK
ICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTIyLDYgKzEyMiwzMyBAQCBpbmxp
bmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNzCiAgICAgfQogfQogCitpbmxpbmUg
VHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoSklUQXJyYXlNb2Rl
IG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQ4QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlSW50ODsKKyAgICBjYXNlIEpJVEludDE2QXJyYXk6CisgICAgICAg
IHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBKSVRJbnQzMkFycmF5OgorICAgICAgICByZXR1
cm4gVHlwZUludDMyOworICAgIGNhc2UgSklUVWludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKKyAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgorICAgICAgICByZXR1
cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQzMjsKKyAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDMyOworICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgcmV0dXJu
IE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5
TW9kZUZvclN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoaXNPcHRp
bWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25U
b1N0cmluZyhBcnJhCiAgICAgfQogfQogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBl
KEFycmF5OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBJbnQ4
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50ODsKKyAgICBjYXNlIEludDE2QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBJbnQzMkFycmF5OgorICAgICAgICBy
ZXR1cm4gVHlwZUludDMyOworICAgIGNhc2UgVWludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVVaW50ODsKKyAgICBjYXNlIFVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIFVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZVVpbnQxNjsKKyAgICBjYXNlIFVpbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQz
MjsKKyAgICBjYXNlIEZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwor
ICAgIGNhc2UgRmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiB2b2lk
IEFycmF5TW9kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dCh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29udmVyc2lvbigpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIGNvbnN0IGNoYXIqIGFycmF5Q2xhc3NUb1N0cmlu
ZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhBcnJheTo6
U3BlY3VsYXRpb24pOwogY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6
OkNvbnZlcnNpb24pOwogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpU
eXBlKTsKKwogY2xhc3MgQXJyYXlNb2RlIHsKIHB1YmxpYzoKICAgICBBcnJheU1vZGUoKQpAQCAt
MzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6
OlN0cmluZzsKICAgICB9CiAgICAgCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvVHlwZWRBcnJheVR5cGUodHlwZSgpKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjY3LDM3ICsy
NjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25B
cmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQz
Ml90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0yODczLDQ2ICsyODQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVk
QXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgwLDM3ICsyNTgwLDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMo
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5
VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5v
ZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODcx
LDQ2ICsyODQ3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQx
NkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50
OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9
IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUp
KQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDMyICs1
ODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgfQog
fQogICAgIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBl
ZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgcmV0
dXJuICZtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
SW50MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAm
bV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6Rmxv
YXQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJldHVybiAm
bV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVK
SVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5TW9k
ZSBhcnJheU1vZGUsIEluZGV4aW5nVHlwZSBzaGFwZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS5hcnJheUNsYXNzKCkpIHsKQEAgLTY5NCw4ICs2NjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAg
IAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVz
Y3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgCiAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogICAg
ICAgICByZXR1cm47CkBAIC03MjcsMjIgKzY5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
aGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBl
eHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0g
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogot
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4cGVj
dGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAg
LTI1OTQsOCArMjU1NywxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUo
SklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2Rl
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSog
bm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwor
ICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMo
KSk7CkBAIC0yNjEyLDE2ICsyNTc3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRj
aCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRu
ZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAg
ICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJl
Zyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAg
aWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVk
KHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3
byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQxNihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzMiwxMiArMjU5OCwxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRu
ZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0
IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVudFNp
emUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNTRVJU
KGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAobm9k
ZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNv
dmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKQEAgLTI2NTIsOCArMjYxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5v
ZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVk
QXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BS
UmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3MCw4ICsyNjM4
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051bWJl
cigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAg
ICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUp
KSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAg
ICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjg2LDggKzI2NTQsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0g
ICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7
CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRj
aFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsK
QEAgLTI2OTYsOCArMjY2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7
Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1w
ZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0g
MSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMs
IHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
ICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0yNzE3
LDcgKzI2ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAg
ICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICBp
ZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJy
YW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5j
aElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdw
ciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0Miw5ICsy
NzEwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFT
U0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
dXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0
aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25l
KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2Miw4ICsyNzMwLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVt
ZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlz
RmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzc5LDggKzI3NDksOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQp
KSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAg
ICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAgICAg
ICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsKQEAg
LTI4MDEsOCArMjc3MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwg
Tm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgxNywxMCArMjc5MCwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBu
b2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0
YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
dXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0
aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAgIG91
dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfQog
ICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVG
UFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1
ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDI2LDggKzQwMDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7
CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Io
bm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVl
KCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDEsOCArNDAxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2RlLT5h
cnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE0Myw4ICs0MTE5LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9k
ZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE4NCwxNiArNDE1
OCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAg
IGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAg
QVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0K
KyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9D
aGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0LDEwICsx
OTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQ
cm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50
U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBH
UFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUp
OworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2
b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1
bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNz
aW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMDks
OCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAg
IHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBK
SVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1w
V2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1w
V2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9k
ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw2ICs0OSwyNCBAQCBwcml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAK
K2NsYXNzIERlZmVyR0NGb3JBV2hpbGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVy
R0NGb3JBV2hpbGUpOworcHVibGljOgorICAgIERlZmVyR0NGb3JBV2hpbGUoSGVhcCYgaGVhcCkK
KyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIG1faGVhcC5pbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgfQorICAgIAorICAgIH5EZWZlckdDRm9yQVdoaWxlKCkKKyAg
ICB7CisgICAgICAgIG1faGVhcC5kZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRGVmZXJHQ19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVm
Q291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBvYmplY3QgdGhhdCBtYXkgaGF2
ZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0byBpbmNvbWluZyByZWZlcmVu
Y2VzIGZyb20gdGhlIGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGluCisvLyByZXZlcnNlOiB0aGUg
b2JqZWN0IGtub3dzIGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBTdWNoIG9iamVjdHMgYWxzbwor
Ly8gaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBoYXZlIHJlZmVyZW5jZXMgYmFj
ayBpbnRvIHRoZSBHQworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdD
SW5jb21pbmdSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkPFQ+IHsKK3B1
YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAgICAgIDogbV9lbmNvZGVkUG9p
bnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkKCkK
KyAgICB7CisgICAgICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkpCisgICAgICAgICAgICBkZWxl
dGUgdmVjdG9yT2ZDZWxscygpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZJbmNv
bWluZ1JlZmVyZW5jZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNBbnlJbmNvbWlu
ZygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5z
aXplKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogaW5jb21pbmdSZWZlcmVuY2VBdChzaXpl
X3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQW55SW5jb21pbmcoKSk7
CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAgQVNTRVJUKCFpbmRl
eCk7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBJ
dCdzIGdlbmVyYWxseSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LCBzaW5j
ZSBpZiB0aGlzCisgICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUgc3VwcG9zZWQgdG8gYWRkIHRo
aXMgb2JqZWN0IHRvIHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2FsbCBHQ0luY29taW5nUmVmQ291
bnRlZFNldDo6YWRkUmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBib29sIGFkZEluY29taW5nUmVm
ZXJlbmNlKEpTQ2VsbCopOworICAgIAorICAgIC8vIEEgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMg
dHJ1ZSBpZiB3ZSB3aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisgICAgLy8gcmVmZXJlbmNlLCBh
bmQgZmFsc2UgaWYgd2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0aGUgb2JqZWN0LAorICAgIC8v
IGFuZCBpZiBpdCBkb2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4gSW4gZ2VuZXJhbCwgeW91IGRv
bid0IHdhbnQKKyAgICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmlsdGVyIGZ1bmN0aW9uIHRoYXQg
Y2FuIHJldHVybiBmYWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUgYWxzbyB3YWxraW5nIHRoZSBH
QydzIGxpc3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rpb25UeXBlPgorICAg
IGJvb2wgZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYpOworICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludHB0cl90IHNpbmdsZXRvbkZsYWcoKSB7IHJldHVy
biAxOyB9CisgICAgCisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxzKCkgY29uc3QgeyByZXR1cm4g
IShtX2VuY29kZWRQb2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsgfQorICAgIGJvb2wgaGFzQW55
SW5jb21pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50ZXI7IH0KKyAgICBib29s
IGhhc1NpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUluY29taW5nKCkgJiYgIWhhc1Zl
Y3Rvck9mQ2VsbHMoKTsgfQorICAgIAorICAgIEpTQ2VsbCogc2luZ2xldG9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8SlNDZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5zaW5nbGV0b25GbGFnKCkpOwor
ICAgIH0KKyAgICAKKyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rvck9mQ2VsbHMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VmVjdG9yPEpTQ2VsbCo+ID4obV9lbmNvZGVkUG9pbnRlcik7CisgICAg
fQorICAgIAorICAgIC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDogdGhpcyBpcyBhIEpTQ2VsbCou
CisgICAgLy8gU2luZ2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBpcyBhIHBvaW50ZXIgdG8gYSB2
ZWN0b3Igb2YgY2VsbHMuCisgICAgdWludHB0cl90IG1fZW5jb2RlZFBvaW50ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRl
ZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVy
ZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNp
bmdsZXRvbkZsYWcoKTsKKyAgICAgICAgc2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNT
RVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6Omhl
YXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0
b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVj
dG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsK
KyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rv
cik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5
cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46
OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0
aW9uKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIWlz
RGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVChyZWZDb3VudCgpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgQVNTRVJUKGlzRGVmZXJyZWQoKSk7CisgICAg
ICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVuY3Rp
b24oc2luZ2xldG9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUlu
Y29taW5nKCkpOworICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQor
ICAgICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvck9mQ2VsbHMoKS0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHZlY3Rvck9mQ2VsbHMoKS0+
YXQoaSkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+
YXQoaS0tKSA9IHZlY3Rvck9mQ2VsbHMoKS0+bGFzdCgpOworICAgICAgICB2ZWN0b3JPZkNlbGxz
KCktPnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxz
KCktPnNpemUoKSA+PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlm
ICh2ZWN0b3JPZkNlbGxzKCktPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgdmVjdG9yT2ZD
ZWxscygpOworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFo
YXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElzRGVmZXJyZWQoZmFsc2UpOwor
ICAgIH0KKyAgICAgICAgCisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHZlY3Rvck9mQ2VsbHMoKS0+YXQoMCkpIHwgc2luZ2xldG9uRmxhZygpOworICAgIEFT
U0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRf
aAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFQgPSBzb21lIHN1YnR5cGUgb2YgR0NJbmNvbWluZ1JlZkNvdW50ZWQsIG11c3Qgc3Vw
cG9ydCBhIGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpCisvLyBtZXRob2QuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQgeworcHVibGljOgorICAgIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0KCk7CisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCk7
CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBuYXRpdmUgb2JqZWN0IGlzIG5ldyB0
byB0aGlzIHNldC4KKyAgICBib29sIGFkZFJlZmVyZW5jZShKU0NlbGwqLCBUKik7CisgICAgCisg
ICAgdm9pZCBzd2VlcCgpOworICAgIAorICAgIHZvaWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXMgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlQWxsKEpTQ2Vs
bCopOworICAgIHN0YXRpYyBib29sIHJlbW92ZURlYWQoSlNDZWxsKik7CisgICAgCisgICAgVmVj
dG9yPFQqPiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9ieXRlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAorI2RlZmluZSBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCgpCisgICAgOiBtX2J5dGVzKDApCit7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6fkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBpLS07KQorICAg
ICAgICBtX3ZlY3RvcltpXS0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZUFsbCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+
OjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBUKiBvYmplY3QpCit7CisgICAgaWYgKCFvYmpl
Y3QtPmFkZEluY29taW5nUmVmZXJlbmNlKGNlbGwpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBvYmplY3QtPmdjU2l6
ZUVzdGltYXRlSW5CeXRlcygpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6c3dlZXAoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
VCogb2JqZWN0ID0gbV92ZWN0b3JbaV07CisgICAgICAgIHNpemVfdCBzaXplID0gb2JqZWN0LT5n
Y1NpemVFc3RpbWF0ZUluQnl0ZXMoKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29t
aW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBtX2J5dGVzIC09IHNpemU7CisgICAgICAgIG1fdmVjdG9yW2ktLV0gPSBtX3ZlY3Rvci5sYXN0
KCk7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVBbGwo
SlNDZWxsKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVEZWFkKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2VsbCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU4
LDYgKzM1OCwxNCBAQCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQCiAg
ICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6
YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBp
ZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAgICAgICAg
Y29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShidWZmZXIt
PmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6bWFya1By
b3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAg
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsK
QEAgLTYyMSwxNCArNjI5LDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAgICAgcmV0
dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6OmV4dHJh
U2l6ZSgpCit7CisgICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJz
LnNpemUoKTsKK30KKwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBtX29iamVj
dFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1vcnlVc2Fn
ZTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXpl
KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHko
KTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2Uu
Y2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xv
YmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1LDYgKzc1OCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3Qo
U3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFS
S0VEKCk7CisgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJz
KTsKKyAgICAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAg
ICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5z
aXplKCkpOwpAQCAtOTI0LDEyICs5NDIsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJh
bERlcHRoKCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1l
bnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsK
ICAgICAKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNy
ZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJy
YWxEZXB0aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBA
QAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3Iu
aCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJI
YW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVC
bG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUo
KTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRo
ZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSw2ICsxODIsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAg
ICAgIAogICAgICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkg
eyByZXR1cm4gbV9qaXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRk
UmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcik7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpAQCAtMjMwLDYgKzIzNSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3Io
KTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAg
ICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1l
bnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBl
IG1faGVhcFR5cGU7CkBAIC0yNDUsNiArMjUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEJsb2NrQWxsb2NhdG9yIG1fYmxvY2tBbGxvY2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1f
b2JqZWN0U3BhY2U7CiAgICAgICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAg
ICBHQ0luY29taW5nUmVmQ291bnRlZFNldDxBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAg
ICAgICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hF
QVBfUFJPRklMSU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRE
b3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3Vz
U2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJh
eVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2Ug
aXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRo
ZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNr
ZWQgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDks
MTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2Ug
SklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNj
cmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
VWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRB
cnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9y
SklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJh
eSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5
RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRv
cigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWlu
dDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3Vu
ZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRG
bG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5Ogot
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwot
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBU
eXBlZEFycmF5dFR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5
TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0
eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0xNjY4LDggKzE2MjMsMTAgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
Q2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5
X3ZhbF9nZW5lcmljKSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRB
cnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAg
IC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRvIHVzZSB0aGUgY2xh
c3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAvLyBjbG9iYmVyaW5nIHRoZSBy
ZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVydHku
CiAKQEAgLTE2ODksMTkgKzE2NDYsMTkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5R2V0QgogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3Ry
dWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2Ns
YXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2Up
OworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAg
ICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlz
U2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9hZDhTaWduZWQoQmFzZUluZGV4KGJhc2UsIHBy
b3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBsb2FkOChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5
bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5l
c3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAg
ICAgICAgICAgbG9hZDE2U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28p
LCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJ
bmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE3MTQs
NyArMTY3MSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAg
ICB9CiAgICAgCiAgICAgSnVtcCBkb25lOwotICAgIGlmIChlbGVtZW50U2l6ZSA9PSA0ICYmIHNp
Z25lZG5lc3MgPT0gVW5zaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKHR5cGUgPT0gVHlwZVVp
bnQzMikgewogICAgICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVx
dWFsLCByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAKICAgICAgICAg
Y29udmVydEludDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CkBAIC0xNzQwLDgg
KzE2OTcsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAg
IHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBl
ZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQor
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAg
QVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwpA
QCAtMTc1OCwxMSArMTcxNywxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRB
cnJheUdlCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7Cisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9G
b3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUp
IHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAg
ICBsb2FkRmxvYXQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1Qw
KTsKICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7CkBAIC0x
Nzg5LDggKzE3NDgsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlH
ZQogICAgIHJldHVybiBzbG93Q2FzZXM7ICAgIAogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNz
LCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRpbmcpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChp
c0ludCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4MDgsOCArMTc2OSw4
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNz
SW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRy
ZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlw
ZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7
CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgyMSwxMSArMTc4MiwxMSBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9h
ZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xv
dwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2Ny
YXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIGlmIChyb3VuZGluZyA9PSBD
bGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChzaWduZWRuZXNzLCBzaWduZWRuZXNzID0gVW5zaWduZWRUeXBlZEFy
cmF5KTsKKyAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50
U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CiAgICAg
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVh
dGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICB4b3Iz
MihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODM2LDcgKzE3OTcsNyBAQCBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgICAgIGluQm91bmRzLmxp
bmsodGhpcyk7CiAgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBzdG9yZTgo
ZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkp
OwogICAgICAgICBicmVhazsKQEAgLTE4NTMsOCArMTgxNCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBl
KQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQpAQCAtMTg3Miw4ICsxODM1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlQdQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0
Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0
b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkp
KTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVh
cmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
Y2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODk4LDkgKzE4NjEs
OSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgCiAgICAg
Ly8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBl
eGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1
bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3Jh
Z2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAg
IHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CiAgICAgY2FzZSA0OgogICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJl
Z1QwKTsKICAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAg
KzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDEw
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
IAotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQyLDEz
ICszOSw5IEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxl
ID0gdHJ1ZTsKLSAgICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBp
ID0gaS0+bV9uZXh0VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAg
ICAgICAgICAgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wg
aXNOZXV0ZXJhYmxlID0gIW1fcGluQ291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJh
YmxlKQorICAgIGlmIChpc05ldXRlcmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIo
cmVzdWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsK
QEAgLTU2LDM2ICs0OSwxMyBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZl
ckNvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmly
c3RWaWV3KSB7Ci0gICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3
OwotICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVO
ZXV0ZXJhYmxlIHx8IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVu
dC0+bmV1dGVyKCk7Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAg
IGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7Cisg
ICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAg
ICAgICAgICAgIHZpZXctPm5ldXRlcigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAg
dmlldy0+bV9idWZmZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZp
ZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAg
ICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZp
ZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2
aWV3KQotewotICAgIEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmll
dy0+bV9uZXh0VmlldykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZp
ZXctPm1fcHJldlZpZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXct
Pm1fcHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2Zp
cnN0VmlldyA9PSB2aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7
Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBu
YW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNiBAQAog
I2lmbmRlZiBBcnJheUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNs
dWRlICJXZWFrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNB
cnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Niw3IEBAIHB1Ymxp
YzoKICAgICB7IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisgICAg
CiAgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNpemVJ
bkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiArODcsMTMgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJyYXlC
dWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlCdWZm
ZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25l
ZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNv
dXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBk
YXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxl
bWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC0xMDIsOSArMTA0LDkgQEAgcHVi
bGljOgogCiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
biwgaW50IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNs
aWNlKGludCBiZWdpbikgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOworICAgIAorICAgIHZv
aWQgcGluKCk7CisgICAgdm9pZCB1bnBpbigpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVy
biAhbV9jb250ZW50cy5tX2RhdGE7IH0KQEAgLTExOSw4ICsxMjEsMTEgQEAgcHJpdmF0ZToKICAg
ICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRp
YyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisg
ICAgdW5zaWduZWQgbV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVu
dHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdl
YWs8SlNBcnJheUJ1ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFt
cFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NCwxMiBAQCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoZGF0YSwg
Ynl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNy
ZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpE
b250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyArMTg1LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlC
dWZmZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9w
aW5Db3VudCgwKQogewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAt
MjE4LDYgKzIyOSwxNiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5k
CiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2
b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBB
cnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJh
eUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWdu
ZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBv
bGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICAvLyBEbyBu
b3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgpAQCAtMjUzLDcgKzI3
NCw1IEBAIEFycmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXI7Ci11c2luZyBKU0M6OkFycmF5
QnVmZmVyQ29udGVudHM7Ci0KICNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDM2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1BcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0gICAgOiBtX2J5dGVPZmZz
ZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCi0gICAgLCBtX2J1ZmZl
cihidWZmZXIpCi0gICAgLCBtX3ByZXZWaWV3KDApCi0gICAgLCBtX25leHRWaWV3KDApCitBcnJh
eUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVPZmZz
ZXQoYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQorICAgICAgICAs
IG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAoc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0g
ICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7CiB9CiAK
IEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7Ci0gICAgaWYgKG1fYnVmZmVy
KQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKKyAgICBpZiAoIW1faXNOZXV0
ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZShib29s
IGZsYWcpCiB7Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9mZnNldCA9IDA7CisgICAg
aWYgKGZsYWcgPT0gbV9pc05ldXRlcmFibGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2lzTmV1dGVyYWJsZSA9IGZsYWc7CisgICAgCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChmbGFnKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsK
KyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5waW4oKTsKIH0KIAotfQorfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKICNk
ZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KKyNp
bmNsdWRlICJUeXBlZEFycmF5VHlwZSIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM3LDQ0ICszNyw0MyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZD
b3VudGVkPEFycmF5QnVmZmVyVmlldz4gewotcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewot
ICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhD
bGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAg
IFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0g
ICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgcHVibGljOgorICAgIHZpcnR1
YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKIAorICAgIGJvb2wgaXNOZXV0
ZXJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVy
LT5pc05ldXRlcmVkKCk7CisgICAgfQorICAgIAogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlcigpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKICAgICB9CiAKICAgICB2
b2lkKiBiYXNlQWRkcmVzcygpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwog
ICAgIH0KIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAogICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4g
bV9ieXRlT2Zmc2V0OwogICAgIH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKIAotICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05l
dXRlcmFibGUgPSBmbGFnOyB9CisgICAgdm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZyk7CiAg
ICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmV1dGVyYWJsZTsgfQog
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVmZmVyVmlldygpOwogCi1w
cm90ZWN0ZWQ6CisgIHByb3RlY3RlZDoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZm
ZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKIAog
ICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCk7CkBAIC04MywxNCArODIsMTcgQEAgcHJvdGVjdGVkOgogCiAgICAgaW5saW5lIGJvb2wg
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KTsKIAotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50
IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVu
c2lnbmVkKiBsZW5ndGgpOworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRB
bmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2ln
bmVkKiBsZW5ndGgpOwogCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3Vi
LXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bnVtRWxlbWVudHMpCisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgaWYgKGlz
TmV1dGVyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVv
ZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNpemVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTEwNSw3ICsxMDcsMTAgQEAgcHJvdGVjdGVkOgogICAgIC8vIElucHV0IG9mZnNl
dCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAv
LyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5n
IGJ1ZmZlcidzIHZpZXcuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZv
aWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQg
Km51bUVsZW1lbnRzKQorICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykK
ICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0
ZU9mZnNldCkgLyBzaXplb2YoVCk7CiAgICAgICAgIGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7
CkBAIC0xMTksMTkgKzEyNCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICpudW1FbGVtZW50cyA9
IHN0ZDo6bWluKHJlbWFpbmluZ0VsZW1lbnRzLCAqbnVtRWxlbWVudHMpOwogICAgIH0KIAotICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KICAgICAvLyBUaGlz
IGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBBcnJheUJ1ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5
dGUgb2Zmc2V0LgogICAgIHZvaWQqIG1fYmFzZUFkZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5
dGVPZmZzZXQgOiAzMTsKICAgICBib29sIG1faXNOZXV0ZXJhYmxlIDogMTsKIAotcHJpdmF0ZToK
KyAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0g
ICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3OwogfTsKIAogYm9vbCBBcnJheUJ1ZmZlclZp
ZXc6OnNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkK
QEAgLTE3Niw3ICsxNzcsOCBAQCBib29sIEFycmF5QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1
bnNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxh
dGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUs
IHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCit2b2lkIEFycmF5QnVmZmVyVmll
dzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQg
YXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQogewogICAgIGlmIChzdGFydCA8
IDApCiAgICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6ZTsKQEAgLTE5Niw2ICsxOTgsNCBAQCB2b2lk
IEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCi11c2luZyBKU0M6OkFycmF5QnVmZmVyVmlldzsKLQogI2VuZGlmIC8vIEFycmF5QnVmZmVy
Vmlld19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJ
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNo
VGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0
ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFu
ZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07
CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0
Niw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVj
dFZpcnR1YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZD
bGFzc05hbWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0VHlwZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlT
dG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZp
ZXcuY3BwCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0RhdGFWaWV3LmNwcDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9u
IFZhbHVlIHsKKyAgICBUIGRhdGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAg
aWYgKCFidWZmZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyLCAwLCBsZW5ndGgpOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVp
bnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZz
ZXQgKyBjaGVja2VkTGVuZ3RoOworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8
fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRl
T2Zmc2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwg
bV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBC
eXRlcyhib29sIGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1
cm4gbGl0dGxlRW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRp
ZgorfQorCitpbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBj
aGFyIHRlbXAgPSAqcDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAg
KyAxKTsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7Cisg
ICAgc3dhcEJ5dGVzKHAsIHAgKyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30K
Kworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5
dGVzKHAsIHAgKyA3KTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0
ZXMocCArIDIsIHAgKyA1KTsKKyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3Rh
dGljIHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29s
IGxpdHRsZUVuZGlhbikKK3sKKyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4p
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAg
ICAgICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSA0OgorICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIDg6CisgICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3
OjpnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkp
IHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5j
ZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qg
c3VwcG9ydCB1bmFsaWduZWQgbG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5
KHZhbHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBi
eXRlT2Zmc2V0LCBzaXplb2YoVCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVz
LCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEg
YnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBz
dG9yZXMuCisgICAgVmFsdWU8VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFs
dWU7CisgICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxp
dHRsZUVuZGlhbik7CisgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNz
KSArIGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90
IERhdGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsK
K30KKwordWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsKK30KKworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwor
fQorCit1aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3Qg
RGF0YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVp
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRs
ZUVuZGlhbiwgZWMpOworfQorCitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQor
Citkb3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRv
dWJsZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6
OnNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4o
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDM5ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcu
aCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRl
c1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQ
dHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNp
emVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAo
Ynl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zm
c2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0
aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2Vk
TWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2Ug
SlNDIHsKIAogRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5
QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wg
bmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFO
KQotICAgIHJldHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5k
aWFuOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBx
KQotewotICAgIGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwot
fQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2Fw
Qnl0ZXMocCwgcCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hh
ciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwg
cCArIDIpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsK
LSAgICBzd2FwQnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwot
ICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQp
OwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90
IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxp
dHRsZUVuZGlhbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAg
IGNhc2UgMToKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAyOgotICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LVQgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihi
eXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRp
cmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMg
dGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsK
LSAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VB
ZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQo
dmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUu
ZGF0YTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAg
ICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291
bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQg
dW5hbGlnbmVkIHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVl
LmRhdGEgPSB2YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNp
emVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1f
YmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwot
fQotCi1pbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOwotfQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90
PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90
IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lk
IERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmll
dyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6
bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxl
bmd0aCA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNp
bmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsg
fQorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNl
KGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50
MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1
aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2
X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisgICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQorICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQg
Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0K
KyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
KyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0KKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJf
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2
b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2
NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRS
YW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1f
Ynl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2ln
bmVkIG1fYnl0ZUxlbmd0aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRh
Vmlldy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gK
ICNkZWZpbmUgRGF0YVZpZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcu
aD4KKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CituYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJW
aWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
TGVuZ3RoOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gc2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJ
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdl
dFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90
IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAg
ICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWlu
dDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9h
dCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBz
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2Us
IGVjKTsgfQotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVp
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMy
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1
ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsg
fQotICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBz
ZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRG
bG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNv
bnN0CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5
VHlwZSBnZXRUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7
CiAgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2
YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3Qg
eyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVv
ZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBU
IGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRE
YXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0KICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZp
ZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJy
YXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
ICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDg0ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotI2lmbmRlZiBGbG9hdDMyQXJyYXlfaAotI2RlZmluZSBGbG9hdDMyQXJyYXlfaAor
I2lmbmRlZiAiRmxvYXQzMkFycmF5X2giCisjZGVmaW5lICJGbG9hdDMyQXJyYXlfaCIKIAotI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5
QmFzZTxmbG9hdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3du
IHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0
aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0
LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZs
b2F0Pjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAg
IGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBpbmxpbmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3Ig
dmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxm
bG9hdD47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQz
MkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZs
b2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRB
cnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0MzJB
cnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5
LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zs
b2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDk4ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRmxvYXQ2
NEFycmF5X2gKLSNkZWZpbmUgRmxvYXQ2NEFycmF5X2gKKyNpZm5kZWYgIkZsb2F0NjRBcnJheV9o
IgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBGbG9hdDY0QXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
Y3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8g
U2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2ls
bCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5
IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZv
aWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUeXBlRmxvYXQ2NDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0
NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICAKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07
Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxG
bG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9h
dDY0QXJyYXk6OmNyZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+
KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFy
cmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1G
bG9hdDY0QXJyYXk6OkZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlC
YXNlPGRvdWJsZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwg
ZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5
OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJW
aWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
Y2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citw
cm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PiBjcmVhdGUoY29uc3QgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgQWRhcHRv
cjo6VHlwZSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUq
PihiYXNlQWRkcmVzcygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0KEdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAg
IH0KKyAgICAKKyAgICBib29sIHNldFJhbmdlKGNvbnN0IEFkYXB0b3I6OlR5cGUqIGRhdGEsIHNp
emVfdCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4g
c2V0UmFuZ2VJbXBsKAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSksCisgICAgICAgICAgICBkYXRhTGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpLCBv
ZmZzZXQgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHpl
cm9SYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBy
ZXR1cm4gemVyb1JhbmdlSW1wbChvZmZzZXQgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSksIGxlbmd0
aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGxl
bmd0aCgpCisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZW5n
dGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBlKTsKKyAgICB9CisKKyAgICBBZGFwdG9yOjpUeXBl
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZGF0YSgpW2luZGV4XTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCk7Cisg
ICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0
aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9m
ZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAg
ICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5Vmll
dygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVP
ZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVv
ZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5
Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgp
LCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAor
ICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghdmVyaWZ5U3ViUmFuZ2UoYnVmLCBieXRlT2Zmc2V0
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEdlbmVyaWNUeXBlZEFycmF5VmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRB
cnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFs
aXplZCgKKyAgICB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdl
bmVyaWNUeXBlZEFycmF5Vmlldzo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAoreworICAgIHVuc2ln
bmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwg
ZW5kLCBsZW5ndGgoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgY2xhbXBPZmZzZXRBbmROdW1F
bGVtZW50czxBZGFwdG9yOjpUeXBlPihidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCAmb2Zmc2V0LCAm
bGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
SGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgQnV0
dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpA
QCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyBy
ZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3Ro
KHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0K
ICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJy
YXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVy
KSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3Rh
dGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkp
IC0gMTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90
IHB1YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRo
ZSBhcnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcg
dGhlIHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAg
dWludDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3Bl
cnR5IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRo
aXMsIGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAg
c3RydWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogYnVmZmVyOworICAgICAgICB9
IHR5cGVkQXJyYXk7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50OEFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
ICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw4MCArMjMsMTAgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSW50OEFycmF5X2gKLSNkZWZpbmUgSW50OEFy
cmF5X2gKKyNpZm5kZWYgIkludDhBcnJheV9oIgorI2RlZmluZSAiSW50OEFycmF5X2giCiAKLSNp
bmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEludDhBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3du
IHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0
aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0
LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhf
dD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBj
b25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBpbmxpbmUgSW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNp
YmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhf
dD47Ci19OwotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8
SW50OEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5
OjpjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50
OEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVk
PEludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxl
bmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50
OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpT
Qzo6SW50OEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBJbnQ4
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJh
eS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yMyw4MCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSW50MTZBcnJheV9oCi0jZGVmaW5lIEludDE2QXJyYXlfaAorI2lmbmRl
ZiAiSW50MTZBcnJheV9oIgorI2RlZmluZSAiSW50MTZBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50
ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlC
dWZmZXI7Ci0KLWNsYXNzIEludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTxpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2
QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgaW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUg
ZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2Ug
cmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50MTZfdD46
OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0K
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgaW5saW5lIEludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZp
c2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50
MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+Ojpj
cmVhdGU8SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJ
bnQxNkFycmF5OjpjcmVhdGUoY29uc3QgaW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5
PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5
OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2
X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6
Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1JbnQxNkFycmF5
OjpJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQxNl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZB
cnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDE2QXJyYXk7CisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAg
KzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc3
ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbnQzMkFycmF5X2gK
LSNkZWZpbmUgSW50MzJBcnJheV9oCisjaWZuZGVmICJJbnQzMkFycmF5X2giCisjZGVmaW5lICJJ
bnQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVk
KHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7
Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5l
IEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1
cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19OwotCi1Q
YXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShj
b25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsK
LX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDMyQXJy
YXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEludDMyQXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gSlNBcnJheUJ1ZmZlcjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlciIsICZC
YXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlcil9Owor
CitKU0FycmF5QnVmZmVyOjpKU0FycmF5QnVmZmVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQorICAgICwgbV9pbXBsKGFycmF5QnVmZmVyLmdldCgpKQoreworfQorCit2b2lk
IEpTQXJyYXlCdWZmZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgbV9pbXBsKTsK
K30KKworSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgIFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZl
cikKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5QnVmZmVyPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlcih2bSwg
c3RydWN0dXJlLCBidWZmZXIpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbywKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNl
bGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
Kwordm9pZCBKU0FycmF5QnVmZmVyOjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgcmVqZWN0KGV4
ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1v
bmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAg
SlNPYmplY1QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRo
cm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0
eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jv
b2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUg
SlNBcnJheUJ1ZmZlcl9oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXIoVk0mLCBTdHJ1
Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyKiBjcmVhdGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7CisgICAgCisgICAgQXJy
YXlCdWZmZXIqIGltcGwoKSBjb250cyB7IHJldHVybiBtX2ltcGw7IH0KKyAgICAKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU1RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlciogbV9p
bXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7CisgICAgIkZ1bmN0aW9uIiwgJkJh
c2U6OnNfaW5mbywgMCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3RvcikKK307CisKK0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJv
dG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogcHJv
dG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
KHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPQorICAgICAgICBq
c0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAor
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgY29uc3RydWN0b3Ig
cmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5
QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAorICAgIEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7
Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlND
ZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3JfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZTsKKworY2xhc3MgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yIDogcHVibGljIElu
dGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqKTsKKyAgICAK
KyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCisKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihl
eGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAo
IXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBzbGljZSBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlci4i
KSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJTbGljZSByZXF1aXJl
cyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMyX3QgYmVnaW4gPSBl
eGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhpc09i
amVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBuZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5pbXBsKCktPnNsaWNlKGJlZ2luLCBlbmQpOworICAg
IGlmICghbmV3QnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoY2FsbGVlLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJT
dHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVm
ZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBuZXdCdWZmZXIpOworICAgIAorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUpCit9OworCitKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVmZmVyUHJv
dG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclBy
b3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGUq
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhl
YXApKQorICAgICAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAg
IHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9
CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVy
UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRl
ICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgSlNB
cnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldyk7Cit9
OworCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9u
Q29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5n
dGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQor
ICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0
dGVyZmx5KDApCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAg
IC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAg
c2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICgh
dm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3Zl
Y3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAg
ICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsg
aS0tOykKKyAgICAgICAgICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDRHQiBs
ZXNzIGEgZmV3IGJ5dGVzLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
VUlOVF9NQVggLSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAoIXRy
eUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5TWFsbG9jKGxl
bmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRp
Y19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisK
K0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250
ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKDApCisgICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1
aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJbmRl
eGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1
ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNy
ZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitKU0FycmF5
QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0
JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5i
dXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xl
bmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQorewor
ICAgIGNvbnRleHQuZGlzb3duKCk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
c3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmlu
YWxpemVyKHRoaXMsIGZpbmFsaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVm
dWxUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJm
bHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0Fy
cmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIo
dGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZm
ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudHlw
ZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsK
KyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5
dGVPZmZzZXQoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMt
PnZtKCkudHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAg
IHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgewor
ICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8g
d3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5l
T3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwg
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFk
LW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
ZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9w
ZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJh
eUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmpl
Y3QpOworICAgIAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRF
bnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlT2Zmc2V0KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
OworICAgIH0KKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3
OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhp
c09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21v
ZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09
IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0
b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBw
cm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0
IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXBy
ZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwg
d2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBh
IHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBh
Y3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRl
IGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGls
ZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3Np
YmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlz
ICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBs
ZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2
ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRo
YXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZp
ZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3IiIGFu
ZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50
IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUg
dXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZwor
Ly8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitl
bnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4g
QiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNv
cGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAg
Ly8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RU
eXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBh
dHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlh
bGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVy
IHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9j
KCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBk
ZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRo
ZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlw
ZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29t
ZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNv
bnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8v
IG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBv
aW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwg
YW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3du
IHRoZSB2ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJD
b3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdl
dCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJl
cXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nl
c3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVm
ZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0
aG9kVGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFz
IG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNv
ZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKwor
Y2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOworICAgIAorICAgIHN0YXRpYyBz
aXplX3Qgc2l6ZU9mKHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAg
eworICAgICAgICByZXR1cm4gKGxlbmd0aCAqIGVsZW1lbnRTaXplICsgc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSAtIDEpCisgICAgICAgICAgICAmIH5zaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIGNsYXNzIENvbnN0cnVjdGlvbkNvbnRleHQgeworICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0KTsKKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBlbnVtIEluaXRpYWxpemF0aW9uTW9kZSB7IFplcm9GaWxsLCBE
b250SW5pdGlhbGl6ZSB9OworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChW
TSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsIElu
aXRpYWxpemF0aW9uTW9kZSA9IFplcm9GaWxsKTsKKyAgICAgICAgCisgICAgICAgIENvbnN0cnVj
dGlvbkNvbnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdHJ1Y3R1cmU7IH0K
KyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0
dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xl
bmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkq
IG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBD
b25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAg
IAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IAorcHVibGljOgorICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBu
YXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZlcjsgYWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGlu
dG8gdGhlIEMgaGVhcCBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlOyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAK
KyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5
dGVPZmZzZXQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQorCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywg
bV9tb2RlKTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCop
OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWlu
dDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3
SW5saW5lc19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJy
YXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7
Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlclZpZXcqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIo
KQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVy
biBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5s
aW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgp
Cit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOwor
fQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBtX2xl
bmd0aCA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9m
ZnNldCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIHsK
KyAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3Zl
cnNpemVUeXBlZEFycmF5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHB0
cmRpZmZfdCBkZWx0YSA9CisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvcikg
LSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAgdW5z
aWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQpID09IGRlbHRhKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJW
aWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDQgKzIyMywxNCBAQCBib29sIEpTQ2Vs
bDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6Omdl
dFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8g
PSB7CisgICAgIkRhdGFWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0RhdGFWaWV3KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25z
dHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30K
KworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJW
aWV3Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1
ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRl
eHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
OworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0RhdGFWaWV3KiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkgSlNEYXRh
Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0
aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZP
Ul9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3
OjpjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9G
T1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RhdGFW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAg
IHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBK
U0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3Zv
aWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFycmF5
Vmlldyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
YXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIERhdGFWaWV3OjpjcmVhdGUoCisgICAgICAg
IHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmpl
Y3QtPm1fbGVuZ3RoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTRGF0YVZpZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0Rh
dGFWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1l
bnRTaXplID0gMTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBj
cmVhdGUoCisgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAg
IAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNl
IGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNp
YWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRl
VW5pbml0aWFsaXplZChWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIEpTRGF0YVZpZXcqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdl
VHlwZSA9IFR5cGVEYXRhVmlldzsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAg
ICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBs
KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKKyAgICAKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgorCisjaW5j
bHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBD
bGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0geworICAgICJEYXRhVmlld1By
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAg
ICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5cGUpCit9OworCisvKiBTb3Vy
Y2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkYXRhVGFibGUKKyAgZ2V0
SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OCAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY0dldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBnZXRJbnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNiAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDE2ICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50MzIgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0Rmxv
YXQzMiAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0NjQgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBzZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDgg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDggICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY1NldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRV
aW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMiAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDMyICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCitAZW5kCisqLworCitKU0RhdGFWaWV3
UHJvdG90eXBlOjpKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0pTRGF0YVZpZXdQcm90b3R5
cGUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIEpTRGF0YVZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQor
ICAgICAgICBKU0RhdGFWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlw
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVj
dHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9
CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxK
U09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwg
anNDYXN0PERhdGFWaWV3UHJvdG90eXBlKj4oY2VsbCksCisgICAgICAgIHByb3BlcnR5TmFtZSwg
c2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAg
ICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PERhdGFWaWV3
UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWlj
Q2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAg
ICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFy
Z3VtZW50ICh0aGUgYnl0ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAg
ICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmllbmQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zm
c2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAg
ICAKKyAgICBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8QWRhcHRvcjo6
VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9m
ZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRs
ZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpT
RGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2Vp
dmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1l
bnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5
dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgCisgICAgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0
aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
CisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKEFkYXB0b3I6
OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0
bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmllbmQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRh
dGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBp
ZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAg
dmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAgIAorICAgICpyZWludGVycHJldF9jYXN0PEFk
YXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSAr
IGJ5dGVPZmZzZXQpID0gdmFsdWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZ2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIHNldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMp
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY1NldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQz
MkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gc2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWlu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0
RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJv
dG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6Cisg
ICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAg
c3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNGbG9hdDMyQXJyYXlfaCIKKyNkZWZpbmUg
IkpTRmxvYXQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRp
ZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmICJKU0Zsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiSlNGbG9hdDY0QXJyYXlfaCIKKwor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0
eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBs
ZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycg
cG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3
cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZy
b20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAg
ICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1v
ZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVy
LXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8v
IEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVy
ZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0
aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBl
aXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8v
IHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1v
ZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBq
dXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhl
IG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVw
ZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1l
bnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93
aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0
cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVk
ZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3
VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3Rh
dGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0
aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1
ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50
U2l6ZSA9IHNpemVvZihBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1
YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3Jl
YXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7
CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwg
SlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBz
aXplb2YoQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJl
dHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAg
ICBjb25zdCBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAg
ICB9CisgICAgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9k
cyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVu
ZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOwor
ICAgIH0KKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFs
dWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAg
ICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdl
dEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
QWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAg
fQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZl
VmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZl
VmFsdWUodW5zaWduZWQgaSwgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwg
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1
ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0
SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAg
IH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBBZGFwdG9yOjpUeXBlIHZhbHVl
ID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgdmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4
UXVpY2tseVRvTmF0aXZlVmFsdWUodmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBjYW5TZXRRdWlja2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAg
ICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVj
ayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAg
ICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVy
bnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9u
LgorICAgIGJvb2wgdmFsaWRhdGVTZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBh
bmQgZmFsc2Ugb24gZXJyb3I7IGl0IHdpbGwgdGhyb3cgb24gZXJyb3IuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3RoZXJUeXBlPgorICAgIGJvb2wgc2V0V2l0aFNwZWNpZmljVHlwZShFeGVjU3Rh
dGUqLCBPdGhlclR5cGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsg
aWYgaXQgcmV0dXJucyBmYWxzZQorICAgIC8vIHRoZW4gaXQgd2lsbCBoYXZlIHRocm93biBhbiBl
eGNlcHRpb24uCisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sIE5vbkFycmF5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTX0VY
UE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gQWRhcHRvcjo6dHlwZVZhbHVl
OworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3Ro
SXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAg
IHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CisgICAgCisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgLy8g
QWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0
aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZlciBhbGxv
Y2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1l
bW9yeShKU1R5cGVkQXJyYXlWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU1R5cGVkQXJyYXlWaWV3Kik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAg
c3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3RE
YXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
Jik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Io
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcj4o
dm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iodm0s
IHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBl
LCBuYW1lKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2Jq
ZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAgICAgICBWaWV3Q2xhc3M6OlR5cGVk
QXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVy
ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7Cisg
ICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAg
ICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkg
PiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4
ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlw
bGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVy
LT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFW
aWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7Cisg
ICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1
Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMg
YSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBj
cmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxp
emVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxK
U09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVjdCwgb2Zm
c2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdh
dGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29u
c3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENvbnN0
cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDYWxsRGF0
YSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0NsYXNzPjsKKyAg
ICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19o
CisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dl
bmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNv
bnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwg
c3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250
ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihz
dHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQg
Y29udGV4dCgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6
VHlwZSksIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNv
bnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJh
bmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAg
ICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAi
Qnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBz
dHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkK
KyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3Vs
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9u
Q29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgp
LCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0
dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp2
YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBv
ZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRl
cmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90
IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVk
IGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0
LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVh
cAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0
IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUg
YSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwg
b3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zm
c2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVy
LT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCB0aHJvd1Jh
bmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0
ZWRseS4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0
ICsgaSwgb3RoZXItPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDbGFzc0luZm8q
IGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3Qg
Y2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldz4ob2JqZWN0KTsKKyAgICAgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBv
dGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4
ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIG1lbWNweSgKKyAgICAgICAgICAgIHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90
aGVyLT50eXBlZFZlY3RvcigpLAorICAgICAgICAgICAgb3RoZXItPmxlbmd0aCgpICogc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhB
cnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJl
dHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmpl
Y3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0
aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0
KTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5
cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShl
eGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAg
Y2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVj
LCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoK
KyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQz
MkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkq
PihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5
cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBs
ZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBv
cHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0
SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAg
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNO
dW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJv
cGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZShnZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFk
T25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3Qt
Pmxlbmd0aCgpICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4ICYmIGNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKGdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUg
fCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
Y2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3Jl
IGF0dGVtcHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2
ZW4gaW4gc3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBw
dXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZp
bmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAg
ICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3Vs
YXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkg
Zm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBv
dXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0g
UHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNo
b3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJh
eSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGV0eU5hbWUuYXNJbmRleCgpICE9IFByb3Bl
cnR5TmFtZS5Ob3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cisg
ICAgfQorICAgIAorICAgIGlmICghY2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKGdldEluZGV4UXVp
Y2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1
dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlf
SU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAg
ICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBz
bG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWNhblNldEluZGV4
UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94
IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisg
ICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
c2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1B
WF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbGVuZ3RoOyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2Jq
ZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0
b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JUb2tlbiwgdGhpc09iamVj
dC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJh
eToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAor
ICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5
cGVkQXJyYXlWZWN0b3JUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmpl
Y3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT5t
X3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1Nw
YWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBtZW1jcHkobmV3VmVjdG9yLCBv
bGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB0aGlzT2JqZWN0LT5t
X3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZFZlY3Rvciwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIEJhc2U6OmNvcHlCYWNr
aW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1
c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAg
IC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25s
eSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5l
Y2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdl
IGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24g
dG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFu
c2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwg
dGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0
bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJy
YXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNl
cnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBm
YXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwg
b2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNh
c2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxp
emVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dl
ciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhh
ZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5Lgor
ICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JB
V2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJ
bmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNp
emUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcmVjb3JkLCBpbiB0aGUgYnV0
dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQgaXMuCisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1f
bW9kZSA9PSBGYXN0VHlwZWRBcnJheQorICAgICAgICAmJiAhbV9idXR0ZXJmbHkgJiYgc2l6ZSA+
PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIC8vIFJldXNlIGFscmVhZHkgYWxs
b2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIG1fYnV0dGVyZmx5ID0g
c3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihtX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dB
cnJheVJpZ2h0KAorICAgICAgICAgICAgbV9idXR0ZXJmbHksIGhlYXAtPnZtKCksIHRoaXNPYmpl
Y3QsIHN0cnVjdHVyZSgpLAorICAgICAgICAgICAgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2Ug
RmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhp
c09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8g
RklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBl
eHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3
aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8v
IHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVB
ZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGJ1dHRlcmZseSgpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAg
IGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUltcGwoSlNUeXBlZEFy
cmF5Vmlldyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1
cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgdGhpc09iamVjdC0+YnVmZmVy
KCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bGVuZ3RoKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlIDogcHVibGljIEpTT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZpZXdDbGFzcyogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZp
ZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBKU09iamVjdCogc291cmNlQXJy
YXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlm
ICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LiIpKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAyKSB7CisgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBv
ZmZzZXQgPSAwOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNvdXJjZUFycmF5LT5nZXQo
ZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0aGlzT2JqZWN0LT5zZXQoZXhlYywgc291
cmNlQXJyYXksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFy
cmF5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBWaWV3Q2xhc3MqIHRoaXNP
YmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAg
ICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3
LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIGF0
IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAor
ICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewor
ICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0
LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRlciBhc3Nl
cnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhpc0xlbmd0
aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBp
bmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAgICAgYmVn
aW4gPSB0aGlzTGVuZ3RoIC0gYmVnaW47CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9
IHRoaXNMZW5ndGggLSBlbmQ7CisgICAgCisgICAgLy8gQ2xhbXAgdGhlIGluZGljZXMgdG8gdGhl
IGJvdW5kcyBvZiB0aGUgYXJyYXkuCisgICAgQVNTRVJUKGJlZ2luID49IDApOworICAgIEFTU0VS
VChlbmQgPj0gMCk7CisgICAgYmVnaW4gPSBzdGQ6Om1pbihiZWdpbiwgdGhpc0xlbmd0aCk7Cisg
ICAgZW5kID0gc3RkOjptaW4oZW5kLCB0aGlzTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBDbGFtcCBl
bmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisgICAg
QVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0VfQVNT
RVJUKGxlbmd0aCA9PSB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPQorICAgICAgICBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5
U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBW
aWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgp
LCBzdHJ1Y3R1cmUsIGFycmF5QnVmZmVyLAorICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0
KCkgKyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBW
aWV3Q2xhc3M6OmVsZW1lbnRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0u
cHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmll
d0NsYXNzPiwgRG9udEVudW0sIDIpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVy
dHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3
Q2xhc3M+LCBEb250RW51bSwgMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFz
cz46OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDMwIEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vz
c29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3Rv
dHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVy
c2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9m
dW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2Fy
cmF5QnVmZmVyUHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0lu
dDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MzJB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgp
XS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMtPnZtKCksIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0o
KSwgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1Vp
bnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MTZBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0MzJBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCld
LnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6
OmNyZWF0ZShleGVjLT52bSgpLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFW
aWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
SW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
SW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U1VpbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0uc3RydWN0dXJl
LnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJv
dG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0u
c3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQz
MildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxv
YXQ2NCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZURhdGFWaWV3KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CkBAIC0zMTgsNiArMzQyLDI2IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKICAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
TWF0aCwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250
RW51bSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNv
bnN0cnVjdG9yID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0
KCkpOworICAgIEZpeGVkQXJyYXk8SlNPYmplY3QqLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQ
RVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+
dm0oKSwgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5
Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJ
bnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU0ludDMyQXJyYXlDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBl
LmdldCgpLCAiSW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRl
eChUeXBlVWludDgpXSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0o
KSwgSlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OENsYW1wZWRBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0u
cHJvdG90eXBlLmdldCgpLCAiVWludDhDbGFtcGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQxNildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJy
YXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0g
SlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJv
dG90eXBlLmdldCgpLCAiVWludDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLT52bSgpLCBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0MzJBcnJheSIp
OworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0gSlNG
bG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRmxvYXQ2NEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJv
dG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclBy
b3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLkFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51
bSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJfT0Zf
VFlQRURfQVJSQVlfVFlQRVM7IHR5cGVkQXJyYXlJbmRleC0tOykgeworICAgICAgICBtX3R5cGVk
QXJyYXlzW3R5cGVkQXJyYXlJbmRleF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHR5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAgICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCB0eXBlZEFycmF5Q29uc3RydWN0
b3JzW3R5cGVkQXJyYXlJbmRleF0tPm5hbWUoZXhlYyksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNb
dHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAgIH0KIAogICAgIEdsb2JhbFByb3BlcnR5
SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuTmFOLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUg
IlZNLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMTY2LDYgKzE2OCwxNiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlOworICAgIAorICAgIFdy
aXRlQmFycmllcjxKU0FycmF5QnVmZmVyUHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBl
OworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7Cisg
ICAgCisgICAgc3RydWN0IFR5cGVkQXJyYXlEYXRhIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBwcm90b3R5cGU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVj
dHVyZTsKKyAgICB9OworICAgIAorICAgIEZpeGVkQXJyYXk8VHlwZWRBcnJheURhdGEsIE5VTUJF
Ul9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gbV90eXBlZEFycmF5czsKICAgICAgICAgCiAgICAgdm9p
ZCogbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6VGFibGVTaXplXTsgLy8gU3BlY2lhbCBwb2lu
dGVycyB1c2VkIGJ5IHRoZSBMTEludCBhbmQgSklULgogCkBAIC0zMzAsNiArMzQyLDE1IEBAIHB1
YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3Ry
dWN0dXJlKiByZWdFeHBTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVy
ZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29uc3RydWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2FycmF5QnVmZmVyQ29uc3RydWN0b3IuZ2V0KCk7IH0KKyAgICBKU0FycmF5QnVmZmVy
UHJvdG90eXBlKiBhcnJheUJ1ZmZlclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlC
dWZmZXJQcm90b3R5cGUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAg
IAorICAgIFN0cnVjdHVyZSogdHlwZWRBcnJheVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBl
KV0uc3RydWN0dXJlLmdldCgpOworICAgIH0KIAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3Io
U3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmICJKU0ludDhBcnJheV9oIgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1
ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJ
bnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U0ludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQz
MkFycmF5X2giCisjZGVmaW5lICJKU0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9T
X0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyND
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01B
S0VfU19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19J
TkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5G
TyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8o
RmxvYXQ2NEFycmF5KTsKK01BS0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpT
VHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
SW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFy
cmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVk
QXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29u
c3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNV
aW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNv
bnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
RmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1
Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENs
YXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBlOjpzX2luZm8gPSB7I3R5cGUgIlByb3RvdHlwZSIs
ICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0
eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8o
SW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQz
MkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5
UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50
OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlQcm90b3R5
cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhBcnJh
eT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90
eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFy
cmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5UHJvdG90eXBlOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNG
bG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
I2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0lu
Zm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNB
cnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNB
cnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9T
X0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFt
cGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9T
X0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheXNf
aAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0lu
dDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBK
U0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRv
cj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9h
dDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJh
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4QXJyYXlfaCIK
KyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKyNkZWZp
bmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MTZBcnJh
eV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQz
MkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQzMkFy
cmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCos
IEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9
IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAor
ICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLCBu
YXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWsocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5
Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29udHJv
bGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFycmF5
IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0
IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBydW5u
aW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJZiB0
aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2
ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZl
ciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRuJ3Qg
ZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitjbGFzcyBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJsaWM6
CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciog
dG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTMgKzIzMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOworICAgICAgICByZXR1
cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBp
c1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsK
LSAgICB9CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA0LDYgKzEwNCwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXRDb25jCiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1Zh
bHVlSWdub3JlZCk7CiB9CiAKK2lubGluZSBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpT
Q2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhp
bmdUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRW
aWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+
KGNlbGwpLT5tb2RlKCkgPT0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBT
dHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCgpICYmIGdsb2JhbE9iamVjdCgpID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFk
YXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBU
eXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5
QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlw
ZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOwor
CisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2
YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5h
c0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihRTmFOKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFt
ZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVj
dCBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAg
ICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFy
ZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUg
PSB0eXBlVmFsdWVBcmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFw
dG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3Qg
VWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2
QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOwor
c3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFz
cyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1Vp
bnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFk
YXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5Owor
CitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwg
SW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0
b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50
MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJ
bnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0
cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwg
VWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50
MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJy
YXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRv
ciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMy
QXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5
cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlw
ZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVJbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVk
ZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7
CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGlj
IGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAg
CisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1Owor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAo
dmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVy
KCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0Rv
dWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3Qg
Y2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAg
cmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsK
KyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlB
ZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorVHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5
Q29udHJvbGxlcigpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRy
b2xsZXJfaAorI2RlZmluZSBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7Citj
bGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CisKK2NsYXNzIFR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlw
ZWRBcnJheUNvbnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBUeXBlZEFycmF5Q29udHJvbGxlcigp
OworICAgIHZpcnR1YWwgflR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVh
bCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBB
cnJheUJ1ZmZlciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
VHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNk
ZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0
IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUs
Ci0gICAgVHlwZWRBcnJheUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJy
YXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlw
ZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6
IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwg
bV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
KGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90
IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAg
ICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZz
ZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2Ns
YXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0
aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5
cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91
bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJy
YXk6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVy
biAmSlNJbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0
dXJuICZKU1VpbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Cisg
ICAgICAgIHJldHVybiAmSlNVaW50OENsYW1wZWRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlw
ZUludDE2OgorICAgICAgICByZXR1cm4gJkpTSW50MTZBcnJheTo6c19pbmZvOworICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQxNkFycmF5OjpzX2luZm87CisgICAg
Y2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiAmSlNJbnQzMkFycmF5OjpzX2luZm87Cisg
ICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gJkpTVWludDMyQXJyYXk6OnNfaW5m
bzsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gJkpTRmxvYXQzMkFycmF5
OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuICZKU0Zsb2F0
NjRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4g
JkpTRGF0YVZpZXc6OnNfaW5mbzsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIG91dC5wcmludCgiTm90VHlwZWRB
cnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgb3V0
LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MTY6
CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MzIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50
OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDE2Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVp
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAg
b3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBl
RmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQ2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIG91dC5wcmludCgiVHlwZURhdGFW
aWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlU
eXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBO
b3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWlu
dDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQz
MiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAor
ICAgIFR5cGVEYXRhVmlldworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQ
RVMgVHlwZURhdGFWaWV3CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9
CisKK2lubGluZSBib29sIGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURh
dGFWaWV3OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJy
YXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVp
bnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWlu
dDE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5
cGVVaW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAg
Y2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0NsYXNzSW5mbyogY2xh
c3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5
cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2Fz
ZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFk
YXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRh
cHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRh
cHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xh
bXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsx
MCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
ICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3OSAr
MjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDhBcnJheV9oCi0j
ZGVmaW5lIFVpbnQ4QXJyYXlfaAorI2lmbmRlZiAiVWludDhBcnJheV9oIgorI2RlZmluZSAiVWlu
dDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBw
dWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3Qg
dWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNp
bmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVV
aW50ODsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmll
bmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4
QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhf
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4
QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5
PihsZW5ndGgpOwotfQotCi1VaW50OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5
PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6VWlu
dDhBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDhBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhD
bGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEy
ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDhDbGFtcGVkQXJyYXlfaAotI2RlZmluZSBVaW50
OENsYW1wZWRBcnJheV9oCisjaWZuZGVmICJVaW50OENsYW1wZWRBcnJheV9oIgorI2RlZmluZSAi
VWludDhDbGFtcGVkQXJyYXlfaCIKIAotI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVWludDhDbGFt
cGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShj
b25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNo
b3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwg
YmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0
byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQgdG8gcG90ZW50aWFsbHkgY2FsbCB0
aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMgY3JlYXRlZCB1bmluaXRpYWxpemVk
IC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhzCi0gICAgLy8gemVybyB0aGUgYWxs
b2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJvRmlsbCgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBpbmxpbmUgdm9pZCBzZXQodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5l
IFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJs
ZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90
PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKGNvbnN0IHVp
bnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGFycmF5LCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6
Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhDbGFtcGVkQXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6Onplcm9GaWxsKCkKLXsKLSAgICB6
ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVpbnQ4Q2xhbXBlZEFycmF5OjpzZXQo
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBpZiAoaW5kZXggPj0gbV9sZW5n
dGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUg
PCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBpZiAodmFsdWUgPiAyNTUpCi0gICAg
ICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90
PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRBcnJheTo6VWludDhDbGFtcGVkQXJy
YXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5
OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0
LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xh
bXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5OworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIFVpbnQxNkFycmF5X2gKLSNkZWZpbmUgVWludDE2QXJyYXlfaAorI2lmbmRlZiAiVWludDE2
QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQxNkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDE2OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVh
dGU8VWludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MTZBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDE2QXJyYXk6OlVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBK
U0M6OlVpbnQxNkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBV
aW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQz
MkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDMyQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQzMkFycmF5X2gKLSNkZWZpbmUgVWludDMyQXJyYXlf
aAorI2lmbmRlZiAiVWludDMyQXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQzMkFycmF5X2giCiAKLSNp
bmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxU
eXBlZEFycmF5QmFzZTx1aW50MzJfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgdWludDMyX3QqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVu
IGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8g
bm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBm
aWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTx1aW50MzJfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBW
aWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDMy
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDMyQXJyYXkoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
Ly8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNs
YXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJy
YXk+IFVpbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50
MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJh
eT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZDxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDMyQXJyYXk6OlVpbnQzMkFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVp
bnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQz
MkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN1YmFycmF5SW1wbDxVaW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQzMkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKICNlbmRpZiAvLyBVaW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1
ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJS
ZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTI1OCw2ICsyNTksMTAg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5V
c2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRT
dGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBh
IGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAg
IC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJl
ZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAj
aW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIldhdGNo
ZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgpAQCAtMzkwLDYgKzM5MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsK
ICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVy
OworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRy
b2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1w
UG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApJbmRleDogU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw4IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0
MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAq
LzsgfTsKKwkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
NDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKKwkJMEYy
QjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZs
aXBCeXRlcy5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKIAkJMEY4RjJCOTExNzJF
MDBGQzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuaCAqLzsgfTsKIAkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8qIENv
bXBpbGF0aW9uVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5j
cHAgKi87IH07CkBAIC0yODAsNiArMjgyLDggQEAKIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5j
ZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQz
RjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjhG
MTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb21waWxhdGlvblRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21waWxhdGlvblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNjMwLDYgKzYzNCw3IEBACiAJCQkJQThBNDcyN0IxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2lt
YWxOdW1iZXIuY3BwICovLAogCQkJCUE4QTQ3MjdDMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFs
TnVtYmVyLmggKi8sCiAJCQkJQThBNDcyN0QxNTFBODI1QTAwNDEyM0ZGIC8qIERlY29kZXIuaCAq
LywKKwkJCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCAqLywKIAkJCQlBOEE0NzI3RTE1MUE4MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLywKIAkJCQlB
OEE0NzI3RjE1MUE4MjVBMDA0MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oICovLAogCQkJCUE4QTQ3
MjgwMTUxQTgyNUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCkBAIC02NDgsNiAr
NjUzLDcgQEAKIAkJCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFt
LmNwcCAqLywKIAkJCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFt
LmggKi8sCiAJCQkJQThBNDcyQTMxNTFBODI1QTAwNDEyM0ZGIC8qIEZpeGVkQXJyYXkuaCAqLywK
KwkJCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8sCiAJCQkJQThB
NDcyQTYxNTFBODI1QTAwNDEyM0ZGIC8qIEZvcndhcmQuaCAqLywKIAkJCQlBOEE0NzJBNzE1MUE4
MjVBMDA0MTIzRkYgLyogRnVuY3Rpb25hbC5oICovLAogCQkJCTFBMUQ4QjlEMTczMTg3OTgwMDE0
MURBNCAvKiBGdW5jdGlvbkRpc3BhdGNoZXIuY3BwICovLApAQCAtOTk0LDYgKzEwMDAsNyBAQAog
CQkJCUE4QTQ3M0Y2MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczRkExNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9tU291cmNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQjE1MUE4MjVCMDA0MTIzRkYgLyogT3duQXJyYXlQdHIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJh
YmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkMxNTFBODI1QjAwNDEy
M0ZGIC8qIE93blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkQxNTFBODI1QjAwNDEy
M0ZGIC8qIE93blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkUxNTFBODI1
QjAwNDEyM0ZGIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU3LDYg
KzEwNjQsNyBAQAogCQkJCUE4QTQ3NDMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUZW1wb3JhcnlDaGFu
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ0MTUxQTgyNUIwMDQxMjNGRiAvKiBUZXh0
UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkE3
MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
UHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJh
YmxlUmVmQ291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVS
ZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNv
dW50ZWRfaAorI2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2Yg
UmVmQ291bnRlZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQs
CisvLyBhbmQgY2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5r
IG9mIGEgZGVmZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhj
ZXB0IHRoYXQgeW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVu
ZWQgLSB0aGlzIGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21l
dGltZXMgZXZlbiBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVy
cmVkRmxhZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVuZXQg
PSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVm
Q291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJl
ZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYg
ZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJl
ZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZD
b3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAg
ICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFn
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0g
fmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVm
Q291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3Vu
dGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigp
CisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQo
Ym9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4o
dGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZCgp
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Zs
aXBCeXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRl
c19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lu
bGluZSBib29sIG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFu
KQoreworI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxz
ZQorICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZf
dCBmbGlwQnl0ZXModWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAw
ZmYpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGlu
ZSB1aW50MzJfdCBmbGlwQnl0ZXModWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFs
dWUgJiAweDAwMDAwMGZmKSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkg
PDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAo
KHZhbHVlICYgMHhmZjAwMDAwMCkgPj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5
dGVzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAw
MDAwMGZmbGx1KSA8PCA1NikKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAw
bGx1KSA8PCA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8
PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQor
ICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAg
IHwgKCh2YWx1ZSAmIDB4MDAwMGZmMDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2
YWx1ZSAmIDB4MDBmZjAwMDAwMDAwMDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAm
IDB4ZmYwMDAwMDAwMDAwMDAwMGxsdSkgPj4gNTYpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9
PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMikK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVp
bnQxNl90Pih2YWx1ZSkpKTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KQorICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlKSkpOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDgpCisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbjsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVz
cGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRh
OwotICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhfdCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRPZmZzZXQoYnl0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsK
LSAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVH
ZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkp
OwotfQotCi1EYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlC
dWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVu
Z3RoKQotewotfQotCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRp
YW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNl
bHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQg
c3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAg
KnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2
Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsg
Myk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBC
eXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAg
c3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0g
ICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lm
TmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0g
ICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2
Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5
dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAg
ICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17
Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBi
dXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxv
YWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQp
KTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVF
bmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJh
bmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUg
ZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRl
Y3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+
IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lm
TmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1l
bWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1w
VmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZp
ZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0K
LWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQx
Nl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZp
ZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZz
ZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
ZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0
PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3Ojpn
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQz
Ml90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
c2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0
RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12
b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8
ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQg
RGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAg
ICBtX2J5dGVMZW5ndGggPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0RhdGFWaWV3LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIERhdGFWaWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERh
dGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29u
c3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQs
IGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRV
aW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQz
Ml90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3Vi
bGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdl
dEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJ
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxz
ZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJf
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNl
dFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAg
dm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9h
dDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBk
b3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBUeXBlRGF0YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lk
IG5ldXRlcigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQg
Ynl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwg
Ynl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5n
dGg7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3
X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208478</attachid>
            <date>2013-08-10 11:06:42 -0700</date>
            <delta_ts>2013-08-10 14:45:34 -0700</delta_ts>
            <desc>getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>408133</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVj
dG9yLmx1dC5oIFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlw
ZS5sdXQuaCBcCisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVj
dC5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdG
IC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3
QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
QjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUx
N0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmll
dy5jcHAgKi87IH07CisJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2
QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZC
NUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAq
LzsgfTsKKwkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5jcHAgKi87IH07CisJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2
RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsK
KwkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovOyB9Owor
CQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZD
MzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0ludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAq
LzsgfTsKKwkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheXMuY3BwICovOyB9OworCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQx
N0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIw
MEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2
NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVB
QjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlB
ZGFwdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJC
NjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5jcHAgKi87IH07CisJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEw
IC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3Bw
ICovOyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFD
NUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZH
SW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OSw3ICszOTks
NiBAQAogCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBC
RjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklU
Q29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEw
QTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGRUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIz
N0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi87IH07CiAJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUZDOUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmNwcCAqLzsgfTsKIAkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgy
NCw4ICs4NzMsNiBAQAogCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3
QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QThBRjJDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVG
MzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlC
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4
QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURC
NUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
OENsYW1wZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMDcsNiArMTI1NCw1NiBAQAogCQkwRjIzNUJFQTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09T
UkV4aXRQcmVwYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRB
NTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRo
ID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZB
QTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RmxvYXQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50
MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZD
QzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJh
eVByb3RvdHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJh
eXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1R5cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdC
NkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9y
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQ
aGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRp
b25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU0OCw2IEBA
CiAJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdD
b21tb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7
IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgx
QTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7
IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjMsNiBAQAogCQlB
N0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYz
MDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdB
OEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTU2LDYgKzI2NTAsMTAgQEAKIAkJCQkwRjJD
NTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8sCiAJCQkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJCQlCQ0JFMkNBRDE0
RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi8sCisJCQkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8sCisJCQkJMEYyQjY2QTkxN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oICovLAorCQkJCTBG
MkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovLAor
CQkJCTBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElu
bGluZXMuaCAqLywKIAkJCQlDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3Bw
ICovLAogCQkJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovLAogCQkJ
CUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLApA
QCAtMjgyOCw2ICsyOTI2LDUyIEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50
aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjJC
NjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkIxMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oICovLAorCQkJCTBGMkI2NkIyMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLywKKwkJCQkwRjJCNjZCMzE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovLAorCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBG
MkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywK
KwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNE
YXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXcuaCAqLywKKwkJCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQ
cm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMy
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLywKKwkJCQkwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCAqLywKKwkJCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTBGMkI2NkM1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovLAor
CQkJCTBGMkI2NkM2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZDODE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggKi8sCisJCQkJMEYy
QjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0Ex
N0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkNCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQkwRjJCNjZDRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi8sCisJCQkJMEYy
QjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovLAor
CQkJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgg
Ki8sCisJCQkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICov
LAorCQkJCTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8sCisJ
CQkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovLAorCQkJCTBG
MkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLywKKwkJCQkwRjJC
NjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkQ2
MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi8sCisJCQkJMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9y
cy5oICovLAorCQkJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8sCisJCQkJMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmggKi8sCisJCQkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggKi8sCisJCQkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmNwcCAqLywKKwkJCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
aCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJ
CQkJQkNGNjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RF
NTBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmNwcCAqLywKQEAgLTI5MjAsNyArMzA2NCw2
IEBACiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE3QThB
RjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKLQkJCQlBN0E4QUYyRTE3QURC
NUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovLAogCQkJCUE3ODg1M0Y3
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKIAkJCQlB
Nzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovLAog
CQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywK
QEAgLTMwNzgsOCArMzIyMSw2IEBACiAJCQkJMTRBMzk2QTYwQ0QyOTMzMTAwQjVCNEZGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCiAJCQkJNUQ1MzcyNkQwRTFDNTQ2QjAwMjFFNTQ5IC8qIFRyYWNpbmcu
ZCAqLywKIAkJCQk1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAotCQkJ
CUE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovLAotCQkJCTBG
RUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJ
CUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2Njcz
OUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4
QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1MzgsMTIgKzM2
NzksMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJy
YXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYg
LyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFDMTdCNkI1
M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBv
b2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyog
QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQy
MTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDgx
NkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIg
LyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1LDYgKzM2OTks
NyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyogQ2FsbElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFE
ODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICszNzExLDcgQEAK
IAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMiw3IEBACiAJCQkJMEZEQjJDRUExNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4
MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2RjVD
RDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZD
MTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNjA0LDYgKzM3NTEsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1
NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlF
QTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUx
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3Np
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVD
M0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2NSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgz
NjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZH
Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBp
biBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszNzk5LDcgQEAKIAkJCQlBN0Q4OUNGODE3QTBCOEND
MDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZB
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdH
ZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZBMTFFNDAwOTYz
MDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIw
MDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYgKzM4MDgsNyBA
QAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRGaW5h
bGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAwMTcw
QzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBC
Qzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNG
QzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2NzEsNiArMzgyMiw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3
IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVE
QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQjE1MEU5
NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZB
RDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg0LDYg
KzM4MzYsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJl
cGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAv
KiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0
IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM2OTMs
NiArMzg0Nyw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJp
bmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNG
QTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5
NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklU
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4MSw3IEBACiAJCQkJMEYyMUMyN0MxNEJF
NzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8q
IEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQzkxNzNEQTUy
MDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0
Niw2ICszOTAyLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0
dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjQxNzA5
NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAv
KiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1MSw2IEBACiAJCQkJQTdB
OEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3
QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzgx
Myw2ICszOTY5LDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBK
SVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAw
QkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUx
NzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2
ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zODQwLDYgKzM5OTcsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA2
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVz
dFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxMyw3IEBACiAJCQkJ
QkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmll
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNP
YmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAv
KiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2ICs0MDI1LDcg
QEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0YWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0
cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDQsNyBAQAogCQkJCTg2RTNDNjE1
MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2
NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBp
biBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc1LDcgQEAKIAkJCQlBN0U1QUIzODE3OTlFNEIy
MDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEz
QTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1cC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJw
cmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBN
YWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0MDg4LDcgQEAK
IAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJC
OTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBp
biBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5NywxNyBAQAogCQkJCUMyMTEyMkUzMTVERDlB
QjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEy
RTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmplY3Qu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVt
b3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdF
MTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUlu
c3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4RTkyMjIgLyog
TmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5
Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJ
bmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzNyw3IEBACiAJCQkJMEYzNEIxNEMx
NkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAv
KiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NiwxMSBAQAogCQkJCTE0NzRDMzNCMTZBQTJE
OTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0
MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAw
RDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEw
MDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMy
MTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJl
Z0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5Myw3IEBACiAJ
CQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAv
KiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYy
OTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApA
QCAtNDAzNiw3ICs0MjA2LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3Rh
dGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFCNTBE
RTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjAsOCBAQAogCQkJCUMyRkUxOEE0MTZCQUVD
NDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIw
QkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3Ry
dWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZF
MjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDA1
Nyw5ICs0MjMxLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyog
VGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBG
NUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNl
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJz
ICovLApAQCAtNDQ4OSw2ICs0NjY0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJD
MDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMw
MkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVn
Z2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQx
NzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NTE0LDYgKzQ2OTAsNyBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5
MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNFMTMzMDE3OTYyNENEMDBFNERFQTgg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4
NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDU0Myw2ICs0NzIwLDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5
Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgw
MDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0
NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIz
NUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NjE2LDYgKzQ3OTQsNyBAQAogCQkJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBH
Q1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENBN0RD
QTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NTUxMDdFQzBFNzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjZFMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDJFMzEzNTEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MkUzMTM3MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQ2NjgsMTEgKzQ4NDcsMTMgQEAKIAkJCQlDMjVENzA5QjE2
REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
NDg3NEFFMzE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdB
NDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAw
NTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZE
NzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZF
Njk1MEU1QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3
IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcw
MTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY5MCw2ICs0ODcxLDcg
QEAKIAkJCQlBNzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJp
dmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyog
SlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU0MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyogSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAy
ODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDcxMiw2ICs0ODk0LDcg
QEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNz
ZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYx
MkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkI2NkVEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtl
ZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ3NjIsMTcgKzQ5NDUsMjEgQEAK
IAkJCQkxNDc0QzMzQzE2QUEyRDlCMDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VX
aGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMw
MDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIx
MjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEw
MTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2
RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEODg1MEVEMjFDM0QwMEI4
OTYxOSAvKiBTYW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3
REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA0
MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VDb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3Vy
Y2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MDUsNiAr
NDk5Miw3IEBACiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlE
MjUxNTg1M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUlu
ZGV4aW5nVHlwZShJbgogCiBpbmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xh
c3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewotICAgIHJldHVybiBjbGFzc0lu
Zm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZTsKKyAgICByZXR1cm4g
aXNUeXBlZFZpZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogfQogCiBpbmxp
bmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAt
OTgsMjMgKzk4LDIzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgK
IGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKQogewogICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpIHsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgorICAgIGNhc2UgVHlwZUludDg6
CiAgICAgICAgIHJldHVybiBKSVRJbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MTY6
CisgICAgY2FzZSBUeXBlSW50MTY6CiAgICAgICAgIHJldHVybiBKSVRJbnQxNkFycmF5OwotICAg
IGNhc2UgVHlwZWRBcnJheUludDMyOgorICAgIGNhc2UgVHlwZUludDMyOgogICAgICAgICByZXR1
cm4gSklUSW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICBjYXNlIFR5
cGVVaW50ODoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5VWludDhDbGFtcGVkOgotICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0g
ICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICAgICAgcmV0dXJuIEpJVFVpbnQ4Q2xhbXBlOworICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAg
ICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAg
ICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJl
dHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRB
cnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFy
cmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJu
IFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
SW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4
OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWlu
dDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWlu
dDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0
MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2
NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlw
ZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9y
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxl
SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NTgsNiArNDU4LDMyIEBAIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5n
KEFycmEKICAgICB9CiB9CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6
OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSW50MTZBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlSW50MzI7CisgICAgY2FzZSBVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4
OworICAgIGNhc2UgVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhD
bGFtcGVkOworICAgIGNhc2UgVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2
OworICAgIGNhc2UgVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAg
IGNhc2UgRmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2Fz
ZSBGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIHZvaWQgQXJyYXlN
b2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KHR5cGUo
KSwgYXJyYXlDbGFzcygpLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsNiArMTA0LDggQEAgY29uc3QgY2hhciogYXJyYXlDbGFzc1RvU3RyaW5nKEFycmF5
OjpDbAogY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxh
dGlvbik7CiBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJheTo6Q29udmVy
c2lvbik7CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUpOwor
CiBjbGFzcyBBcnJheU1vZGUgewogcHVibGljOgogICAgIEFycmF5TW9kZSgpCkBAIC0zODAsNiAr
MzgyLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6U3RyaW5n
OwogICAgIH0KICAgICAKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdG9UeXBlZEFycmF5VHlwZSh0eXBlKCkpOworICAgIH0K
KyAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NjcsMzcgKzI2NjcsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNl
IEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50
cyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90
KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZt
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJy
YXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsRm9ySW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4
NzMsNDYgKzI4NDksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlw
ZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52
bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5
cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1ODAsMzcgKzI1ODAsMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAg
ICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7
CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlw
ZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzEsNDYgKzI4
NDcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihp
bnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZs
b2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlN
b2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3Bl
cnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMzIgKzU4Myw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICB9CiB9CiAgICAg
Ci1jb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlE
ZXNjcmlwdG9yKEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUu
dHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBj
YXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50MTZB
cnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3Io
KTsKLSAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigp
OwotICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVt
cFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFycmF5
TW9kZSwgSW5kZXhpbmdUeXBlIHNoYXBlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5
Q2xhc3MoKSkgewpAQCAtNjk0LDggKzY2OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNr
QXJyYXkoTm9kZSogbm8KICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgCi0gICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9y
KG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxy
ZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKSkpIHsKICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTcyNywyMiArNjk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJy
YXkoTm9kZSogbm8KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVk
Q2xhc3NJbmZvID0gJkFyZ3VtZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgZXhwZWN0ZWRDbGFz
c0luZm8gPSByZXN1bHQtPm1fY2xhc3NJbmZvOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBleHBlY3Rl
ZENsYXNzSW5mbyA9IGNsYXNzSW5mb0ZvclR5cGUobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJh
eVR5cGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VChleHBlY3RlZENsYXNzSW5mbyk7CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMjU5NCw4
ICsyNTU3LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShKSVQKIAog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVf
dCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKQEAg
LTI2MTIsMTYgKzI1NzcsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25JbgogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0g
U2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAg
ICAgbV9qaXQubG9hZDhTaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwg
cmVzdWx0UmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2ln
bmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkp
CiAgICAgICAgICAgICBtX2ppdC5sb2FkMTZTaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgcmVz
dWx0UmVnKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CkBAIC0yNjMyLDEyICsyNTk4LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBkZWZhdWx0OgogICAgICAgICBD
UkFTSCgpOwogICAgIH0KLSAgICBpZiAoZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3MgPT0g
U2lnbmVkVHlwZWRBcnJheSkgeworICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNT
aWduZWQodHlwZSkpIHsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSA0
ICYmIHNpZ25lZG5lc3MgPT0gVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBBU1NFUlQoZWxlbWVu
dFNpemUodHlwZSkgPT0gNCAmJiAhaXNTaWduZWQodHlwZSkpOwogICAgIGlmIChub2RlLT5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2so
T3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tMzIoMCkpLCBWYWx1ZVJlY292ZXJ5Ojp1
aW50MzJJbkdQUihyZXN1bHRSZWcpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOwpAQCAtMjY1Miw4ICsyNjE4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW4KICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogewor
ICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCkBAIC0yNjcwLDggKzI2MzgsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgZG91YmxlIGQgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7Ci0g
ICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgIGQg
PSBjbGFtcERvdWJsZVRvQnl0ZShkKTsKICAgICAgICAgfQogICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKQEAgLTI2ODYsOCArMjY1NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAg
ICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAg
ICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAg
ICAgICAgICAgICBjb21waWxlQ2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwpAQCAtMjY5
Niw4ICsyNjY0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAg
ICAgICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBl
KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVV
c2UpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKQEAgLTI3MTcsNyArMjY4
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAg
ICAgICAgICBub3ROYU4ubGluaygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhaWxlZDsKLSAgICAgICAgICAgICAgICBpZiAo
c2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICAgICAgICAgIGlmIChpc1Np
Z25lZCh0eXBlKSkKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVu
Y2F0ZUZhaWxlZCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBm
YWlsZWQgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNy
b0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CkBAIC0yNzQyLDkgKzI3MTAsOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgQVNTRVJUKHZh
bHVlR1BSICE9IHN0b3JhZ2VSZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91
bmRzOwogICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0
KSk7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAKLSAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToK
ICAgICAgICAgbV9qaXQuc3RvcmU4KHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0yNzYyLDggKzI3MzAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXpl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
Tm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0
eXBlKSk7CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUt
PmNoaWxkMygpKTsKQEAgLTI3NzksOCArMjc0OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uRmwKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAg
IHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIG1faml0
LmxvYWRGbG9hdChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSwgcmVzdWx0UmVnKTsKICAgICAgICAgbV9q
aXQuY29udmVydEZsb2F0VG9Eb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWcpOwpAQCAtMjgwMSw4
ICsyNzcyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBu
b2RlLCBzaXplX3QgZWxlbWVudFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9k
ZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgCiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgCkBAIC0yODE3LDEwICsyNzkwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9y
Tm9kZShiYXNlVXNlKSkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91
bmRzOwotICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0
KSk7CisgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpIHsKKyAgICAgICAgb3V0T2ZCb3Vu
ZHMgPSBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICB9CiAgICAgCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKICAgICBjYXNlIDQ6IHsKICAgICAgICAgbV9qaXQubW92ZURvdWJsZSh2YWx1ZUZQUiwgc2Ny
YXRjaEZQUik7CiAgICAgICAgIG1faml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHZhbHVlRlBSLCBz
Y3JhdGNoRlBSKTsKQEAgLTQwMjYsOCArNDAwMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRJbmRleGVkUHIKICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5h
cnJheU1vZGUoKSk7Ci0gICAgCiAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0
b3JhZ2VSZWcpOwpAQCAtNDA0MSw4ICs0MDE1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRJbmRleGVkUHIKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQp
LCBzdG9yYWdlUmVnKTsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZlZlY3RvcigpKSwKKyAgICAgICAgICAgIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgCkBAIC00MTQzLDggKzQxMTksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJndW1lbnRzCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRB
cnJheUxlbmd0aChOb2RlKiBub2RlKQogewotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
KiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwot
CiAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpEb3VibGU6CkBAIC00MTg0LDE2ICs0MTU4LDE2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgY29tcGls
ZUdldEFyZ3VtZW50c0xlbmd0aChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGRl
ZmF1bHQ6CisgICAgZGVmYXVsdDogeworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+
YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOwogICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBiYXNlKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwog
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBBU1NFUlQo
ZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBkZXNjcmlwdG9yLT5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIH0g
fQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5v
ZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjQsMTAgKzE5NjQsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFyaXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVBcml0aE1vZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplLCBU
eXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBw
cm9wZXJ0eSwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Ms
IFR5cGVkQXJyYXlSb3VuZGluZyA9IFRydW5jYXRlUm91bmRpbmcpOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBO
b2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBH
UFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAg
dm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcg
cHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlR2V0QnlW
YWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25O
b0NoZWNrKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9k
ZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwpAQCAtMjEwOSw4ICsyMTA5
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBz
cGVjdWxhdGUoTm9kZSosIEVkZ2UpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUpOwotICAgIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5k
ZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUsIEluZGV4aW5nVHlwZSk7CiAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5k
ZXhpbmdUeXBlUmVnLCBBcnJheU1vZGUpOwogICAgIHZvaWQgY2hlY2tBcnJheShOb2RlKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDI0IEBAIHByaXZhdGU6CiAgICAgSGVhcCYgbV9oZWFwOwogfTsKIAorY2xhc3Mg
RGVmZXJHQ0ZvckFXaGlsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJHQ0ZvckFX
aGlsZSk7CitwdWJsaWM6CisgICAgRGVmZXJHQ0ZvckFXaGlsZShIZWFwJiBoZWFwKQorICAgICAg
ICA6IG1faGVhcChoZWFwKQorICAgIHsKKyAgICAgICAgbV9oZWFwLmluY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKKyAgICB9CisgICAgCisgICAgfkRlZmVyR0NGb3JBV2hpbGUoKQorICAgIHsKKyAg
ICAgICAgbV9oZWFwLmRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSGVhcCYgbV9oZWFwOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBEZWZlckdDX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVk
X2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBv
YmplY3QgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0
byBpbmNvbWluZyByZWZlcmVuY2VzIGZyb20gdGhlIGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGlu
CisvLyByZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dzIGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBT
dWNoIG9iamVjdHMgYWxzbworLy8gaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBo
YXZlIHJlZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBHQworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVS
ZWZDb3VudGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAg
ICAgIDogbV9lbmNvZGVkUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkdDSW5j
b21pbmdSZWZDb3VudGVkKCkKKyAgICB7CisgICAgICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkp
CisgICAgICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIH0KKyAgICAKKyAgICBz
aXplX3QgbnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFoYXNBbnlJbmNvbWluZygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlm
IChoYXNTaW5nbGV0b24oKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4g
dmVjdG9yT2ZDZWxscygpLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogaW5jb21p
bmdSZWZlcmVuY2VBdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAg
IH0KKyAgICAKKyAgICAvLyBJdCdzIGdlbmVyYWxseSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0
aGlzIGRpcmVjdGx5LCBzaW5jZSBpZiB0aGlzCisgICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUg
c3VwcG9zZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2Fs
bCBHQ0luY29taW5nUmVmQ291bnRlZFNldDo6YWRkUmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBi
b29sIGFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCopOworICAgIAorICAgIC8vIEEgZmlsdGVy
IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisg
ICAgLy8gcmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYgd2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0
aGUgb2JqZWN0LAorICAgIC8vIGFuZCBpZiBpdCBkb2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4g
SW4gZ2VuZXJhbCwgeW91IGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmls
dGVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBmYWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUg
YWxzbyB3YWxraW5nIHRoZSBHQydzIGxpc3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVy
RnVuY3Rpb25UeXBlPgorICAgIGJvb2wgZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1
bmN0aW9uVHlwZSYpOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludHB0cl90IHNpbmds
ZXRvbkZsYWcoKSB7IHJldHVybiAxOyB9CisgICAgCisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxz
KCkgY29uc3QgeyByZXR1cm4gIShtX2VuY29kZWRQb2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsg
fQorICAgIGJvb2wgaGFzQW55SW5jb21pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBv
aW50ZXI7IH0KKyAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUlu
Y29taW5nKCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMoKTsgfQorICAgIAorICAgIEpTQ2VsbCogc2lu
Z2xldG9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5z
aW5nbGV0b25GbGFnKCkpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rv
ck9mQ2VsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMo
KSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmVjdG9yPEpTQ2VsbCo+ID4obV9lbmNv
ZGVkUG9pbnRlcik7CisgICAgfQorICAgIAorICAgIC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDog
dGhpcyBpcyBhIEpTQ2VsbCouCisgICAgLy8gU2luZ2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBp
cyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2VsbHMuCisgICAgdWludHB0cl90IG1fZW5jb2Rl
ZFBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21p
bmdSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
c19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+
OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJ
bmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICAgICAgc2V0SXNEZWZlcnJlZCh0
cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNl
QXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24o
KSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxs
Kj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0
b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMo
KS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNv
bWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlv
blR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgewor
ICAgICAgICBBU1NFUlQoIWlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVChyZWZDb3VudCgp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgQVNTRVJUKGlz
RGVmZXJyZWQoKSk7CisgICAgICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAg
ICBpZiAoZmlsdGVyRnVuY3Rpb24oc2luZ2xldG9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAg
ICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOworICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJl
ZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZl
Y3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9u
KHZlY3Rvck9mQ2VsbHMoKS0+YXQoaSkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHZlY3Rvck9mQ2VsbHMoKS0+YXQoaS0tKSA9IHZlY3Rvck9mQ2VsbHMoKS0+bGFzdCgpOworICAg
ICAgICB2ZWN0b3JPZkNlbGxzKCktPnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgICAgIAorICAg
IGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPmlzRW1wdHkoKSkgeworICAgICAg
ICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsK
KyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgcmV0dXJuIHNldElz
RGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAgICAgCisgICAgbV9lbmNvZGVkUG9pbnRlciA9
IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvck9mQ2VsbHMoKS0+YXQoMCkpIHwgc2luZ2xl
dG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKyNkZWZpbmUgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFQgPSBzb21lIHN1YnR5cGUgb2YgR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQsIG11c3Qgc3VwcG9ydCBhIGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpCisvLyBtZXRo
b2QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQg
eworcHVibGljOgorICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCk7CisgICAgfkdDSW5jb21p
bmdSZWZDb3VudGVkU2V0KCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBuYXRp
dmUgb2JqZWN0IGlzIG5ldyB0byB0aGlzIHNldC4KKyAgICBib29sIGFkZFJlZmVyZW5jZShKU0Nl
bGwqLCBUKik7CisgICAgCisgICAgdm9pZCBzd2VlcCgpOworICAgIAorICAgIHZvaWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBi
b29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2Vs
bCopOworICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJ
bmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRl
ZFNldDxUPjo6R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQorewor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5H
Q0luY29taW5nUmVmQ291bnRlZFNldCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9y
LnNpemUoKTsgaS0tOykKKyAgICAgICAgbV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJl
bmNlcyhyZW1vdmVBbGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29t
aW5nUmVmQ291bnRlZFNldDxUPjo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0
KQoreworICAgIGlmICghb2JqZWN0LT5hZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0
ZXMgKz0gb2JqZWN0LT5nY1NpemVFc3RpbWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8
VD46OnN3ZWVwKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFQqIG9iamVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXpl
X3Qgc2l6ZSA9IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICgh
b2JqZWN0LT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgbV9ieXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3Rvcltp
LS1dID0gbV92ZWN0b3IubGFzdCgpOworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRl
ZFNldDxUPjo6cmVtb3ZlQWxsKEpTQ2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVt
b3ZlRGVhZChKU0NlbGwqIGNlbGwpCit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0SW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1OCw2ICszNTgsMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0Nv
ZGVCbG9jayhQYXNzUmVmUAogICAgIG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2sp
OwogfQogCit2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVy
KiBidWZmZXIpCit7CisgICAgaWYgKG1fYXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBi
dWZmZXIpKSB7CisgICAgICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAg
ZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQor
CiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJv
b3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90
ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02MjEsMTQgKzYyOSwxOSBAQCBzaXplX3QgSGVhcDo6b2Jq
ZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAK
K3NpemVfdCBIZWFwOjpleHRyYVNpemUoKQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNh
Z2UgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsK
LSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkg
KyBtX2V4dHJhTWVtb3J5VXNhZ2U7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsg
bV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpj
YXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3Rv
cmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHko
KSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90
IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTgsMTEgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpB
VkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShT
d2VlcGluZ0FycmF5QnVmZmVycyk7CisgICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7Cisg
ICAgfQogCiAgICAgewogICAgICAgICBtX2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3Bh
Y2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgpKTsKQEAgLTkyNCwxMiArOTQyLDE2IEBAIHZvaWQgSGVh
cDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAK
LXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBI
ZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2Rl
ZmVycmFsRGVwdGggPj0gMSk7CiAgICAgCiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9
CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQorewor
ICAgIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRl
ZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOSArMjIsMTEgQEAKICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2lu
Y2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1
ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWRE
YXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIK
QEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgamV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAg
ICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBh
Z2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgc2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzks
NiArMTgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpOwogICAgICAgICAKICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQm
IGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBi
dWZmZXIpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
QEAgLTIzMCw2ICsyMzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0
b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERl
ZmVycmFsRGVwdGgoKTsKKyAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAg
ICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAg
ICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwpAQCAtMjQ1LDYgKzI1MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAg
ICAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0
b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+
IG1fYXJyYXlCdWZmZXJzOwogICAgICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAj
aWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDggKzQ4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3Rl
ZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgICAgICBKdW1wTGlzdCBlbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7Cisg
ICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFByb3BlcnR5
IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0
eXBlLgogICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFBy
b3BlcnR5IGlzIGludC1jaGVja2VkIGFuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQ5LDM1ICsxNTQ5LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFs
KEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0t
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51
aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUg
PSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAo
aXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKQEAgLTE2MTgsMzUgKzE1OTYsMTIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5k
aW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVp
bnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheXRUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZv
ckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCB0eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsx
NjIzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50
KHR5cGUpKTsKKyAgICAKICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlw
ZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAg
Ly8gY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwg
YmFzZSwgYW5kIHByb3BlcnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0
b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJy
YXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVk
KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBU
aW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0g
ICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChp
c1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwg
cHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0
UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCCiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxl
bWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAg
IGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsK
ICAgICAgICAgCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZw
UmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheUdldEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNp
emVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5
VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAK
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3Ro
T2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFn
ZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewog
ICAgIGNhc2UgNDoKICAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwg
VGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVn
VDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC0xODA4LDggKzE3NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRj
aCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRv
ci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkp
OworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFy
bHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihj
bGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIs
MTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAg
IC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwg
ZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUg
dW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9y
YWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAg
ICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVu
dFNpemUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVz
cyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNT
aWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9v
QmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4
ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgz
Niw3ICsxNzk3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0Qgog
ICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2Ug
MToKICAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVt
ZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
VHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAg
CiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBl
YXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gp
OwpAQCAtMTg5OCw5ICsxODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2Ug
YXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVj
dHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVT
Y3JhdGNoKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgY29udmVydERvdWJsZVRv
RmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFz
ZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNiwxMCArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCiAKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLQogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC00MiwxMyArMzksOSBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihB
cnJheUJ1ZmZlckNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGFs
bFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZlclZpZXcqIGkg
PSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAgaWYgKCFpLT5p
c05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IGZhbHNl
OwotICAgIH0KKyAgICBib29sIGlzTmV1dGVyYWJsZSA9ICFtX3BpbkNvdW50OwogCi0gICAgaWYg
KGFsbFZpZXdzQXJlTmV1dGVyYWJsZSkKKyAgICBpZiAoaXNOZXV0ZXJhYmxlKQogICAgICAgICBt
X2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1fY29udGVu
dHMuY29weVRvKHJlc3VsdCk7CkBAIC01NiwzNiArNDksMTMgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIHdoaWxlIChtX2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIGN1
cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50KTsKLSAgICAg
ICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRlcmFibGUoKSkK
LSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJlZFZpZXdzLmFw
cGVuZChjdXJyZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZJbmNvbWluZ1JlZmVy
ZW5jZXMoKTsgaS0tOykgeworICAgICAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHlu
YW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihpbmNvbWluZ1JlZmVyZW5jZUF0KGkpKTsKKyAg
ICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5uZXV0ZXIoKTsKICAgICB9CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2aWV3LT5tX3By
ZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7Ci0gICAgaWYg
KG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXc7Ci0g
ICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpyZW1vdmVWaWV3
KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2aWV3LT5tX2J1
ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXctPm1fbmV4dFZp
ZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3LT5tX3ByZXZW
aWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmlldy0+bV9uZXh0
VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9maXJzdFZpZXcg
PSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX25leHRW
aWV3ID0gMDsKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwogCi19CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBA
IC0yNiwxNSArMjYsMTYgQEAKICNpZm5kZWYgQXJyYXlCdWZmZXJfaAogI2RlZmluZSBBcnJheUJ1
ZmZlcl9oCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVm
ZmVyVmlldzsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVu
dHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAt
NDUsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVy
Q29udGVudHMoKTsKLQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApA
QCAtODYsMTIgKzg3LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsK
IH07CiAKLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+
IHsKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5
QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJy
YXlCdWZmZXIqKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNy
ZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVu
dHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFk
b3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBP
bmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAg
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAt
MTAyLDkgKzEwNCw5IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OwotCi0gICAgdm9pZCBhZGRW
aWV3KEFycmF5QnVmZmVyVmlldyopOwotICAgIHZvaWQgcmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZp
ZXcqKTsKKyAgICAKKyAgICB2b2lkIHBpbigpOworICAgIHZvaWQgdW5waW4oKTsKIAogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0
b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7CiAgICAgYm9vbCBp
c05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CkBAIC0xMTksOCArMTIx
LDExIEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgoaW50IGluZGV4
KSBjb25zdDsKICAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVm
dCwgaW50IHJpZ2h0KTsKIAorICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CiAgICAgQXJyYXlCdWZm
ZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9maXJzdFZpZXc7
CisKK3B1YmxpYzoKKyAgICBXZWFrPEpTQXJyYXlCdWZmZXI+IG1fd3JhcHBlcjsKIH07CiAKIGlu
dCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCkKQEAg
LTE1OSw2ICsxNjQsMTIgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMpKTsKIH0KIAor
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBBcnJheUJ1ZmZlckNvbnRl
bnRzIGNvbnRlbnRzKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpLCBieXRlTGVuZ3RoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlKGNvbnRlbnRzKTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJy
YXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2ln
bmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1cm4gY3JlYXRlKG51bUVsZW1lbnRzLCBl
bGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFsaXplKTsKQEAg
LTE3NCw3ICsxODUsNyBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
CiB9CiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiBjb250
ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCisgICAgOiBtX3BpbkNvdW50KDApCiB7CiAgICAg
Y29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7CiB9CkBAIC0yMTgsNiArMjI5LDE2IEBAIHVu
c2lnbmVkIEFycmF5QnVmZmVyOjpjbGFtcEluZGV4KGludCBpbmQKICAgICByZXR1cm4gY2xhbXBW
YWx1ZShpbmRleCwgMCwgY3VycmVudExlbmd0aCk7CiB9CiAKK3ZvaWQgQXJyYXlCdWZmZXI6OnBp
bigpCit7CisgICAgbV9waW5Db3VudCsrOworfQorCit2b2lkIEFycmF5QnVmZmVyOjp1bnBpbigp
Cit7CisgICAgbV9waW5Db3VudC0tOworfQorCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRy
eUFsbG9jYXRlKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUs
IEFycmF5QnVmZmVyQ29udGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSwgQXJyYXlC
dWZmZXJDb250ZW50cyYgcmVzdWx0KQogewogICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3Zl
cmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCkBAIC0yNTMsNyArMjc0LDUgQEAgQXJyYXlCdWZmZXJD
b250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotdXNp
bmcgSlNDOjpBcnJheUJ1ZmZlcjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsKLQog
I2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwyOCArMzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVm
ZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAg
ICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1f
cHJldlZpZXcoMCkKLSAgICAsIG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlC
dWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAg
ICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQog
ewogICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9i
dWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAot
ICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+
QXJyYXlCdWZmZXJWaWV3KCkKIHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVy
LT5yZW1vdmVWaWV3KHRoaXMpOworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAgIG1f
YnVmZmVyLT51bnBpbigpOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3Zv
aWQgQXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1
ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1
dGVyYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxh
ZzsKKyAgICAKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKGZsYWcpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAgICAg
bV9idWZmZXItPnBpbigpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZp
ZXdfaAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlU
eXBlIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzcsNDQgKzM3LDQzIEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJW
aWV3PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAot
ICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5
cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAg
ICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQs
Ci0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRU
eXBlKCkgY29uc3QgPSAwOworICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBn
ZXRUeXBlKCkgY29uc3QgPSAwOwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhbV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAg
ICB9CisgICAgCiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAg
ICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkg
Y29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWdu
ZWQgYnl0ZU9mZnNldCgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAg
fQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAg
dm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0K
KyAgICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKKyAgcHJvdGVj
dGVkOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwogCiAgICAgaW5saW5lIGJvb2wgc2V0
SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKQEAgLTgzLDE0ICs4
MiwxNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJbXBsKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOwogCi0gICAgc3RhdGljIGlu
bGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVu
c2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7Cisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQs
IGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CiAKICAg
ICAvLyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlC
dWZmZXIgaXMKICAgICAvLyB3aXRoaW4gcmFuZ2UuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICBz
dGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cykKICAgICB7
Ci0gICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zm
c2V0ICUgc2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1LDcgKzEw
NywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBl
bGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwogICAgIC8vIG91dHB1dCBvZmZzZXQgaXMg
aW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51
bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYXJyYXlC
eXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisgICAg
c3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgKm51bUVsZW1lbnRzKQogICAgIHsKICAgICAgICAgdW5z
aWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFYIC0gYXJyYXlCeXRlT2Zmc2V0KSAvIHNpemVvZihU
KTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBtYXhPZmZzZXQpIHsKQEAgLTExOSwxOSArMTI0LDE1
IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5n
RWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2Yg
dGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9p
ZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVuc2lnbmVkIG1fYnl0ZU9mZnNldCA6IDMxOwogICAg
IGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwogCi1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVy
OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9wcmV2VmlldzsKLSAgICBBcnJheUJ1ZmZlclZpZXcq
IG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1
ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQpAQCAtMTc2LDcgKzE3Nyw4IEBA
IGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVuc2kKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChp
bnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwg
dW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRB
bmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQs
IHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQg
Kz0gYXJyYXlTaXplOwpAQCAtMTk2LDYgKzE5OCw0IEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3Ojpj
YWxjdWxhdGVPZmZzZXRBbmQKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJy
YXlCdWZmZXJWaWV3OwotCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhhc2hFbnRyeTsK
K2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owogc3RydWN0IEhhc2hUYWJsZTsKIAogc3RydWN0IE1l
dGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3LDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAg
ICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0cikoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwog
ICAgIEdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcjsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgKCpTbG93RG93bkFuZFdhc3RlTWVtb3J5
KShKU0FycmF5QnVmZmVyVmlldyopOworICAgIFNsb3dEb3duQW5kV2FzdGVNZW1vcnkgc2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeTsKKyAgICAKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0FycmF5QnVmZmVyVmlldyopOworICAgIEdl
dFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBsOwogfTsKIAogI2RlZmluZSBDUkVBVEVf
TUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzksNiArMTQ2LDggQEAgc3RydWN0IE1ldGhv
ZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6c2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRUeXBlZEFycmF5SW1wbCBc
CiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1
Mzc3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOjE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEYXRhVmlldy5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1l
c3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5pb24gVmFsdWUgeworICAgIFQgZGF0
YTsKKyAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICBpZiAoIWJ1ZmZlci5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7
Cit9CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQoreworICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVj
a2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7
CisgICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZl
R2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
KTsKK30KKworRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5
QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxl
bmd0aCkKK3sKK30KKworc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5k
aWFuKQoreworI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47Cisj
ZWxzZQorICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB2b2lk
IHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQoreworICAgIGNoYXIgdGVtcCA9ICpwOworICAg
ICpwID0gKnE7CisgICAgKnEgPSB0ZW1wOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3Ix
NkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDEpOworfQorCitzdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCAr
IDMpOworICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOworfQorCitzdGF0aWMgdm9pZCBmbGlw
Qnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDcpOworICAg
IHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOworICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwor
ICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNJ
Zk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQorewor
ICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybjsK
KworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICAgLy8gTm90aGluZyB0
byBkby4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmbGlwQnl0ZXNGb3Ix
NkJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGZsaXBC
eXRlc0ZvcjMyQml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAg
ICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAor
eworICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBu
b3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEg
YnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBs
b2Fkcy4KKyAgICBWYWx1ZTxUPiB2YWx1ZTsKKyAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihU
KSk7CisgICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxl
RW5kaWFuKTsKKyAgICByZXR1cm4gdmFsdWUuZGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChiZXlvbmRS
YW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhl
IGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0
ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KKyAgICBWYWx1ZTxU
PiB0ZW1wVmFsdWU7CisgICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKKyAgICBmbGlwQnl0ZXNJ
Zk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBt
ZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVt
cFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOworfQorCitpbnQ4X3QgRGF0YVZpZXc6OmdldEludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdl
dERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCit1aW50OF90IERhdGFW
aWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQor
CitpbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50
MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQxNl90IERhdGFW
aWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKworaW50MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlh
biwgZWMpOworfQorCit1aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1
cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisK
K2Zsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxmbG9h
dD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2RvdWJsZSBEYXRhVmlldzo6
Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50OCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERh
dGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRh
Vmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7
Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
K30KKwordm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9h
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNl
dERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwor
dm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRh
PGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lk
IERhdGFWaWV3OjpuZXV0ZXIoKQoreworICAgIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7Cisg
ICAgbV9ieXRlTGVuZ3RoID0gMDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzkgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhVmlldy5oIgogCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5p
b24gVmFsdWUgewotICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19Owot
Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZp
ZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAg
ICBpZiAoIWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIsIDAsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3
OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVy
LT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3Qs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8
dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAg
IENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9m
ZnNldCArIGNoZWNrZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgp
IHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5
dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKLX0KK25hbWVzcGFjZSBKU0MgewogCiBEYXRhVmlldzo6
RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwg
Ynl0ZU9mZnNldCkKQEAgLTY2LDE3OSArMzQsMTEgQEAgRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZQogewogfQogCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9v
bCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRs
ZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQot
aW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1w
ID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZs
aXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBC
eXRlcyhwLCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRp
YyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBw
ICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAy
LCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVF
bmRpYW4pCi17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZs
aXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAg
ICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA4OgotICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0
YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291
bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQg
dW5hbGlnbmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5i
eXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNl
dCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9m
KFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0
byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJv
ciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgot
ICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAg
IGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRp
YW4pOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRl
T2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmll
dzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVp
bnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8RGF0
YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogewotICAgIHJl
dHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci11aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1
aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0
YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1k
b3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJs
ZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNl
dEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1
ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgYnl0ZUxlbmd0aCkpOwogfQogCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KK30gLy8g
bmFtZXNwYWNlIEpTQwogCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGFWaWV3LmgJKHJldmlzaW9uIDE1Mzc3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRGF0YVZpZXcuaDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBEYXRhVmlld19oCisjZGVmaW5lIERhdGFWaWV3X2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvQXJy
YXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBEYXRhVmll
dyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9CisgICAgdmlydHVhbCB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50LCBpbnQpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKworICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50OF90IGdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOyB9CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVpbnQxNl90IGdldFVpbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDE2
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBp
bnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgaW50MzJfdCBn
ZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVP
ZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZG91YmxlIGdl
dEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGRvdWJsZSBnZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRJbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJ
bnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDE2KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfSAKKyAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQg
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQzMihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91Ymxl
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVl
LCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
VHlwZURhdGFWaWV3OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBuZXV0
ZXIoKTsKKworcHJpdmF0ZToKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGlubGluZSBib29sIGJleW9uZFJhbmdlKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQgPj0gbV9ieXRlTGVuZ3RoIHx8IGJ5dGVP
ZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwor
fTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEYXRhVmlld19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29w
eSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiw3NiArMjYsMzMgQEAKICNpZm5kZWYgRGF0YVZpZXdfaAogI2RlZmluZSBEYXRhVmlld19o
CiAKLSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgIkFycmF5
QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgor
ICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkg
Y29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0
VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBp
bnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFs
c2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0
MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBk
b3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91Ymxl
IGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0
ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRG
bG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9h
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ieXRlTGVuZ3Ro
OworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKICAgICB9CiAKLXByb3RlY3Rl
ZDoKLSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KIHByaXZhdGU6Ci0gICAgRGF0YVZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBi
ZXlvbmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0
ID49IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3Ro
OyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9m
ZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAg
IHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsKIH07CiAKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBEYXRhVmlld19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgpAQCAtMjQsODQgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEZs
b2F0MzJBcnJheV9oCi0jZGVmaW5lIEZsb2F0MzJBcnJheV9oCisjaWZuZGVmICJGbG9hdDMyQXJy
YXlfaCIKKyNkZWZpbmUgIkZsb2F0MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJh
c2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgRmxvYXQzMkFycmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJh
eT4gY3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAv
LyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3
aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0
bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAgICB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KGluZGV4ID49IFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9IHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xh
c3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6
Y3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRl
PEZsb2F0MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGVV
bmluaXRpYWxpemVkPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5OjpG
bG9hdDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5
PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IEZsb2F0MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQzMkFycmF5OworI2luY2x1ZGUgIlR5
cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTEsOTggKzEwLDIzIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAotI2RlZmluZSBG
bG9hdDY0QXJyYXlfaAorI2lmbmRlZiAiRmxvYXQ2NEFycmF5X2giCisjZGVmaW5lICJGbG9hdDY0
QXJyYXlfaCIKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1
YmxpYyBUeXBlZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91Ymxl
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5k
ZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5
QmFzZTxkb3VibGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
dmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZp
ZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IAotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZy
aWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9h
dDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNv
bnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0
NjRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZs
b2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2
NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZs
b2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxv
YXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpGbG9hdDY0QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKIAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXdfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBHZW5lcmljVHlwZWRB
cnJheVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBHZW5l
cmljVHlwZWRBcnJheVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25z
dCBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlJiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KGJhc2VBZGRyZXNzKCkpOyB9
CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBhcnJh
eSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldEltcGwoYXJyYXks
IG9mZnNldCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
c2V0UmFuZ2UoY29uc3QgQWRhcHRvcjo6VHlwZSogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVu
c2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCisgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAg
IGRhdGFMZW5ndGggKiBzaXplb2YoQWRhcHRvcjo6VHlwZSksIG9mZnNldCAqIHNpemVvZihBZGFw
dG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgemVyb1JhbmdlKHVuc2lnbmVkIG9m
ZnNldCwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiB6ZXJvUmFuZ2VJbXBs
KG9mZnNldCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSwgbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6
OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoKCkKKyAgICB7CisgICAg
ICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpOworICAgIH0KKworICAgIEFkYXB0b3I6OlR5cGUgaXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgp
OworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0
aCk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgZGF0YSgpW2luZGV4
XSA9IEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGVj
a0luYm91bmREYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgcG9zKSBjb25zdAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIHJldHVy
biAob2Zmc2V0IDw9IGxlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zIDw9IGxlbmd0
aAorICAgICAgICAgICAgLy8gY2hlY2sgb3ZlcmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCAr
IHBvcyA+PSBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBl
ZEFycmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEdl
bmVyaWNUeXBlZEFycmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
KyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV9sZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQ
dHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsK
KyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpjcmVhdGUoCisgICAgY29uc3QgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiByZXN1bHQgPSBjcmVh
dGUobGVuZ3RoKTsKKyAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIGFycmF5LCBsZW5ndGggKiBz
aXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7Cisg
ICAgaWYgKCF2ZXJpZnlTdWJSYW5nZShidWYsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgIEFy
cmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5
cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNy
ZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0
LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7
CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIGxlbmd0aCgpLCAmb2Zm
c2V0LCAmbGVuZ3RoKTsKKyAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5
cGU+KGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyKCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZp
c2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGlj
OgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNM
ZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUu
bGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIq
IGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQg
c2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVy
ID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRl
cmZseSogYnV0dGVyZmx5KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0gMTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcg
b2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBhcnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0Fy
cmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcgdGhlIHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChh
cnJheS5sZW5ndGgpLgogICAgICAgICAgICAgdWludDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBv
ZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRoaXMsIGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBs
ZW5ndGhzOworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVm
ZmVyKiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRBcnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
QEAgLTI0LDgwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbnQ4
QXJyYXlfaAotI2RlZmluZSBJbnQ4QXJyYXlfaAorI2lmbmRlZiAiSW50OEFycmF5X2giCisjZGVm
aW5lICJJbnQ4QXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4QXJy
YXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoY29u
c3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBi
ZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4g
RG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlw
dCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNp
bmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Vmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDg7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAv
LyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xh
c3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJ
bnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0
ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4g
SW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhf
dD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5PihsZW5ndGgpOwotfQotCi1JbnQ4QXJy
YXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8
aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJ
bnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJh
eT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQ4QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJh
eXMuaCIKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEw
IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTIzLDgwICsyMywx
MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbnQxNkFycmF5X2gKLSNkZWZp
bmUgSW50MTZBcnJheV9oCisjaWZuZGVmICJJbnQxNkFycmF5X2giCisjZGVmaW5lICJJbnQxNkFy
cmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50MTZBcnJheSA6IHB1Ymxp
YyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQx
Nl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNl
ZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0g
ICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0
aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBU
eXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Vmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDE2
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MTZBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBj
bGFzcyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJh
eT4gSW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQxNl90KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQx
Nl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJh
eTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQxNkFycmF5
PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6SW50
MTZBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gSW50MTZBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJ
KHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMy
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjQsNzcgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
Ci0jaWZuZGVmIEludDMyQXJyYXlfaAotI2RlZmluZSBJbnQzMkFycmF5X2gKKyNpZm5kZWYgIklu
dDMyQXJyYXlfaCIKKyNkZWZpbmUgIkludDMyQXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFs
VHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEludDMyQXJyYXkg
OiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShjb25zdCBp
bnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJy
YXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5
cGVkQXJyYXlCYXNlPGludD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PGludD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUg
Z2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDMyOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNv
bnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRB
cnJheUJhc2U8aW50PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50
Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJh
eT4gSW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGFy
cmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3Jl
YXRlPEludDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxJbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1JbnQzMkFycmF5OjpJbnQzMkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMy
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXko
c3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5
OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5SW1wbDxJbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLXVzaW5nIEpTQzo6SW50MzJBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAj
ZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyOjpzX2luZm8gPSB7
CisgICAgIkFycmF5QnVmZmVyIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU0FycmF5QnVmZmVyKX07CisKK0pTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZmZXIoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlC
dWZmZXIpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2ltcGwoYXJyYXlCdWZm
ZXIuZ2V0KCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICB2bS5oZWFwLmFkZFJl
ZmVyZW5jZSh0aGlzLCBtX2ltcGwpOworfQorCitKU0FycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVy
OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gcGFzc2VkQnVmZmVyOworICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXI+KHZtLmhlYXApKQorICAg
ICAgICBKU0FycmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlcik7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBK
U0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJh
eSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZh
bHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wg
SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCkt
PmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJh
eUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAg
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRp
bmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpk
ZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjVCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVy
biByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9u
bHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIq
PihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFy
cmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
QXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
SlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+KTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGlj
IEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnRzIHsgcmV0dXJuIG1f
aW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJv
cGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEV4ZWNTVGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRl
OgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSogcHJvdG90eXBlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCAiQXJy
YXlCdWZmZXIiKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigxKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworfQorCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3Iodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJl
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1
ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBj
b25zdHJ1Y3RvciA9CisgICAgICAgIGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihl
eGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJB
cnJheUJ1ZmZlciBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikp
OworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMy
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCAxKTsKKyAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIEpTQXJyYXlC
dWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0o
KSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBi
dWZmZXIpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwor
Q29uc3RydWN0VHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
CisgICAgSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJl
dHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworQ2FsbFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAg
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0
dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOworCitjbGFzcyBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7
CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclBy
b3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5
QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11
c3QgYmUgYW4gYXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAg
CisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxz
ZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+
c2xpY2UoYmVnaW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2Jh
bE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZm
ZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUs
IG5ld0J1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0gewor
ICAgICJBcnJheUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQcm90
b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1l
cy0+c2xpY2UsIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKK30KKwor
SlNBcnJheUJ1ZmZlclByb3RvdHlwZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eUJ1ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU0FycmF5QnVmZmVyUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvID0geworICAgICJB
cnJheUJ1ZmZlclZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQXJyYXlCdWZmZXJWaWV3KTsKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsCisgICAgSW5p
dGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZh
c3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1l
bnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXpl
LCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFz
dFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAobW9kZSA9
PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNp
emUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFzV29yZHNbaV0g
PSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5
IHRvIHVzZSBtb3JlIHRoYW4gNEdCIGxlc3MgYSBmZXcgYnl0ZXMuCisgICAgaWYgKGxlbmd0aCA+
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihVSU5UX01BWCAtIFdhc3RlZnVsVHlwZWRBcnJheSkgLyBl
bGVtZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9G
aWxsKSB7CisgICAgICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5n
ZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCF0cnlNYWxsb2MobGVuZ3RoICogZWxlbWVudFNpemUpLmdldFZhbHVlKG1fdmVj
dG9yKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3Qoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpICogZWxlbWVudFNp
emUpOworICAgIAorICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIG1fbW9kZSA9IE92
ZXJzaXplVHlwZWRBcnJheTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNv
bnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIsCisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAs
IG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5
dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxU
eXBlZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGlu
ZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1
dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hl
YWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYg
dm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0
LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4
dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21v
ZGUoY29udGV4dC5tb2RlKCkpCit7CisgICAgY29udGV4dC5kaXNvd24oKTsKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5
cGVkQXJyYXk6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToK
KyAgICAgICAgdm0uaGVhcC5hZGRGaW5hbGl6ZXIodGhpcywgZmluYWxpemUpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRk
UmVmZXJlbmNlKHRoaXMsIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZl
cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZhbHVlKAorICAg
ICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAg
ICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVm
ZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
anNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBzbG90LnNldFZh
bHVlKAorICAgICAgICAgICAgZXhlYy0+dm0oKS50eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygK
KyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09i
amVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6
cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0
TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJv
cGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpT
QXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJy
YXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQK
KyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHkoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZz
ZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYg
KG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+
KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFy
cmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICBmYXN0
RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1
ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1
cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0
ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpT
QXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0
IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdp
dGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRo
ZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBv
ZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNo
IGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGlj
czsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBj
b250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBub3cuCisvLworLy8g
T25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlz
IHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhh
dmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJy
YXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBh
cmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWly
ZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1
dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxs
IGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IK
KyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5
LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3
J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0
eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAg
IC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3Vs
ZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxs
b2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRB
cnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUg
dmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVs
ZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJy
YXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisg
ICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFy
cmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJh
Y2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVk
IHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAv
LyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJy
YXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBl
eHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBh
bmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1l
bW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdo
ZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1
c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBs
ZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQg
YXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlm
IGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEw
MDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50
MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVu
dFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfnNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3Ry
dWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlv
bkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6
YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07CisgICAgICAgIAorICAgICAg
ICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAg
ICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICAgICAgfkNvbnN0cnVj
dGlvbkNvbnRleHQoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIXN0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7
CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21v
ZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBK
U0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1NU
YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBm
dWxsLW9uIG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisg
ICAgLy8gbW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2
b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVk
QXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZl
ciogYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAg
ICB2b2lkIG5ldXRlcigpOworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVj
dG9yOyB9CisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0OworICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JU
REFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZWZWN0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZp
ZXcsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2
b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9k
ZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlC
dWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNk
ZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9t
b2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyVmlldyogSlNB
cnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlm
TmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5h
cnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpT
QXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sKKyAgICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0
VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3
OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3RoID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpT
QXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBpZiAobV9tb2RlICE9
IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAgICAgICBBU1NFUlQobV9tb2RlID09IEZhc3RUeXBl
ZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IGRlbHRhID0KKyAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+
ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHJlc3VsdCkgPT0g
ZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMs
NCArMjIzLDE0IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5
KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIEpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcq
KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlwZWRB
cnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9UeXBlVHJhaXRzLmg+CkBAIC0xMzQsNyArMTM0LDcgQEAgcHVibGljOgogICAgIFN0cnVj
dHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBtX3N0cnVjdHVyZS51bnZhbGlk
YXRlZEdldCgpOyB9CiAjZW5kaWYKICAgICAgICAgCi0gICAgc3RhdGljIGNvbnN0IFR5cGVkQXJy
YXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVkQXJyYXlOb25lOworICAgIHN0YXRp
YyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBOb3RUeXBlZEFy
cmF5OwogcHJvdGVjdGVkOgogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRh
Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXc6
OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmlldyhWTSYg
dm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0
KQoreworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVy
LAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJh
eUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAgICAgICAgICAgZXhlYywg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFu
Z2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0
aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0
ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZpZXcqIHJlc3VsdCA9
CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXc+KHZtLmhlYXAp
KSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVh
dGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpT
RGF0YVZpZXc6OmNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitib29sIEpTRGF0YVZp
ZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KGNlbGwpOworICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQor
Citib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
K30KKwordm9pZCBKU0RhdGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJh
eVZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU1R5
cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gRGF0YVZpZXc6OmNyZWF0ZSgK
KyAgICAgICAgdGhpc09iamVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwg
dGhpc09iamVjdC0+bV9sZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld19oCisjZGVmaW5lIEpTRGF0YVZpZXdfaAor
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZWxlbWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXcoVk0m
LCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0
YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAgVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCk7CisgICAgCisgICAgLy8gRHVtbXkgbWV0aG9kcywgd2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29y
azsgdGhlc2UgYXJlIGp1c3QgaW4gcGxhY2UgdG8KKyAgICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxh
dGUgc3BlY2lhbGl6YXRpb24gd2UgZG8gZWxzZXdoZXJlLgorICAgIHN0YXRpYyBKU0RhdGFWaWV3
KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJh
eVN0b3JhZ2VUeXBlID0gVHlwZURhdGFWaWV3OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNUeXBlZEFycmF5
VmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRB
cnJheUltcGwoSlNUeXBlZEFycmF5VmlldyopOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5m
byBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZp
ZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBlLmgi
CisKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3UHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkRh
dGFWaWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgRXhlY1N0YXRlOjpkYXRhVmlld1Rh
YmxlLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlld1Byb3RvdHlwZSkKK307CisK
Ky8qIFNvdXJjZSBmb3IgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaAorQGJlZ2luIGRhdGFUYWJs
ZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDggICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50MTYgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQzMiAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0Rmxv
YXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDggICAgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBz
ZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50MTYgICAgICAgICAgICAgIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNiAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQzMiAgICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMy
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0MzIgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRG
bG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKK0BlbmQKKyovCisKK0pT
RGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworSlNEYXRhVmll
d1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAg
ICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlld1Byb3RvdHlwZT4odm0u
aGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAg
cHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30K
KworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25TbG90PEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxl
KGV4ZWMpLCBqc0Nhc3Q8RGF0YVZpZXdQcm90b3R5cGUqPihjZWxsKSwKKyAgICAgICAgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0
PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8
RGF0YVZpZXdQcm90b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUg
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBq
c0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFk
YXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcu
IikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFz
dCBvbmUgYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0KS4iKSk7CisgICAgCisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlm
IChzaXplb2YoQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAy
KSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihl
eGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaWVuZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNz
IikpOworICAgIAorICAgIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxB
ZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkg
KyBieXRlT2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRp
YW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAg
IAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBzZXREYXRh
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1p
Y0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7Cisg
ICAgCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IHR3
byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBBZGFwdG9yOjpUeXBlIHZhbHVlID0gQWRhcHRv
cjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2Yo
QWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAg
ICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaWVuZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZz
ZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAg
IAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pKQor
ICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVj
dG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJ
bnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MzJBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8Rmxv
YXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0
SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDE2QWRhcHRv
cj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXRE
YXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQz
MkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTRGF0
YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3Rl
Y3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgICAg
IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3RvdHlwZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zsb2F0MzJBcnJheV9oIgor
I2RlZmluZSAiSlNGbG9hdDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgIkpTRmxvYXQ2NEFycmF5X2giCisjZGVmaW5lICJKU0Zsb2F0NjRBcnJh
eV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlv
biBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZv
ciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhl
cmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8K
Ky8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAg
ICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmpl
Y3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBl
ZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3Vy
IHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMh
CisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9u
YWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9p
bnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBv
aW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBo
ZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBi
eSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5
b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNp
ZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0
CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0
aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRo
ZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6Cisv
LworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAg
ICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJh
eSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8v
ICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4
X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUg
dG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3Qp
OworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGVsZW1lbnRTaXplID0gc2l6ZW9mKEFkYXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOwor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFkYXB0b3I6OlZpZXdUeXBl
PiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1
Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGlt
cGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsgfQor
ICAgIAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBZGFwdG9yOjpUeXBlKj4obV92ZWN0
b3IpOworICAgIH0KKyAgICBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9
CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2Vz
cyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGln
aHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5T
ZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9s
ZW5ndGg7CisgICAgfQorICAgIAorICAgIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNO
YXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0
aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBk
b3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkp
KTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5
QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2
YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNp
Z25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05h
dGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFkYXB0b3I6OlR5
cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCB2YWx1ZSk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBib29sIGNhblNldFF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3Ro
CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAg
IC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zm
c2V0OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYg
aXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBl
eGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVNldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nl
c3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAgYm9vbCBzZXRXaXRoU3BlY2lmaWNUeXBl
KEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9u
IGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAgLy8gdGhlbiBpdCB3aWxsIGhhdmUgdGhy
b3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRp
YyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFwdG9yOjp0
eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpOworCisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2
b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZv
aWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisK
KyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQgbW92ZXMgZGF0
YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGlzIG5l
dmVyIGFsbG9jYXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTVHlwZWRBcnJheVZpZXcqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
eworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0
ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihWTSYsIFN0cnVjdHVy
ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBw
cm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBwcm90b3R5cGUgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcih2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtLCBw
cm90b3R5cGUsIG5hbWUpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJl
cXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPQorICAgICAgICBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZSgKKyAgICAgICAgICAgIFZpZXdDbGFz
czo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciog
anNCdWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgw
KSkpIHsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1w
bCgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwor
ICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICAgICAgbGVu
Z3RoID0gZXhlYy0+YXJndW1lbnQoMikudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgo
YnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3Qg
YSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9
IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXpl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpj
cmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7Cisg
ICAgfQorICAgIAorICAgIGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBU
eXBlRGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50
LiIpKTsKKyAgICAKKyAgICAvLyBGb3IgZXZlcnl0aGluZyBidXQgRGF0YVZpZXcsIHdlIGFsbG93
IGNvbnN0cnVjdGlvbiB3aXRoIGFueSBvZjoKKyAgICAvLyAtIEFub3RoZXIgYXJyYXkuIFRoaXMg
Y3JlYXRlcyBhIGNvcHkgb2YgdGhlIG9mIHRoYXQgYXJyYXkuCisgICAgLy8gLSBBbiBpbnRlZ2Vy
LiBUaGlzIGNyZWF0ZXMgYSBuZXcgdHlwZWQgYXJyYXkgb2YgdGhhdCBsZW5ndGggYW5kIHplcm8t
aW5pdGlhbGl6ZXMgaXQuCisgICAgCisgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9CisgICAgICAgICAgICBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIAorICAgICAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6
Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0LT5zZXQoZXhlYywgb2Jq
ZWN0LCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBpbnQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgbGVuZ3Ro
IGlzIG5lZ2F0aXZlLiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6
Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KK0NvbnN0cnVjdFR5cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1
cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K0NhbGxEYXRhIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xh
c3M+OworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3RydWN0aW9uQ29u
dGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250
ZXh0KHZtLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICBp
ZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9u
Q29udGV4dCBjb250ZXh0KAorICAgICAgICB2bSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihB
ZGFwdG9yOjpUeXBlKSwgQ29uc3RydWN0aW9uQ29udGV4dDo6RG9udEluaXRpYWxpemUpOworICAg
IGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkp
CisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVy
aWZ5U3ViUmFuZ2U8QWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKSB7
CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRl
eHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZt
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7Cisg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBpbXBsLT5idWZmZXIoKTsKKyAgICBDb25z
dHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBpbXBsLT5ieXRl
T2Zmc2V0KCksIGltcGwtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sK
KyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBpbXBsKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OnZhbGlkYXRlUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoY2FuQWNjZXNzUmFuZ2VRdWlja2x5KG9mZnNldCwg
bGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQg
bGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzIikpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KK2Jv
b2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldFdpdGhTcGVjaWZpY1R5cGUo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBPdGhlclR5cGUqIG90aGVyLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBIYW5kbGUgdGhlIGhpbGFyaW91cyBjYXNlOiB0
aGUgYWN0IG9mIGdldHRpbmcgdGhlIGxlbmd0aCBjb3VsZCBoYXZlIHJlc3VsdGVkCisgICAgLy8g
aW4gbmV1dGVyaW5nLiBXZWxsLCBuby4gVGhhdCdsbCBuZXZlciBoYXBwZW4gYmVjYXVzZSB0aGVy
ZSBjYW5ub3QgYmUKKyAgICAvLyBzaWRlLWVmZmVjdHMgb24gZ2V0dGluZyB0aGUgbGVuZ3RoIG9m
IGEgdHlwZWQgYXJyYXkuIEJ1dCBwcmVkaWN0aW5nIHdoZXJlIHRoZXJlCisgICAgLy8gYXJlLCBv
ciBhcmVuJ3QsIHNpZGUtZWZmZWN0cyBpcyBhIGZvb2wncyBnYW1lIHNvIHdlIHJlc29ydCB0byB0
aGlzIGNoZWFwCisgICAgLy8gY2hlY2suIFdvcnN0IGNhc2UsIGlmIHdlJ3JlIHdyb25nLCBwZW9w
bGUgc3RhcnQgc2VlaW5nIGxlc3MgdGhpbmdzIGdldCBjb3BpZWQKKyAgICAvLyBidXQgd2Ugd29u
J3QgaGF2ZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCisgICAgbGVuZ3RoID0gc3RkOjptaW4o
bGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgIAorICAgIGlmICghdmFsaWRhdGVSYW5nZShl
eGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBp
ZiAob3RoZXItPmxlbmd0aCgpICE9IGxlbmd0aCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IHRocm93UmFuZ2VFcnJvcihleGVjLCAiTGVuZ3RoIG9mIGluY29taW5nIGFycmF5IGNoYW5nZWQg
dW5leHBlY3RlZGx5LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHNldEluZGV4UXVpY2ts
eShvZmZzZXQgKyBpLCBvdGhlci0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENs
YXNzSW5mbyogY2kgPSBvYmplY3QtPmNsYXNzSW5mbygpOworICAgIGlmIChjaS0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlID09IEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICAvLyBUaGUgc3Vw
ZXIgZmFzdCBjYXNlOiB3ZSBjYW4ganVzdCBtZW1jcHkgc2luY2Ugd2UncmUgdGhlIHNhbWUgdHlw
ZS4KKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90aGVyID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihs
ZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRl
UmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbWVtY3B5KAorICAgICAgICAgICAgdHlwZWRWZWN0b3IoKSArIG9m
ZnNldCwgb3RoZXItPnR5cGVkVmVjdG9yKCksCisgICAgICAgICAgICBvdGhlci0+bGVuZ3RoKCkg
KiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBU
eXBlSW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTSW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJh
eSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVy
biBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3Qp
LCBvZmZzZXQpOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsK
KyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0
KTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNU
eXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBj
YXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMs
IGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0
NjRBcnJheSo+KG9iamVjdCksIG9mZnNldCk7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAg
IGNhc2UgVHlwZURhdGFWaWV3OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBv
ZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFdl
IGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9uJ3QuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFzZXRJbmRleFF1aWNrbHkoZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5nZXQoZXhlYywg
aSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xv
dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRW
YWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSAqIHNpemVvZihBZGFwdG9yOjpUeXBl
KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBz
bG90LnNldFZhbHVlKGdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhp
c09iamVjdC0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlwZSkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgY2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoZ2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBs
eSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAg
ICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFz
SW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7Cisg
ICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaSwgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmpl
Y3QpOworICAgIAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4g
cGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Q
cm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0
aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5
cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNl
cHRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXR5TmFtZS5hc0luZGV4KCkg
IT0gUHJvcGVydHlOYW1lLk5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoCisgICAg
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAg
dGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBz
bG90KTsKKyAgICB9CisgICAgCisgICAgaWYgKCFjYW5HZXRJbmRleFF1aWNrbHkocHJvcGVydHlO
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNsb3Quc2V0VmFsdWUoZ2V0
SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6cHV0QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1B
WF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJv
dyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dCgKKyAgICAgICAgICAg
IHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghY2Fu
U2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHku
IEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRocm93aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBi
ZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5kcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBzZXRJbmRleFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlO
YW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBzd2l0Y2gg
KHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAg
ICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvclRva2VuLCB0
aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAg
ICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXpl
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxU
eXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5n
U3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2Vu
IHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAodG9r
ZW4gPT0gVHlwZWRBcnJheVZlY3RvclRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHko
dGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNP
YmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9j
YXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdW
ZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNP
YmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xk
VmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6
Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTVHlwZWRBcnJheVZpZXcqIG9iamVjdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdh
bWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0
aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFu
ZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQn
cyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0Cisg
ICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4
Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVu
IHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAg
Ly8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChp
bmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0
eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBh
bG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEg
dG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1
c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIElu
IHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUg
R0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0
byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0
IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJp
YXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmpl
Y3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGlu
IHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09i
amVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICFtX2J1dHRlcmZseSAm
JiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxy
ZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgbV9idXR0
ZXJmbHkgPSBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KG1fdmVjdG9yKS0+YnV0dGVyZmx5
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICBtX2J1dHRlcmZseSwgaGVhcC0+dm0oKSwg
dGhpc09iamVjdCwgc3RydWN0dXJlKCksCisgICAgICAgICAgICBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7Cisg
ICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZSh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAg
ICAgICAvLyBGSVhNRTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxpa2UgInN1YnRyYWN0aW5n
IiBmcm9tIGV4dHJhIG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5jZSByaWdodCBub3cgdGhp
cyBjYXNlIHdpbGwgY2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2UgcmVhbGxvY2F0ZWQKKyAg
ICAgICAgLy8gdGhlIHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZUFkb3B0ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5n
dGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRB
cnJheToKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgYnV0dGVyZmx5KCktPnNldEFycmF5QnVmZmVyKGJ1ZmZlci5nZXQo
KSk7CisgICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChK
U1R5cGVkQXJyYXlWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwor
ICAgIHJldHVybiBBZGFwdG9yOjpWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0
LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5sZW5ndGgo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNPYmplY3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0Ns
YXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQg
YXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJF
eHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBz
b3VyY2VBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7
CisgICAgaWYgKCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmpl
Y3QuIikpOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9V
SW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJy
YXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChl
eGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFz
cyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFy
cmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhw
ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2lu
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRo
aXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxh
dGVyIGFzc2VydCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0
aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5l
Z2F0aXZlIGluZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAg
ICAgICBiZWdpbiA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAg
ICAgZW5kID0gdGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNl
cyB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7Cisg
ICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCB0aGlzTGVu
Z3RoKTsKKyAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHRoaXNMZW5ndGgpOworICAgIAorICAgIC8v
IENsYW1wIGVuZCB0byBiZWdpbi4KKyAgICBlbmQgPSBzdGQ6Om1heChiZWdpbiwgZW5kKTsKKyAg
ICAKKyAgICBBU1NFUlQoZW5kID49IGJlZ2luKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBiZWdp
bjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBlbmQgLSBiZWdpbjsKKyAgICAKKyAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQobGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5
cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAg
IAorICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5
dGVPZmZzZXQoKSArIG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxl
bmd0aCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIAor
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y1NldDxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFy
cmF5PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBwcm90
b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8
Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2ICsy
MTQsMzAgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHBy
b3RvQWNjZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
YywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2Jq
ZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudW5kZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsK
ICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAor
ICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0FycmF5QnVmZmVyUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZt
KCksIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVJbnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5
UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
SlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLT52bSgpLCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTVWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU1VpbnQxNkFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIp
XS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6
OmNyZWF0ZShleGVjLT52bSgpLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgp
LCB0aGlzLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRmxv
YXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVG
bG9hdDY0KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVBy
b3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCks
IEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNJbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU0ludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNJbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTVWludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJv
dG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNild
LnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMy
KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50
MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVGbG9hdDY0KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRB
cnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlRGF0YVZpZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
RGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVT
Y29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0
cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNDIsMjYgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpT
T05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwog
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5NYXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSksIERvbnRFbnVtKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5
QnVmZmVyQ29uc3RydWN0b3IgPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZShleGVj
LT52bSgpLCBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3Rv
dHlwZS5nZXQoKSk7CisgICAgRml4ZWRBcnJheTxKU09iamVjdCosIE5VTUJFUl9PRl9UWVBFRF9B
UlJBWV9UWVBFUz4gdHlwZWRBcnJheUNvbnN0cnVjdG9yczsKKyAgICB0eXBlZEFycmF5Q29uc3Ry
dWN0b3JzW3RvSW5kZXgoVHlwZUludDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZShleGVjLT52bSgpLCBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSwgIkludDhBcnJheSIpOworICAgIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MTYpXSA9IEpTSW50MTZBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5nZXQoKSwgIklu
dDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDMy
KV0gPSBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTSW50MzJB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5w
cm90b3R5cGUuZ2V0KCksICJJbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9y
c1t0b0luZGV4KFR5cGVVaW50OCldID0gSlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShl
eGVjLT52bSgpLCBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhBcnJheSIpOworICAgIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0gPSBKU1VpbnQ4
Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU1VpbnQ4Q2xhbXBl
ZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENs
YW1wZWQpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50OENsYW1wZWRBcnJheSIpOworICAgIHR5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQxNkFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJV
aW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWlu
dDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBKU1Vp
bnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50
MzIpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQzMildID0gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQz
MkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0
KV0gPSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNGbG9h
dDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0
NjQpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDY0QXJyYXkiKTsKKyAgICAKKyAgICBtX2FycmF5
QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJbmRleCA9IE5V
TUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7CisgICAgICAg
IG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7Cisg
ICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIHR5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XS0+bmFtZShleGVjKSwgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFs
UHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4sIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAj
aW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgi
CiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0xNjYsNiArMTY4LDE2IEBAIHByb3Rl
Y3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAg
CisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQ
cm90b3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVj
dHVyZTsKKyAgICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJheURhdGEgeworICAgICAgICBXcml0ZUJh
cnJpZXI8SlNPYmplY3Q+IHByb3RvdHlwZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlOworICAgIH07CisgICAgCisgICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0
YSwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAK
ICAgICB2b2lkKiBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVj
aWFsIHBvaW50ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDIs
MTUgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhw
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAor
ICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5nZXQoKTsgfQorICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIGFycmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgp
OyB9CisgICAgCisgICAgU3RydWN0dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlU
eXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0lu
ZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9p
bnRlckZvcihTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgIkpTSW50OEFycmF5X2giCisjZGVmaW5lICJKU0ludDhBcnJheV9oIgor
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQxNkFycmF5X2giCisjZGVm
aW5lICJKU0ludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2Vu
ZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJKU0ludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTSW50MzJBcnJheV9oIgorCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
aCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmlu
ZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMj
I3R5cGUjI0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7IkZ1bmN0aW9uIiwgJkpTIyN0eXBlOjpCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0NvbnN0cnVjdG9y
KX0KKworTUFLRV9TX0lORk8oSW50OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOwor
TUFLRV9TX0lORk8oSW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0Vf
U19JTkZPKFVpbnQ4Q2xhbXBlZEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01B
S0VfU19JTkZPKFVpbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtF
X1NfSU5GTyhGbG9hdDY0QXJyYXkpOworTUFLRV9TX0lORk8oRGF0YVZpZXcpOworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKyNk
ZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlD
b25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxK
U0ludDMyQXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5Q29uc3Ry
dWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50
OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJyYXk+IEpTVWludDE2
QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQz
MkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmlldz4gSlNEYXRhVmll
d0NvbnN0cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
VHlwZWRBcnJheVByb3RvdHlwZXMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNQcm90b3R5cGU6OnNfaW5mbyA9IHsjdHlwZSAiUHJv
dG90eXBlIiwgJkpTIyN0eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlMjI3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7CitNQUtF
X1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lO
Rk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitNQUtFX1Nf
SU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5G
TyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheVByb3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorI2RlZmluZSBKU1R5
cGVkQXJyYXlQcm90b3R5cGVzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDhBcnJh
eT4gSlNJbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJh
eVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNV
aW50OEFycmF5PiBKU1VpbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJy
YXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpT
VWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlQcm90b3R5
cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQzMkFy
cmF5PiBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOwor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheVByb3RvdHlwZXNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbyA9IHsjdHlwZSAiQXJyYXkiLCAmSlMj
I3R5cGUjI0FycmF5OjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMj
I3R5cGUjI0FycmF5KX0KKworTUFLRV9TX0lORk8oSW50OCk7CitNQUtFX1NfSU5GTyhJbnQxNik7
CitNQUtFX1NfSU5GTyhJbnQzMik7CitNQUtFX1NfSU5GTyhVaW50OCk7CitNQUtFX1NfSU5GTyhV
aW50OENsYW1wZWQpOworTUFLRV9TX0lORk8oVWludDE2KTsKK01BS0VfU19JTkZPKFVpbnQzMik7
CitNQUtFX1NfSU5GTyhGbG9hdDMyKTsKK01BS0VfU19JTkZPKEZsb2F0NjQpOworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBl
ZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0
b3I+IEpTSW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFk
YXB0b3I+IEpTSW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MzJBZGFwdG9yPiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQ4QWRhcHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9h
dDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9y
PiBKU0Zsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5
cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhB
cnJheV9oIgorI2RlZmluZSAiSlNVaW50OEFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50OENsYW1wZWRBcnJheV9o
IgorI2RlZmluZSAiSlNVaW50OENsYW1wZWRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQxNkFycmF5X2giCisjZGVmaW5lICJKU1Vp
bnQxNkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U1VpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpT
VWludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciog
YnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7
CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGV4ZWMsIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhayhyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVs
dCBjb250cm9sbGVyIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2Vlbgor
Ly8gYXJyYXkgYnVmZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRo
aXMgaXNuJ3Qgd2hhdAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3
aGVuIHJ1bm5pbmcgc3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisv
LyAtIElmIHRoZSBKU0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0
YXlzIGFsaXZlLgorLy8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0Fy
cmF5QnVmZmVyIGFmdGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0
IGRpZG4ndCBkaWUsIHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsK
K3B1YmxpYzoKKyAgICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwg
flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5
QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAg
ICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAg
ICAgIHx8IGlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwog
ICAgIH0KICAgICAKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpOwotICAgIH0KKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCog
Y2VsbCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDE3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmdldENvbmMKICAgICAgICAgdm0sIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNw
ZWNpZmljVmFsdWVJZ25vcmVkKTsKIH0KIAoraW5saW5lIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIo
Y29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGll
cyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICgh
aXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGlu
ZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlB
ZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUFkYXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBl
ZEFycmF5QWRhcHRvcnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5
cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBl
QXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5
cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVm
IFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdU
eXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFs
dWVBcmc7CisKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFs
dWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRv
TmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0
b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+
KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJl
cihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcs
IHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJn
Pgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBU
eXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1Zp
ZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShk
b3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3Qg
SW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsK
K3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVj
dCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFk
YXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVm
IEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0lu
dDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4g
SlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0
b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhD
bGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0
QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8
aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IElu
dDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJh
eSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJh
eSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFy
cmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4g
eyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVp
bnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3Ry
dWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBV
aW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0
MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBK
U0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6
IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFy
cmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVUludDhDbGFtcGVkQWRhcHRvciB7Cisg
ICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBW
aWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBl
ZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVy
biAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVy
biBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAg
ICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91
YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
dWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwg
MCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAg
ICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4o
dmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlw
ZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5
cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1
ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0ds
b2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24g
MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2Ny
aXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0
b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFy
cmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAg
VHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWlu
dDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwK
LSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3Ry
dWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0g
ICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAg
ICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURl
c2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0
LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykK
LSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xl
bmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0lu
Zm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90
IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAg
U2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVk
QXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5n
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlw
dG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5o
IgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShU
eXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90
VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAg
ICAgcmV0dXJuICZKU0ludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
ICAgICByZXR1cm4gJkpTVWludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87CisgICAg
Y2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2luZm87Cisg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6OnNfaW5m
bzsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJyYXk6OnNf
aW5mbzsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50MzJBcnJh
eTo6c19pbmZvOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAmSlNGbG9h
dDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
JkpTRmxvYXQ2NEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAg
IHJldHVybiAmSlNEYXRhVmlldzo6c19pbmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJO
b3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAg
ICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgi
VHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVHlwZWRBcnJheVR5cGUg
eworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAg
IFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAg
VHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZs
b2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9B
UlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRB
cnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUp
IC0gMTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2Fz
ZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5v
dFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2Fz
ZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURh
dGFWaWV3OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNl
IFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAg
IGNhc2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4g
NDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworQ2xhc3NJ
bmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpOworCitpbmxpbmUgYm9v
bCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICBj
YXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGlu
ZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlw
ZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQ2xhbXBlZChUeXBlZEFycmF5
VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5cGVVaW50OENsYW1wZWQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlwZSk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBUeXBlZEFycmF5c19oCisjZGVmaW5lIFR5cGVkQXJyYXlzX2gKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0
b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAg
LTI0LDc5ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50OEFy
cmF5X2gKLSNkZWZpbmUgVWludDhBcnJheV9oCisjaWZuZGVmICJVaW50OEFycmF5X2giCisjZGVm
aW5lICJVaW50OEFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDhB
cnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0
ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxk
IG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBm
aWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEph
dmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxVaW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0K
LSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVn
cmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVHlwZVVpbnQ4OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIGlubGluZSBVaW50OEFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgot
ICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQ
dHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZShjb25z
dCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJh
eT4gVWludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVp
bnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQ4QXJyYXk6OlVpbnQ4QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi06IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6c3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVu
Z3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVp
bnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcg
SlNDOjpVaW50OEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBV
aW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhD
bGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMiwxMTIgKzEwLDIzIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50OENsYW1wZWRBcnJheV9oCi0jZGVm
aW5lIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKyNpZm5kZWYgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCisj
ZGVmaW5lICJVaW50OENsYW1wZWRBcnJheV9oIgogCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgot
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBV
aW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBVaW50OEFycmF5IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJy
YXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRp
cmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gSXQncyBvbmx5IG5lZWRlZCB0byBwb3RlbnRpYWxs
eSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBhcnJheQotICAgIC8vIHdhcyBjcmVhdGVkIHVuaW5p
dGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gcGF0aHMKLSAgICAvLyB6ZXJv
IHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgIGlubGluZSB2b2lkIHplcm9GaWxsKCk7Ci0KLSAg
ICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotICAgIGlubGluZSB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsKLQotICAgIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUo
Y29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4oYXJyYXksIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFy
cmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJy
YXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OENsYW1wZWRB
cnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6emVyb0ZpbGwoKQot
ewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJy
YXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotewotICAgIGlmIChpbmRleCA+
PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8
fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICBlbHNlIGlmICh2YWx1ZSA+IDI1
NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0gICAgZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19Ci0KLVVpbnQ4Q2xhbXBlZEFycmF5OjpVaW50OENs
YW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogVWludDhBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFt
cGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
VWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4Q2xhbXBlZEFycmF5PihzdGFydCwgZW5kKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6VWludDhDbGFtcGVkQXJyYXk7
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5o
CShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50
MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgVWludDE2QXJyYXlfaAotI2RlZmluZSBVaW50MTZBcnJheV9oCisjaWZuZGVm
ICJVaW50MTZBcnJheV9oIgorI2RlZmluZSAiVWludDE2QXJyYXlfaCIKIAotI2luY2x1ZGUgIklu
dGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5
QnVmZmVyOwotCi1jbGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBj
cmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25v
d24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJu
IHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmly
c3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1
aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90
Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNv
bnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZf
dD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQx
NkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQxNkFy
cmF5PihsZW5ndGgpOwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJ
bXBsPFVpbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LXVzaW5nIEpTQzo6VWludDE2QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2Vu
ZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
ICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDMyQXJyYXlfaAotI2RlZmluZSBVaW50
MzJBcnJheV9oCisjaWZuZGVmICJVaW50MzJBcnJheV9oIgorI2RlZmluZSAiVWludDMyQXJyYXlf
aCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50
MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1
c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8K
LSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3
aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQz
MkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2lu
ZyBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMy
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8
VWludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5
cGVVaW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBm
cmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxV
aW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNv
bnN0IHVpbnQzMl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7
Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVp
bnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmlu
aXRpYWxpemVkPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJB
cnJheT4gVWludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJh
eT4gVWludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6VWludDMyQXJyYXk7CisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBA
CiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmlj
dEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtMjU4LDYg
KzI1OSwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAg
aWYgKGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6Okxv
bmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxh
c3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRz
ZWxmCisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9
IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5W
TSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJv
bmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5
RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0J1
bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC0zOTAsNiArMzkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBP
d25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAg
IFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAg
ICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxs
b2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkBAIC00MjgsNTUgKzQyOSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsg
cmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0
cmluZ3NUb0hhc2hDb25zOyB9CiAgICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0
SGFzaENvbnMoKSB7IG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQogCi0jZGVm
aW5lIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAot
ICAgICAgICB2b2lkIHJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6
ZWRUeXBlIyNBcnJheSosIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBc
Ci0gICAgICAgIHsgXAotICAgICAgICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlw
dG9yLm1fY2xhc3NJbmZvIHx8IG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8g
PT0gZGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJh
eURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUj
I0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7
IEFTU0VSVChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1f
IyN0eXBlIyNBcnJheURlc2NyaXB0b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlG
dW5jdGlvbihpbnQ4LCBJbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24o
aW50MTYsIEludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIs
IEludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4
KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50
OENsYW1wZWQpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVp
bnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMy
KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7
Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwot
I3VuZGVmIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5
cGUgdHlwZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUlu
dDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAm
aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4
OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlw
dG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZ1aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAg
ICAgICAgIHJldHVybiAmZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBjdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBt
X2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgZXhjbHVzaXZlVGhyZWFk
ID09IGN1cnJlbnRUaHJlYWQoKTsKQEAgLTUxMCwxNiArNDYyLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAgICAgICBPd25QdHI8Q29k
ZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+
IG1fZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4
QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJy
YXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDMyQXJyYXlE
ZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNj
cmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MTZBcnJheURl
c2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDMyQXJyYXlEZXNj
cmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJheURlc2Ny
aXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcjsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDggQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYw
RDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9j
ay5oICovOyB9OworCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9Owor
CQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0Yg
LyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQ
b2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5
MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUg
LyogQ29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhy
ZWFkLmNwcCAqLzsgfTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVm
ZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MzAsNiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyog
RGVjaW1hbE51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERl
Y2ltYWxOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rl
ci5oICovLAorCQkJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAog
CQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJ
QThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0
OCw2ICs2NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRT
dHJlYW0uY3BwICovLAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRT
dHJlYW0uaCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5o
ICovLAorCQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJ
CQlBOEE0NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3
MTUxQTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5
ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3
IEBACiAJCQkJQThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJh
eVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVC
MDA0MTIzRkYgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVC
MDA0MTIzRkYgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1
MUE4MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEw
NTcsNiArMTA2NCw3IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFy
eUNoYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8q
IFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFi
bGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxl
UmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFu
dCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZl
cnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4g
dGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYi
LCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBo
YXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8v
IHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xh
c3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
ZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVt
ZW50ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBt
X3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNP
bmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZDb3Vu
dCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFi
bGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1f
cmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7
CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVk
RmxhZzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX3Jl
ZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJh
YmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZv
aWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJ
c0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJl
ZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBC
eXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmlu
ZSBGbGlwQnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxp
dHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5k
aWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxp
bmUgdWludDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZh
bHVlICYgMHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOwor
fQorCitpbmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJl
dHVybiAoKHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
MDAwMGZmMDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisg
ICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2
NF90IGZsaXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4
MDAwMDAwMDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAw
MDAwMDAwZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZm
MDAwMGxsdSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxs
dSkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4
KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8
ICgodmFsdWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVv
Zih2YWx1ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFs
dWUpID09IDIpCisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VD4oZmxpcEJ5dGVzKGJpdHdp
c2VfY2FzdDx1aW50MTZfdD4odmFsdWUpKSk7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUPihmbGlwQnl0ZXMoYml0d2lzZV9jYXN0PHVp
bnQzMl90Pih2YWx1ZSkpKTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KQorICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFQ+KGZsaXBCeXRlcyhiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZh
bHVlKSkpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVz
SWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKKworI2VuZGlmIC8vIEZsaXBC
eXRlc19oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24gVmFsdWUgewot
ICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBpZiAoIWJ1ZmZl
ci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNr
ZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRN
YXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpKTsKLX0KLQotRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLSAg
ICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgLCBtX2J5dGVMZW5n
dGgoYnl0ZUxlbmd0aCkKLXsKLX0KLQotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wg
bGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBsaXR0bGVF
bmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0KLWlu
bGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIgdGVtcCA9
ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBmbGlw
Qnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEpOwotfQot
Ci1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0
ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCAr
IDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhwICsgMiwg
cCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMgdm9pZCBm
bGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5k
aWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBmbGlw
Qnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAg
ICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
ODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6OmdldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAv
LyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxk
IGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVu
YWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUuYnl0
ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQs
IHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihU
KSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
IChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8g
c3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Ig
b24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KLSAg
ICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAgICBm
bGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFu
KTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9m
ZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0YVZpZXc6
OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
cmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi11aW50
OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdl
dERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQx
Nl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotaW50MzJfdCBEYXRhVmlldzo6
Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLWZsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWRvdWJsZSBE
YXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQot
dm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBk
b3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFycmF5QnVmZmVyVmlldzo6bmV1
dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEYXRhVmlld19oCi0jZGVmaW5lIERhdGFWaWV3X2gKLQotI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci1jbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50
LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQx
Nl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZfdCBn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBnZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAg
IGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWlu
dDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQg
c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotcHJpdmF0ZToKLSAgICBEYXRhVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIGJleW9uZFJhbmdl
KHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQgPj0gbV9ieXRl
TGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7IH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdW5zaWduZWQg
bV9ieXRlTGVuZ3RoOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBEYXRhVmlld19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208482</attachid>
            <date>2013-08-10 14:45:34 -0700</date>
            <delta_ts>2013-08-10 16:59:57 -0700</delta_ts>
            <desc>starting to build</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>424481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVj
dG9yLmx1dC5oIFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlw
ZS5sdXQuaCBcCisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVj
dC5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdG
IC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3
QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
QjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUx
N0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmll
dy5jcHAgKi87IH07CisJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2
QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZC
NUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAq
LzsgfTsKKwkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5jcHAgKi87IH07CisJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2
RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsK
KwkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovOyB9Owor
CQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZD
MzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0ludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAq
LzsgfTsKKwkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheXMuY3BwICovOyB9OworCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQx
N0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIw
MEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2
NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVB
QjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlB
ZGFwdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJC
NjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5jcHAgKi87IH07CisJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEw
IC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3Bw
ICovOyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFD
NUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZH
SW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OSw3ICszOTks
NiBAQAogCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBC
RjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklU
Q29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEw
QTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGRUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIz
N0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi87IH07CiAJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUZDOUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmNwcCAqLzsgfTsKIAkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgy
NCw4ICs4NzMsNiBAQAogCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3
QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QThBRjJDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVG
MzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlC
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4
QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURC
NUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
OENsYW1wZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEyMDcsNiArMTI1NCw1NiBAQAogCQkwRjIzNUJFQTE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09T
UkV4aXRQcmVwYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRB
NTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxs
QXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRo
ID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZB
QTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RmxvYXQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50
MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTSW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZD
QzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJh
eVByb3RvdHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJh
eXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1R5cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdC
NkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9y
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQ
aGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0g
ZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRD
MUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRp
b25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU0OCw2IEBA
CiAJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdD
b21tb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7
IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgx
QTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7
IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjMsNiBAQAogCQlB
N0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYz
MDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdB
OEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTU2LDYgKzI2NTAsMTAgQEAKIAkJCQkwRjJD
NTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8sCiAJCQkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJCQlCQ0JFMkNBRDE0
RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi8sCisJCQkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8sCisJCQkJMEYyQjY2QTkxN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oICovLAorCQkJCTBG
MkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovLAor
CQkJCTBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElu
bGluZXMuaCAqLywKIAkJCQlDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3Bw
ICovLAogCQkJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovLAogCQkJ
CUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLApA
QCAtMjgyOCw2ICsyOTI2LDUyIEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50
aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjJC
NjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkIxMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oICovLAorCQkJCTBGMkI2NkIyMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLywKKwkJCQkwRjJCNjZCMzE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovLAorCQkJCTBGMkI2
NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZC
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBG
MkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywK
KwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaCAqLywKKwkJCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNE
YXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXcuaCAqLywKKwkJCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQ
cm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMy
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLywKKwkJCQkwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCAqLywKKwkJCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovLAorCQkJCTBGMkI2NkM1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovLAor
CQkJCTBGMkI2NkM2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZDODE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggKi8sCisJCQkJMEYy
QjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0Ex
N0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkNCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQkwRjJCNjZDRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi8sCisJCQkJMEYy
QjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovLAor
CQkJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgg
Ki8sCisJCQkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICov
LAorCQkJCTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8sCisJ
CQkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovLAorCQkJCTBG
MkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLywKKwkJCQkwRjJC
NjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkQ2
MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi8sCisJCQkJMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9y
cy5oICovLAorCQkJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8sCisJCQkJMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmggKi8sCisJCQkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggKi8sCisJCQkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmNwcCAqLywKKwkJCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
aCAqLywKIAkJCQlCQ0Y2MDUxMTBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJ
CQkJQkNGNjA1MTIwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RF
NTBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmNwcCAqLywKQEAgLTI5MjAsNyArMzA2NCw2
IEBACiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJ
CQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE3QThB
RjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKLQkJCQlBN0E4QUYyRTE3QURC
NUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovLAogCQkJCUE3ODg1M0Y3
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKIAkJCQlB
Nzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovLAog
CQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywK
QEAgLTMwNzgsOCArMzIyMSw2IEBACiAJCQkJMTRBMzk2QTYwQ0QyOTMzMTAwQjVCNEZGIC8qIFN5
bWJvbFRhYmxlLmggKi8sCiAJCQkJNUQ1MzcyNkQwRTFDNTQ2QjAwMjFFNTQ5IC8qIFRyYWNpbmcu
ZCAqLywKIAkJCQk1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovLAotCQkJ
CUE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovLAotCQkJCTBG
RUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovLAogCQkJ
CUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2Njcz
OUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4
QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1MzgsMTIgKzM2
NzksMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJy
YXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYg
LyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFDMTdCNkI1
M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBv
b2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyog
QmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQy
MTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDgx
NkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIg
LyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1LDYgKzM2OTks
NyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyogQ2FsbElkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBD
YWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFE
ODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICszNzExLDcgQEAK
IAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMiw3IEBACiAJCQkJMEZEQjJDRUExNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4
MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2RjVD
RDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZD
MTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNjA0LDYgKzM3NTEsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1
NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlF
QTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUx
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3Np
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVD
M0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2NSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgz
NjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZH
Q2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBp
biBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszNzk5LDcgQEAKIAkJCQlBN0Q4OUNGODE3QTBCOEND
MDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZB
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdH
ZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZBMTFFNDAwOTYz
MDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIw
MDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYgKzM4MDgsNyBA
QAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRGaW5h
bGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAwMTcw
QzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBC
Qzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNG
QzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2NzEsNiArMzgyMiw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3
IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVE
QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQjE1MEU5
NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZB
RDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg0LDYg
KzM4MzYsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJl
cGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAv
KiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0
IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM2OTMs
NiArMzg0Nyw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJp
bmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNG
QTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5
NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklU
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4MSw3IEBACiAJCQkJMEYyMUMyN0MxNEJF
NzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8q
IEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQzkxNzNEQTUy
MDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0
Niw2ICszOTAyLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0
dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjQxNzA5
NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAv
KiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1MSw2IEBACiAJCQkJQTdB
OEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAq
LywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3
QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzgx
Myw2ICszOTY5LDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBK
SVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAw
QkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUx
NzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2
ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zODQwLDYgKzM5OTcsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA2
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVz
dFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxMyw3IEBACiAJCQkJ
QkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmll
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNP
YmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAv
KiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2ICs0MDI1LDcg
QEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0YWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0
cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDQsNyBAQAogCQkJCTg2RTNDNjE1
MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2Jq
ZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2
NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBp
biBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc1LDcgQEAKIAkJCQlBN0U1QUIzODE3OTlFNEIy
MDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMx
MzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEz
QTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1cC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJw
cmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBN
YWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0MDg4LDcgQEAK
IAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJC
OTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBp
biBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5NywxNyBAQAogCQkJCUMyMTEyMkUzMTVERDlB
QjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEy
RTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmplY3Qu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVt
b3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdF
MTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUlu
c3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4RTkyMjIgLyog
TmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5
Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJ
bmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzNyw3IEBACiAJCQkJMEYzNEIxNEMx
NkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAv
KiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NiwxMSBAQAogCQkJCTE0NzRDMzNCMTZBQTJE
OTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0
MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAw
RDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEw
MDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMy
MTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJl
Z0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5Myw3IEBACiAJ
CQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAv
KiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYy
OTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApA
QCAtNDAzNiw3ICs0MjA2LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3Rh
dGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFCNTBE
RTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjAsOCBAQAogCQkJCUMyRkUxOEE0MTZCQUVD
NDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIw
QkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3Ry
dWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZF
MjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDA1
Nyw5ICs0MjMxLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyog
VGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBG
NUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNl
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJz
ICovLApAQCAtNDQ4OSw2ICs0NjY0LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDgg
LyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJD
MDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMw
MkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVn
Z2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQx
NzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00NTE0LDYgKzQ2OTAsNyBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdD
cml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5
MTRFRjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVu
dGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNFMTMzMDE3OTYyNENEMDBFNERFQTgg
LyogREZHRGVzaXJlZFN0cnVjdHVyZUNoYWlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4
NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDU0Myw2ICs0NzIwLDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5
Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgw
MDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0
NkE2RjcxMDBDRjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIz
NUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NjE2LDYgKzQ3OTQsNyBAQAogCQkJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBH
Q1RocmVhZFNoYXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENBN0RD
QTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NTUxMDdFQzBFNzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjZFMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDJFMzEzNTEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MkUzMTM3MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQ2NjgsMTEgKzQ4NDcsMTMgQEAKIAkJCQlDMjVENzA5QjE2
REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
NDg3NEFFMzE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdB
NDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAw
NTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZE
NzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZF
Njk1MEU1QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3
IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcw
MTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY5MCw2ICs0ODcxLDcg
QEAKIAkJCQlBNzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJp
dmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyog
SlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU0MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyogSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAy
ODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDcxMiw2ICs0ODk0LDcg
QEAKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNz
ZW1ibGVyQVJNdjcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYx
MkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkI2NkVEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtl
ZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAv
KiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ3NjIsMTcgKzQ5NDUsMjEgQEAK
IAkJCQkxNDc0QzMzQzE2QUEyRDlCMDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VX
aGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMw
MDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIx
MjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEw
MTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2
RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEODg1MEVEMjFDM0QwMEI4
OTYxOSAvKiBTYW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3
REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA0
MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VDb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3Vy
Y2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAxODRB
MUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MDUsNiAr
NDk5Miw3IEBACiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUz
RTIzMDBCRTc3QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlE
MjUxNTg1M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUlu
ZGV4aW5nVHlwZShJbgogCiBpbmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xh
c3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewotICAgIHJldHVybiBjbGFzc0lu
Zm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZTsKKyAgICByZXR1cm4g
aXNUeXBlZFZpZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogfQogCiBpbmxp
bmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAt
OTgsMjMgKzk4LDIzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgK
IGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKQogewogICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpIHsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgorICAgIGNhc2UgVHlwZUludDg6
CiAgICAgICAgIHJldHVybiBKSVRJbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MTY6
CisgICAgY2FzZSBUeXBlSW50MTY6CiAgICAgICAgIHJldHVybiBKSVRJbnQxNkFycmF5OwotICAg
IGNhc2UgVHlwZWRBcnJheUludDMyOgorICAgIGNhc2UgVHlwZUludDMyOgogICAgICAgICByZXR1
cm4gSklUSW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICBjYXNlIFR5
cGVVaW50ODoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5VWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKICAgICAgICAgcmV0
dXJuIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAg
ICBjYXNlIFR5cGVVaW50MTY6CiAgICAgICAgIHJldHVybiBKSVRVaW50MTZBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgogICAgICAgICByZXR1
cm4gSklUVWludDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKKyAgICBjYXNl
IFR5cGVGbG9hdDMyOgogICAgICAgICByZXR1cm4gSklURmxvYXQzMkFycmF5OwotICAgIGNhc2Ug
VHlwZWRBcnJheUZsb2F0NjQ6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKICAgICAgICAgcmV0dXJu
IEpJVEZsb2F0NjRBcnJheTsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTIy
LDYgKzEyMiwzMyBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNzCiAg
ICAgfQogfQogCitpbmxpbmUgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJh
eU1vZGUoSklUQXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2Fz
ZSBKSVRJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50ODsKKyAgICBjYXNlIEpJVElu
dDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBKSVRJbnQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDMyOworICAgIGNhc2UgSklUVWludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKKyAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5
OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEpJVFVpbnQxNkFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEpJVFVpbnQzMkFycmF5
OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKKyAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOworICAgIGNhc2UgSklURmxvYXQ2NEFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiBpbmxpbmUgSklU
QXJyYXlNb2RlIGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBpZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDI5
ICsyNjYsMjcgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogICAg
IGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZigmSlNGdW5jdGlvbjo6c19pbmZvKSkKICAgICAg
ICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsKICAgICAKLSAgICBpZiAoY2xhc3NJbmZvLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUgIT0gVHlwZWRBcnJheU5vbmUpIHsKLSAgICAgICAgc3dpdGNoIChjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJ
bnQ4OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQ4QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlw
ZWRBcnJheUludDE2OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFycmF5OwotICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50MzJBcnJh
eTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDg6Ci0gICAgICAgICAgICByZXR1cm4gU3Bl
Y1VpbnQ4QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAg
ICAgICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRB
cnJheVVpbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDE2QXJyYXk7Ci0gICAgICAg
IGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDMyQXJy
YXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgICAgICByZXR1cm4g
U3BlY0Zsb2F0MzJBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAg
ICAgICAgIHJldHVybiBTcGVjRmxvYXQ2NEFycmF5OwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIFNwZWNJ
bnQ4QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBTcGVjSW50MTZB
cnJheTsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5
OworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gU3BlY1VpbnQ4QXJyYXk7Cisg
ICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBl
ZEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZB
cnJheTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBTcGVjVWludDMyQXJy
YXk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJy
YXk7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0QXJy
YXk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIGlmIChj
bGFzc0luZm8tPmlzU3ViQ2xhc3NPZigmSlNPYmplY3Q6OnNfaW5mbykpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJp
bmcoQXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJh
eTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CisgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOworICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5OworICAgIH0KK30KKwogdm9p
ZCBBcnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQodHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCksIGNvbnZlcnNpb24oKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFyKiBhcnJheUNsYXNzVG9TdHJp
bmcoQXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJyYXk6
OlNwZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmF5
OjpDb252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJheTo6
VHlwZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAgICAgQXJyYXlNb2RlKCkKQEAg
LTM4MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHlwZSgpID09IEFycmF5
OjpTdHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVkQXJyYXlUeXBlKHR5cGUoKSk7
CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcnJheU1vZGUmIG90aGVy
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2NywzNyAr
MjY2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
QXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50
MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUu
dHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5z
aWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50
MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5
KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVm
YXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBl
ZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MCwzNyArMjU4MCwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMjg3MSw0NiArMjg0NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KIAogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4
MywzMiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQog
ICAgIH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJ
VDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAg
ICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQxNkFy
cmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICBy
ZXR1cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICBy
ZXR1cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1
bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wR1BSLCBB
cnJheU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUpCiB7CiAgICAgc3dpdGNoIChh
cnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRB
cnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2Rl
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAg
ICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSAmQXJndW1lbnRzOjpzX2luZm87CiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDhB
cnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICBjYXNlIEFy
cmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAg
ICBleHBlY3RlZENsYXNzSW5mbyA9IHJlc3VsdC0+bV9jbGFzc0luZm87Ci0gICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gY2xhc3NJbmZvRm9yVHlwZShub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAorICAg
IFJFTEVBU0VfQVNTRVJUKGV4cGVjdGVkQ2xhc3NJbmZvKTsKKyAgICAKICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIo
KSk7CkBAIC0yNTk0LDggKzI1NTcsMTAgQEAgc3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91Ymxl
VG9CeXRlKEpJVAogCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9k
ZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRu
ZXNzKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5
cGUpKTsKKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOwpAQCAtMjYxMiwxNiArMjU3NywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkluCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAo
c2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlw
ZSkpCiAgICAgICAgICAgICBtX2ppdC5sb2FkOFNpZ25lZChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCBy
ZXN1bHRSZWcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNPbmUpLCByZXN1bHRSZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0g
ICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChp
c1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQxNlNpZ25lZChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNUd28pLCByZXN1bHRSZWcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5s
b2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgcmVzdWx0UmVnKTsKQEAgLTI2MzIsMTIgKzI1OTgs
MTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIENSQVNIKCk7CiAgICAgfQotICAgIGlmIChlbGVtZW50U2l6ZSA8IDQgfHwg
c2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKGVsZW1lbnRTaXplKHR5
cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBlKSkgewogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3Vs
dFJlZywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKGVs
ZW1lbnRTaXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CiAgICAg
aWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICBmb3J3YXJkU3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSksIFZh
bHVlUmVjb3Zlcnk6OnVpbnQzMkluR1BSKHJlc3VsdFJlZykpOwogICAgICAgICBpbnRlZ2VyUmVz
dWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0yNjUyLDggKzI2MTgsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0LmZw
cigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BS
UmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXpl
LCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91
bmRpbmcpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlU
eXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKQEAgLTI2NzAs
OCArMjYzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgZCA9IGpzVmFsdWUu
YXNOdW1iZXIoKTsKLSAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgeworICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwog
ICAgICAgICAgICAgZCA9IGNsYW1wRG91YmxlVG9CeXRlKGQpOwogICAgICAgICB9CiAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMjY4Niw4ICsyNjU0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hS
ZWcpOwotICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICBpZiAoaXND
bGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUp
ID09IDEpOwogICAgICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQs
IHNjcmF0Y2hSZWcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2Ny
YXRjaCk7CkBAIC0yNjk2LDggKzI2NjQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JJCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJl
clVzZTogewotICAgICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICBpZiAo
aXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5
cGUpID09IDEpOwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVP
cCh0aGlzLCB2YWx1ZVVzZSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwpA
QCAtMjcxNyw3ICsyNjg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9ySQogICAgICAgICAgICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAg
ICAgICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAg
ICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBt
X2ppdC5icmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVy
OjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIo
ZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKQEAgLTI3
NDIsOSArMjcxMCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkK
ICAgICBBU1NFUlQodmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZCb3VuZHM7CiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCi0gICAg
ICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3Iu
bV9sZW5ndGhPZmZzZXQpKTsKKyAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKIAotICAg
IHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CiAgICAgY2FzZSAxOgogICAgICAgICBtX2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSkpOwogICAgICAgICBicmVhazsKQEAgLTI3NjIsOCArMjczMCwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXpl
X3QgZWxlbWVudFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwpAQCAtMjc3OSw4ICsyNzQ5LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICBtX2ppdC5icmFu
Y2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3Ro
T2Zmc2V0KSkpOwotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVu
Z3RoKCkpKSk7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoK
ICAgICAgICAgbV9qaXQubG9hZEZsb2F0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCByZXN1bHRSZWcp
OwogICAgICAgICBtX2ppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShyZXN1bHRSZWcsIHJlc3VsdFJl
Zyk7CkBAIC0yODAxLDggKzI3NzIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25GbAogICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJv
cGVydHksIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKQEAgLTI4MTcsMTAgKzI3OTAsMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIEFTU0VSVF9VTlVTRUQoYmFz
ZVVzZSwgbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgbV9zdGF0ZS5mb3JOb2RlKGJhc2VVc2UpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZCb3VuZHM7Ci0gICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCi0gICAg
ICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3Iu
bV9sZW5ndGhPZmZzZXQpKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkgeworICAg
ICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwor
ICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDogewogICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvRmxv
YXQodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwpAQCAtNDAyNiw4ICs0MDAyLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdl
KHRoaXMpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKLSAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNj
cmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAKICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0
T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CkBAIC00MDQxLDggKzQwMTUsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXco
bm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLAorICAgICAgICAgICAgc3RvcmFnZVJlZyk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxNDMsOCArNDExOSw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKE5vZGUqIG5vZGUpCiB7Ci0gICAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5h
cnJheU1vZGUoKSk7Ci0KICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTQxODQs
MTYgKzQxNTgsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwog
ICAgICAgICBjb21waWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgZGVmYXVsdDoKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIEFTU0VSVChpc1R5
cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgIEFTU0VSVChkZXNjcmlwdG9yKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0KSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsK
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsK
LSAgICB9CisgICAgfSB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5j
dGlvbk5vQ2hlY2soTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2
NCwxMCArMTk2NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQXJpdGhEaXYoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUFyaXRoTW9kKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUqLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYsIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOwotICAgIHZvaWQgY29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7
CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJy
YXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7
CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2Us
IEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKICAgICB2b2lkIGNvbXBp
bGVOZXdGdW5jdGlvbk5vQ2hlY2soTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9u
RXhwcmVzc2lvbihOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CkBA
IC0yMTA5LDggKzIxMDksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdl
KTsKICAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CiAgICAgCi0gICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9kZSk7Ci0gICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJS
ZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlKTsKICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJS
ZWcgdGVtcFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSk7CiAgICAgdm9pZCBjaGVja0Fy
cmF5KE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShy
ZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVu
dW0gQ29weVRva2VuIHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4KKyAgICBCdXR0ZXJmbHlDb3B5
VG9rZW4sCisgICAgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbgogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDI0IEBAIHByaXZhdGU6CiAgICAgSGVhcCYgbV9oZWFwOwogfTsK
IAorY2xhc3MgRGVmZXJHQ0ZvckFXaGlsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVm
ZXJHQ0ZvckFXaGlsZSk7CitwdWJsaWM6CisgICAgRGVmZXJHQ0ZvckFXaGlsZShIZWFwJiBoZWFw
KQorICAgICAgICA6IG1faGVhcChoZWFwKQorICAgIHsKKyAgICAgICAgbV9oZWFwLmluY3JlbWVu
dERlZmVycmFsRGVwdGgoKTsKKyAgICB9CisgICAgCisgICAgfkRlZmVyR0NGb3JBV2hpbGUoKQor
ICAgIHsKKyAgICAgICAgbV9oZWFwLmRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSGVhcCYgbV9oZWFwOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBEZWZlckdDX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdS
ZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsK
KworLy8gQSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwg
cmVmZXJlbmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJvbSB0aGUg
aGVhcCwgd2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qga25vd3Mg
aXRzIGluY29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZlIHRoZSBp
bnZhcmlhbnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8gdGhlIEdD
CisvLyBoZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNv
dW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgorICAgIEdD
SW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNl
bGxzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVmZXJlbmNl
cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsKKyAgICB9
CisgICAgCisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgaWYg
KGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAg
ICAgIHJldHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVjdG9y
T2ZDZWxscygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2VuZXJhbGx5
IG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRoaXMKKyAg
ICAvLyByZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmplY3QgdG8g
dGhlIEdDJ3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjphZGRS
ZWZlcmVuY2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxs
Kik7CisgICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHdlIHdp
c2ggdG8ga2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxzZSBpZiB3
ZSBkb24ndC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlmIGl0IGRv
ZXMgc28sIHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2FudAorICAg
IC8vIHRvIHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGZh
bHNlIHVubGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlzdC4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBmaWx0ZXJJ
bmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0KKyAgICAK
KyAgICBib29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5jb2RlZFBv
aW50ZXIgJiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWluZygpIGNv
bnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2luZ2xldG9u
KCkgY29uc3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZDZWxscygp
OyB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0Nl
bGwqPihtX2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQorICAgIAor
ICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxWZWN0b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAgCisgICAg
Ly8gU2luZ2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAvLyBTaW5n
bGV0b24gZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBjZWxs
cy4KKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVk
ZSAiSGVhcC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jv
b2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgbV9lbmNvZGVk
UG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpIHwgc2luZ2xldG9uRmxhZygp
OworICAgICAgICBzZXRJc0RlZmVycmVkKHRydWUpOworICAgICAgICBBU1NFUlQoaGFzU2luZ2xl
dG9uKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKEhl
YXA6OmhlYXAoaW5jb21pbmdSZWZlcmVuY2VBdCgwKSkgPT0gSGVhcDo6aGVhcChjZWxsKSk7Cisg
ICAgCisgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgIFZlY3RvcjxKU0NlbGwqPiog
dmVjdG9yID0gbmV3IFZlY3RvcjxKU0NlbGwqPigpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChz
aW5nbGV0b24oKSk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKGNlbGwpOworICAgICAgICBtX2Vu
Y29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmVjdG9yKTsKKyAgICAgICAg
QVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdmVjdG9yT2ZDZWxscygpLT5hcHBlbmQoY2VsbCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVy
RnVuY3Rpb25UeXBlPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6ZmlsdGVySW5jb21p
bmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYgZmlsdGVyRnVuY3Rpb24pCit7CisgICAg
aWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZWZlcnJlZCgpKTsK
KyAgICAgICAgQVNTRVJUKHJlZkNvdW50KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgICAgICAKKyAgICBBU1NFUlQoaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgCisgICAgaWYg
KGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbihzaW5nbGV0b24o
KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgbV9l
bmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7Cisg
ICAgICAgIHJldHVybiBzZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9CisgICAgICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24odmVjdG9yT2ZDZWxscygpLT5hdChpKSkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5hdChpLS0pID0gdmVj
dG9yT2ZDZWxscygpLT5sYXN0KCk7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+cmVtb3ZlTGFz
dCgpOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpID49
IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgaWYgKHZlY3Rvck9mQ2Vs
bHMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5n
KCkpOworICAgICAgICByZXR1cm4gc2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAg
ICAKKyAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmVjdG9y
T2ZDZWxscygpLT5hdCgwKSkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJUKGhhc1Npbmds
ZXRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKKyNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVCA9IHNv
bWUgc3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwgbXVzdCBzdXBwb3J0IGEgZ2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFz
cyBHQ0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICAKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3IHRvIHRoaXMgc2V0Lgor
ICAgIGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2b2lkIHN3ZWVw
KCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9Owor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVBbGwoSlNDZWxsKik7CisgICAg
c3RhdGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAgICAKKyAgICBWZWN0b3I8VCo+IG1f
dmVjdG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVj
dG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5j
b21pbmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3ZlY3Rv
ci5hcHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJ
bkJ5dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3Qg
PSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGlt
YXRlSW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVjdC0+ZmlsdGVySW5jb21pbmdSZWZlcmVu
Y2VzKHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYnl0ZXMg
LT0gc2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9yLmxhc3QoKTsKKyAgICAg
ICAgbV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZUFsbChKU0NlbGwqKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxsKiBjZWxsKQoreworICAg
IHJldHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNiArMzU4LDE0
IEBAIHZvaWQgSGVhcDo6amV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlAKICAgICBtX2RmZ0Nv
ZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsKIH0KIAordm9pZCBIZWFwOjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmIChtX2FycmF5
QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwgYnVmZmVyKSkgeworICAgICAgICBjb2xsZWN0SWZO
ZWNlc3NhcnlPckRlZmVyKCk7CisgICAgICAgIGRpZEFsbG9jYXRlKGJ1ZmZlci0+Z2NTaXplRXN0
aW1hdGVJbkJ5dGVzKCkpOworICAgIH0KK30KKwogdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2Jq
ZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwpAQCAtNjIxLDE0
ICs2MjksMTkgQEAgc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkKICAgICByZXR1cm4gbV9vYmpl
Y3RTcGFjZS5vYmplY3RDb3VudCgpOwogfQogCitzaXplX3QgSGVhcDo6ZXh0cmFTaXplKCkKK3sK
KyAgICByZXR1cm4gbV9leHRyYU1lbW9yeVVzYWdlICsgbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpOwor
fQorCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6
ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgbV9leHRyYU1lbW9yeVVzYWdlOworICAgIHJl
dHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJh
U2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6Y2FwYWNpdHkoKQogewotICAgIHJldHVybiBtX29i
amVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIHJl
dHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgp
ICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RD
b3VudCgpCkBAIC03NDUsNiArNzU4LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2ds
ZSBzd2VlcFRvZ2cKICAgICB9CiAKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKyAg
ICAKKyAgICB7CisgICAgICAgIEdDUEhBU0UoU3dlZXBpbmdBcnJheUJ1ZmZlcnMpOworICAgICAg
ICBtX2FycmF5QnVmZmVycy5zd2VlcCgpOworICAgIH0KIAogICAgIHsKICAgICAgICAgbV9ibG9j
a1NuYXBzaG90LnJlc2l6ZShtX29iamVjdFNwYWNlLmJsb2NrcygpLnNldCgpLnNpemUoKSk7CkBA
IC05MjQsMTIgKzk0MiwxNiBAQCB2b2lkIEhlYXA6OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQog
ICAgIG1fZGVmZXJyYWxEZXB0aCsrOwogfQogCi12b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFs
RGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kZWZlcnJhbERlcHRoID49IDEpOwogICAgIAogICAg
IG1fZGVmZXJyYWxEZXB0aC0tOwotICAgIAorfQorCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAgICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7
CiAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDExIEBACiAjaWZuZGVm
IEhlYXBfaAogI2RlZmluZSBIZWFwX2gKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5j
bHVkZSAiQmxvY2tBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1
ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
IgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5o
IgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCkBAIC0xNDQsNiArMTQ2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPik7CiAKKyAgICAgICAgc2l6ZV90IGV4dHJhU2l6ZSgpOyAvLyBleHRy
YSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdlcyBhbGxvY2F0ZWQgYnkgdGhlIGhlYXAKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHNpemUoKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBvYmplY3RDb3VudCgpOwpAQCAtMTc5LDExICsxODIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgICAgICAKICAg
ICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJu
IG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIENvcGll
ZEJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQzsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIERlZmVyR0NGb3JBV2hpbGU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1
YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBIYW5kbGVTZXQ7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKSVRTdHViUm91dGluZTsKQEAgLTIzMCw2ICsyMzYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJsb2NrQWxsb2NhdG9yKCk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICAgICAgdm9pZCBkZWNy
ZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0
aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwpA
QCAtMjQ1LDYgKzI1Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9ja0FsbG9jYXRv
ciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBNYXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwog
ICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VTcGFjZTsKKyAgICAgICAgR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJyYXlCdWZmZXJzOwogICAgICAgICBzaXplX3Qg
bV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJ
KHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBuYW1lc3BhY2UgSlND
ICB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5Q29u
c3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheVBy
b3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZt
KCkuYXJyYXlQcm90b3R5cGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
KiBib29sZWFuUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNh
bGxGcmFtZS0+dm0oKS5ib29sZWFuUHJvdG90eXBlVGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLmRhdGFWaWV3VGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxs
RnJhbWUtPnZtKCkuZGF0ZVRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IGRhdGVDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxs
RnJhbWUtPnZtKCkuZGF0ZUNvbnN0cnVjdG9yVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyBy
ZXR1cm4gY2FsbEZyYW1lLT52bSgpLmVycm9yUHJvdG90eXBlVGFibGU7IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDggKzQ4Miw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5n
VHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3Qg
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgICAgICBK
dW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVt
ZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CisgICAg
ICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCiAgICAgICAg
IC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlu
cyBpbmRlY2luZyB0eXBlLgogICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHll
dCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZApAQCAtNTAzLDggKzUwMyw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmlj
Q29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
SW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBK
dW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlw
ZWRBcnJheVJvdW5kaW5nKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgICAgICBKdW1wTGlzdCBl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFy
cmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJl
RmluYWwsIEtub3duTm90RmluYWwgfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQ5LDM1ICsxNTQ5LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFs
KEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0t
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51
aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUg
PSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAo
aXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2Ug
CisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKQEAgLTE2MTgsMzUgKzE1OTYsMTIgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5k
aW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVp
bnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9y
SklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIHR5cGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0xNjY4LDggKzE2
MjMsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlv
blB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmljKSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklU
OjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQo
dHlwZSkpOworICAgIAogICAgIC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBl
IGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAv
LyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBi
YXNlLCBhbmQgcHJvcGVydHkuCiAKQEAgLTE2ODksMTkgKzE2NDYsMTkgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFk
ZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1Q
dHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVu
Z3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRy
dXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5
QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkg
ewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJh
eSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9hZDhTaWduZWQo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRp
bWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAg
ICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlz
U2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9hZDE2U2lnbmVkKEJhc2VJbmRleChiYXNlLCBw
cm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbG9hZDE2KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQ
YXlsb2FkKTsKQEAgLTE3MTQsNyArMTY3MSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheUdldEIKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lOwotICAgIGlmIChlbGVt
ZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0gVW5zaWduZWRUeXBlZEFycmF5KSB7CisgICAg
aWYgKHR5cGUgPT0gVHlwZVVpbnQzMikgewogICAgICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNo
MzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOwog
ICAgICAgICAKICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBS
ZWdUMCk7CkBAIC0xNzQwLDggKzE2OTcsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5R2V0QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6
ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBw
cm9wZXJ0eSA9IHJlZ1QxOwpAQCAtMTc1OCwxMSArMTcxNywxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAog
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhP
ZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAg
ICAgY2FzZSA0OgogICAgICAgICBsb2FkRmxvYXQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpLCBmcFJlZ1QwKTsKICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoZnBSZWdU
MCwgZnBSZWdUMCk7CkBAIC0xNzg5LDggKzE3NDgsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIHJldHVybiBzbG93Q2FzZXM7ICAgIAogfQogCi1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2ln
bmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRpbmcpCitKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBl
KQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
QEAgLTE4MDgsOCArMTc2OSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJs
eVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNs
YXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgyMSwxMSArMTc4Miwx
MSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAg
Ly8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBl
eGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1
bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3Jh
Z2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAg
IGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50
U2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzaWduZWRuZXNzLCBzaWduZWRuZXNz
ID0gVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKCFpc1Np
Z25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1
YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgSnVtcCB0b29C
aWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhm
ZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODM2
LDcgKzE3OTcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAg
ICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAx
OgogICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHBy
b3BlcnR5LCBUaW1lc09uZSkpOwogICAgICAgICBicmVhazsKQEAgLTE4NTMsOCArMTgxNCwxMCBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgcmV0dXJuIHNs
b3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1l
bnRTaXplKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBU
eXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAK
ICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTg3Miw4ICsxODM1LDggQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAK
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVh
cmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRv
ci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQo
KSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7
CkBAIC0xODk4LDkgKzE4NjEsOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRB
cnJheVB1CiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBh
cyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0
cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
ZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNj
cmF0Y2gpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBjb252ZXJ0RG91YmxlVG9G
bG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKICAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNl
SW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKQEAgLTI2LDE0ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCiAKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLQorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5QnVmZmVyOjp0cmFu
c2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0MCw5IEBAIGJvb2wgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBmb3IgKEFycmF5
QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0VmlldykgewotICAg
ICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmlld3NBcmVOZXV0
ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxlID0gIW1fcGluQ291
bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlmIChpc05ldXRlcmFi
bGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAgICBlbHNlIHsKICAg
ICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs1MCwxMyBAQCBib29s
IEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFycmF5
QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3KGN1
cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQtPmlz
TmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAgIG5l
dXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJP
ZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJl
bmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigp
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmll
dyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOwot
ICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0
VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZW
aWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZm
ZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0aGlz
ID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAgICAg
dmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAgaWYg
KHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcg
PSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAgICAg
ICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9
IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCiAj
ZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKK2Ns
YXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAtNDUsNyArNDcsNyBA
QCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMoKTsK
LQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25l
ZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApAQCAtODYsMTIgKzg4
LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKLWNsYXNz
IEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKK2NsYXNzIEFy
cmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsK
ICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2
b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBPbmx5IGZvciB1c2Ug
YnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAgICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAtOTksMTQgKzEwMiwx
NiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qg
dm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29u
c3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25z
dDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4s
IGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGlj
ZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIHZvaWQgcGluKCk7CisgICAgdm9pZCB1bnBp
bigpOwogCi0gICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOwotICAgIHZvaWQgcmVt
b3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLQotICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29s
IHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJh
bnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0
dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQogCiAgICAgfkFycmF5QnVmZmVyKCkgeyB9CkBAIC0x
MTksOCArMTI0LDExIEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGNsYW1wSW5kZXgo
aW50IGluZGV4KSBjb25zdDsKICAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZhbHVlKGludCB4
LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKIAorICAgIHVuc2lnbmVkIG1fcGluQ291bnQ7CiAgICAg
QXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9m
aXJzdFZpZXc7CisKK3B1YmxpYzoKKyAgICBXZWFrPEpTQXJyYXlCdWZmZXI+IG1fd3JhcHBlcjsK
IH07CiAKIGludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCkKQEAgLTE1OSw2ICsxNjcsMTIgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OmNyZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIoY29udGVudHMp
KTsKIH0KIAorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0
ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBBcnJheUJ1
ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpLCBieXRlTGVuZ3Ro
KTsKKyAgICByZXR1cm4gY3JlYXRlKGNvbnRlbnRzKTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVu
dHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1cm4gY3JlYXRlKG51bUVs
ZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRvbnRJbml0aWFs
aXplKTsKQEAgLTE3NCw3ICsxODgsNyBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlCiB9CiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlckNvbnRl
bnRzJiBjb250ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCisgICAgOiBtX3BpbkNvdW50KDAp
CiB7CiAgICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7CiB9CkBAIC0xOTQsNiArMjA4
LDExIEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKICAgICByZXR1
cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwogfQogCitzaXplX3QgQXJyYXlCdWZmZXI6Omdj
U2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemVvZihBcnJheUJ1
ZmZlcikgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVMZW5ndGgoKSk7Cit9CisKIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwgY2xhbXBJbmRl
eChlbmQpKTsKQEAgLTIxOCwxNSArMjM3LDIzIEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpjbGFt
cEluZGV4KGludCBpbmQKICAgICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwgY3VycmVudExl
bmd0aCk7CiB9CiAKK3ZvaWQgQXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9waW5Db3VudCsr
OworfQorCit2b2lkIEFycmF5QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5Db3VudC0tOwor
fQorCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2lnbmVkIG51bUVs
ZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6Oklu
aXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQog
ewotICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUu
Ci0gICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0aW9uIGFscmVh
ZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCi0gICAgLy8gYW5kIHdpbGwgZmFpbCBpZiB0aGVyZSBp
cyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCi0gICAgLy8gcmVkdWRh
bnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIC8vIERvIG5vdCBh
bGxvdyAzMS1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCiAgICAgaWYgKG51bUVsZW1l
bnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRzICogZWxlbWVu
dEJ5dGVTaXplOwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVu
dEJ5dGVTaXplKSB7CisgICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVt
ZW50Qnl0ZVNpemUKKyAgICAgICAgICAgIHx8IHRvdGFsU2l6ZSA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKICAgICAgICAgICAg
IHJlc3VsdC5tX2RhdGEgPSAwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0y
NTMsNyArMjgwLDUgQEAgQXJyYXlCdWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVyQ29udGVudAog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotdXNpbmcgSlNDOjpBcnJheUJ1ZmZlcjsKLXVzaW5nIEpT
Qzo6QXJyYXlCdWZmZXJDb250ZW50czsKLQogI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcu
Y3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMzYgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAs
IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fcHJldlZpZXcoMCkKLSAgICAsIG1fbmV4dFZpZXco
MCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1f
Ynl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisg
ICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQp
IDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlz
KTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKIHsKLSAgICBpZiAo
bV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMpOworICAgIGlmICgh
bV9pc05ldXRlcmFibGUpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOwogfQogCi12b2lkIEFy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJh
YmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0g
MDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1dGVyYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxhZzsKKyAgICAKKyAgICBpZiAoIW1fYnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZsYWcpCisgICAgICAgIG1fYnVmZmVyLT51
bnBpbigpOworICAgIGVsc2UKKyAgICAgICAgbV9idWZmZXItPnBpbigpOwogfQogCi19Cit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcs
NyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIu
aCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgog
I2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNyw2
MCArMzcsNTAgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlclZpZXcgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsKLXB1YmxpYzoKLSAgICBlbnVtIFZp
ZXdUeXBlIHsKLSAgICAgICAgVHlwZUludDgsCi0gICAgICAgIFR5cGVVaW50OCwKLSAgICAgICAg
VHlwZVVpbnQ4Q2xhbXBlZCwKLSAgICAgICAgVHlwZUludDE2LAotICAgICAgICBUeXBlVWludDE2
LAotICAgICAgICBUeXBlSW50MzIsCi0gICAgICAgIFR5cGVVaW50MzIsCi0gICAgICAgIFR5cGVG
bG9hdDMyLAotICAgICAgICBUeXBlRmxvYXQ2NCwKLSAgICAgICAgVHlwZURhdGFWaWV3Ci0gICAg
fTsKLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CisgIHB1YmxpYzoK
KyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICBi
b29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2J1ZmZlciB8
fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAgIH0KKyAgICAKICAgICBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAg
fQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlz
TmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9iYXNl
QWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3QKICAgICB7
CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFn
KSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQorICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29s
IGZsYWcpOwogICAgIGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRl
cmFibGU7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZp
ZXcoKTsKIAotcHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZp
ZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAg
aW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0
KTsKLQotICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJv
b2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVu
Z3RoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgo
aW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQs
IHVuc2lnbmVkKiBsZW5ndGgpOwotCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2
ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbnVtRWxlbWVudHMpCisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
aWYgKGJ1ZmZlci0+aXNOZXV0ZXJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAyLDEwICs5MiwyNSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICBwcm90ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBzZXRJbXBsKEFycmF5QnVmZmVyVmlldyos
IHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNl
dCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1
bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIG9m
ZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKICAgICAvLyBJbnB1dCBvZmZzZXQgaXMgaW4gbnVt
YmVyIG9mIGVsZW1lbnRzIGZyb20gdGhpcyBhcnJheSdzIHZpZXc7CiAgICAgLy8gb3V0cHV0IG9m
ZnNldCBpcyBpbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgdW5kZXJseWluZyBidWZmZXIncyB2
aWV3LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zm
c2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBhcnJheUJ5dGVPZmZzZXQsIHVuc2lnbmVkICpvZmZzZXQsIHVuc2lnbmVkICpudW1FbGVtZW50
cykKKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCiAgICAgewogICAg
ICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVPZmZzZXQpIC8g
c2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewpAQCAtMTE5LDE5
ICsxMjQsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihy
ZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRk
cmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4K
ICAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQgbV9ieXRlT2Zmc2V0IDog
MzE7CiAgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CiAKLXByaXZhdGU6CisgIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
bV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVm
ZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBs
KEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyAr
MTc3LDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUltcGwodW5zaQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5k
TGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCog
b2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0
ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCArPSBhcnJheVNpemU7CkBAIC0xOTYsNiArMTk4LDQgQEAgdm9pZCBBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotdXNpbmcg
SlNDOjpBcnJheUJ1ZmZlclZpZXc7Ci0KICNlbmRpZiAvLyBBcnJheUJ1ZmZlclZpZXdfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGFz
aEVudHJ5OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxlOwogCiBz
dHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAtOTYsNiArOTcsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxl
IHsKIAogICAgIHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9u
UHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eSBzbG93RG93bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7
CisgICAgR2V0VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5l
IENSRUFURV9NRU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOSw2ICsxNDYsOCBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFz
c05hbWU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpz
bG93RG93bkFuZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJy
YXlJbXBsIFwKICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAvLyB3YXlzIHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaXN0LgogI2RlZmluZSBKU0NfQ09NTU9O
X0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAogICAgIG1hY3JvKEFycmF5
KSBcCisgICAgbWFjcm8oQXJyYXlCdWZmZXIpIFwKICAgICBtYWNybyhCb29sZWFuKSBcCiAgICAg
bWFjcm8oRGF0ZSkgXAogICAgIG1hY3JvKEVycm9yKSBcCkBAIC01NSw2ICs1Niw5IEBACiAgICAg
bWFjcm8oYXBwbHkpIFwKICAgICBtYWNybyhhcmd1bWVudHMpIFwKICAgICBtYWNybyhiaW5kKSBc
CisgICAgbWFjcm8oYnVmZmVyKSBcCisgICAgbWFjcm8oYnl0ZUxlbmd0aCkgXAorICAgIG1hY3Jv
KGJ5dGVPZmZzZXQpIFwKICAgICBtYWNybyhieXRlY29kZSkgXAogICAgIG1hY3JvKGJ5dGVjb2Rl
SW5kZXgpIFwKICAgICBtYWNybyhieXRlY29kZXMpIFwKQEAgLTExMiw2ICsxMTYsNyBAQAogICAg
IG1hY3JvKHByb3BlcnR5SXNFbnVtZXJhYmxlKSBcCiAgICAgbWFjcm8ocHJvdG90eXBlKSBcCiAg
ICAgbWFjcm8oc2V0KSBcCisgICAgbWFjcm8oc2xpY2UpIFwKICAgICBtYWNybyhzb3VyY2UpIFwK
ICAgICBtYWNybyhzb3VyY2VDb2RlKSBcCiAgICAgbWFjcm8oc3RhY2spIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOjE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEYXRhVmlldy5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2Ug
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordW5pb24gVmFsdWUgeworICAgIFQgZGF0YTsKKyAg
ICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQor
eworICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkT2Zm
c2V0KGJ5dGVPZmZzZXQpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7CisgICAg
aWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkg
PiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30K
KworRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVy
VmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkK
K3sKK30KKworc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQor
eworI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQor
ICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIHN3YXBC
eXRlcyhjaGFyKiBwLCBjaGFyKiBxKQoreworICAgIGNoYXIgdGVtcCA9ICpwOworICAgICpwID0g
KnE7CisgICAgKnEgPSB0ZW1wOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMo
Y2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDEpOworfQorCitzdGF0aWMgdm9pZCBm
bGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwor
ICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNG
b3I2NEJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDcpOworICAgIHN3YXBC
eXRlcyhwICsgMSwgcCArIDYpOworICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOworICAgIHN3
YXBCeXRlcyhwICsgMywgcCArIDQpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRl
ZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQoreworICAgIGlm
ICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybjsKKworICAg
IHN3aXRjaCAoc2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICAgLy8gTm90aGluZyB0byBkby4K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHMo
dmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGZsaXBCeXRlc0Zv
cjMyQml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgZmxp
cEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAg
IGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3Qgd2Fu
dCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVy
cm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4K
KyAgICBWYWx1ZTxUPiB2YWx1ZTsKKyAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Cisg
ICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFu
KTsKKyAgICByZXR1cm4gdmFsdWUuZGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv
aWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChiZXlvbmRSYW5nZTxU
PihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEg
ZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJl
cyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KKyAgICBWYWx1ZTxUPiB0ZW1w
VmFsdWU7CisgICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKKyAgICBmbGlwQnl0ZXNJZk5lZWRl
ZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBtZW1jcHko
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVl
LmJ5dGVzLCBzaXplb2YoVCkpOworfQorCitpbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8
aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCit1aW50OF90IERhdGFWaWV3Ojpn
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBy
ZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCitpbnQx
Nl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQxNl90IERhdGFWaWV3Ojpn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKK30KKworaW50MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OworfQorCit1aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2Zsb2F0
IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0
ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2RvdWJsZSBEYXRhVmlldzo6Z2V0Rmxv
YXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50
OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6
c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2Us
IGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
c2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
K30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQx
Nl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
c2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwor
fQorCit2b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0
RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisK
K3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERh
dGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwor
dm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8
ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBE
YXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGRvdWJs
ZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFW
aWV3OjpuZXV0ZXIoKQoreworICAgIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7CisgICAgbV9i
eXRlTGVuZ3RoID0gMDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzkgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhVmlldy5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24gVmFs
dWUgewotICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBpZiAo
IWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZm
ZXIsIDAsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRl
TGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWludDMy
X3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENoZWNr
ZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCAr
IGNoZWNrZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNo
ZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpKTsKLX0KK25hbWVzcGFjZSBKU0MgewogCiBEYXRhVmlldzo6RGF0YVZp
ZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQogICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9m
ZnNldCkKQEAgLTY2LDE3OSArMzQsMTEgQEAgRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZQogewogfQogCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0
bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlh
bjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5l
IHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7
Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRl
c0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhw
LCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lk
IGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7
Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsg
NSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBC
eXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4p
Ci17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3Ro
aW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRl
c0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAg
ZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4Ogot
ICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVj
ID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdl
IGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1
c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGln
bmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywg
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6
ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBs
aXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJl
eW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9y
ZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBh
cmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZh
bHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBC
eXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwot
ICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0
LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0
SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1
cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3Qg
RGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+
IERhdGFWaWV3OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQogewotICAgIHJldHVybiBn
ZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50
MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZf
dD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZpZXc6
OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdl
dERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3VibGUg
RGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0
ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0K
LXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0
ZUxlbmd0aCkpOwogfQogCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFycmF5QnVm
ZmVyVmlldzo6bmV1dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KK30gLy8gbmFtZXNw
YWNlIEpTQwogCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3
LmgJKHJldmlzaW9uIDE1Mzc3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuaDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRh
Vmlld19oCisjZGVmaW5lIERhdGFWaWV3X2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBEYXRhVmlldyA6IHB1
YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKworICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB1aW50OF90IGdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OyB9CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVP
ZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBpbnQzMl90
IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgaW50MzJfdCBnZXRJbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAg
ICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQs
IGZhbHNlLCBlYyk7IH0KKyAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZG91YmxlIGdldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZs
b2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisK
KyAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZf
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVl
LCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAK
KyAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWlu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zm
c2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxz
ZSwgZWMpOyB9CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJs
ZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZpcnR1
YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlwZURh
dGFWaWV3OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsK
KworcHJpdmF0ZToKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIGlubGluZSBib29sIGJleW9uZFJhbmdlKHVuc2lnbmVkIGJ5dGVPZmZzZXQp
IGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQgPj0gbV9ieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQg
KyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOworfTsKKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEYXRhVmlld19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3
NiArMjYsMzMgQEAKICNpZm5kZWYgRGF0YVZpZXdfaAogI2RlZmluZSBEYXRhVmlld19oCiAKLSNp
bmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgIkFycmF5QnVmZmVy
Vmlldy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIERh
dGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZh
bHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50
MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90
IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0
ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUg
Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZs
b2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVp
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMy
KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3Vi
bGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNl
dCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0g
ICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0
ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ieXRlTGVuZ3RoOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKICAgICB9CiAKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KIHByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlvbmRS
YW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1f
Ynl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQogICAgIHVuc2ln
bmVkIG1fYnl0ZUxlbmd0aDsKIH07CiAKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAt
MjQsODQgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEZsb2F0MzJB
cnJheV9oCi0jZGVmaW5lIEZsb2F0MzJBcnJheV9oCisjaWZuZGVmICJGbG9hdDMyQXJyYXlfaCIK
KyNkZWZpbmUgIkZsb2F0MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
RmxvYXQzMkFycmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3Jl
YXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJl
IGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8g
SmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAgICB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4
ID49IFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19j
YXN0PGZsb2F0Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQz
MkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRy
PEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VHlwZUZsb2F0MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDMyQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRl
KGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0
MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZs
b2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGVVbmluaXRp
YWxpemVkPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5OjpGbG9hdDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9h
dDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0
MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVy
biBzdWJhcnJheUltcGw8RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQzMkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEs
OTggKzEwLDIzIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAotI2RlZmluZSBGbG9hdDY0
QXJyYXlfaAorI2lmbmRlZiAiRmxvYXQ2NEFycmF5X2giCisjZGVmaW5lICJGbG9hdDY0QXJyYXlf
aCIKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1YmxpYyBU
eXBlZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2
NEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4g
aXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBu
b3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZp
bGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRB
cnJheUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxk
b3VibGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlwZWRBcnJh
eUJhc2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUp
OwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIAotICAg
IC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBj
bGFzcyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
VHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNvbnN0IGRv
dWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJh
eT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZDxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2NEFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFy
cmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1
YmFycmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotdXNpbmcgSlNDOjpGbG9hdDY0QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMu
aCIKIAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZp
ZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBHZW5lcmljVHlw
ZWRBcnJheVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25zdCB0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSo+KGJhc2VBZGRyZXNzKCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGggKiBzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5n
ZSh1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4g
emVyb1JhbmdlSW1wbChvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksIGxl
bmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGxlbmd0aCgpCisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICB9
CisKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgpOworICAg
ICAgICByZXR1cm4gZGF0YSgpW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFw
dG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5k
RGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNl
dCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAg
ICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0g
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZp
ZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlw
ZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisg
ICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5l
cmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
c19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6
IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5n
dGgpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVy
aWNUeXBlZEFycmF5Vmlldz4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAw
LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3Jl
YXRlKAorICAgIGNvbnN0IEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0
aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKEFk
YXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IHBhc3NlZEJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICgh
dmVyaWZ5U3ViUmFuZ2UoYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNUeXBlZEFycmF5Vmlldyhi
dWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZl
cjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc+IEdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c3ViYXJyYXkoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNh
bGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCBsZW5ndGgoKSwgJm9mZnNldCwgJmxl
bmd0aCk7CisgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxBZGFwdG9yOjpUeXBlPihidWZm
ZXIoKSwgYnl0ZU9mZnNldCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRl
KGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB1
aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3RoOyB9
CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyB1Lmxlbmd0aHMu
cHVibGljTGVuZ3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1
ZmZlcigpIHsgcmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2b2lkIHNldEFycmF5
QnVmZmVyKEFycmF5QnVmZmVyKiBidWZmZXIpIHsgdS50eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZl
cjsgfQorICAgIAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5n
SGVhZGVyKj4oYnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIxLDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMg
ZmllbGQgZGVwZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2Ug
cmVseSBvbiB0aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVu
Z3RoKS4KICAgICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBv
ZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0
b3JhZ2UgZGVwZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAgICAgICAgIH0gbGVuZ3RoczsK
KyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBBcnJheUJ1ZmZlciogYnVm
ZmVyOworICAgICAgICB9IHR5cGVkQXJyYXk7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEw
ICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw4
MCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSW50OEFycmF5X2gK
LSNkZWZpbmUgSW50OEFycmF5X2gKKyNpZm5kZWYgIkludDhBcnJheV9oIgorI2RlZmluZSAiSW50
OEFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50OEFycmF5IDogcHVi
bGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKGNvbnN0IGludDhf
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVk
QXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PGludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBj
b25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVk
QXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxp
bnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhB
cnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFy
cmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJh
eTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4
X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVh
dGVVbmluaXRpYWxpemVkPEludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50OEFycmF5OjpJbnQ4
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5
PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Vi
YXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBz
dWJhcnJheUltcGw8SW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLXVzaW5nIEpTQzo6SW50OEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAK
ICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
ICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yMyw4MCArMjMsMTAgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSW50MTZBcnJheV9oCi0jZGVmaW5lIEludDE2
QXJyYXlfaAorI2lmbmRlZiAiSW50MTZBcnJheV9oIgorI2RlZmluZSAiSW50MTZBcnJheV9oIgog
Ci0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIEludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdy
YWxUeXBlZEFycmF5QmFzZTxpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgaW50MTZfdCogYXJy
YXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2
QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBp
dCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5v
dCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmls
bGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3Jl
YXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGlu
dDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtl
IGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUoY29uc3QgaW50MTZfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNy
ZWF0ZTxJbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBJbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQxNkFycmF5PihsZW5ndGgpOwot
fQotCi1JbnQxNkFycmF5OjpJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxU
eXBlZEFycmF5QmFzZTxpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0K
LQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBh
c3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MTZBcnJheT4oc3RhcnQs
IGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDE2QXJyYXk7
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEludDE2QXJyYXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKQEAgLTI0LDc3ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBJbnQzMkFycmF5X2gKLSNkZWZpbmUgSW50MzJBcnJheV9oCisjaWZuZGVmICJJbnQzMkFycmF5
X2giCisjZGVmaW5lICJJbnQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGlj
IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJB
cnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0
IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90
IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxs
aW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5
QmFzZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+Ojpz
ZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgaW5saW5lIEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PGludD47Ci19OwotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0
ZTxJbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMy
QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQz
MkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5Ojpz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBs
ZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8
SW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2lu
ZyBKU0M6OkludDMyQXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8v
IEludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisKKyNpbmNsdWRlICJS
ZWplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVm
ZmVyOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyKX07CisKK0pTQXJyYXlCdWZmZXI6OkpT
QXJyYXlCdWZmZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYXJyYXlCdWZmZXIpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X2ltcGwoYXJyYXlCdWZmZXIuZ2V0KCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBtX2ltcGwpOworfQorCitKU0FycmF5QnVmZmVy
KiBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQoreworICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIEpTQXJyYXlCdWZmZXIqIHJl
c3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXI+
KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlcik7
CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAor
ICAgICAgICBOb25BcnJheSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZm
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkg
eworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0
ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAg
ICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpwdXQo
CisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCksICJB
dHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmlu
ZSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnN0IHsg
cmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisKK3ByaXZhdGU6CisgICAgQXJyYXlCdWZmZXIqIG1faW1wbDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisj
aW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZSogcHJvdG90eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAg
ICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxl
YXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+
YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5n
dGgsIDEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KAorICAgICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5
QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0
QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlw
ZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RB
cnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisK
K2NsYXNzIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBj
cmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBl
Kik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMg
Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
IgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBi
dWZmZXIuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2Ug
cmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJl
Z2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5k
KTsKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5
QnVmZmVyU3RydWN0dXJlKCk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVy
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJh
eUJ1ZmZlclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisK
K0pTQXJyYXlCdWZmZXJQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hD
cmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisK
K1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJl
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZm
ZXJWaWV3OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitKU0Fy
cmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgK
KyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQz
Ml90IGVsZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9z
dHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDAp
Cit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVt
cHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNp
emUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50
cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRl
bXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2
NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAg
ICAgICAgICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBpZiAo
bGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAg
ICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0
b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5
RmFzdE1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAg
CisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBl
ZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29u
c3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgLCBt
X3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRl
T2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlw
ZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRl
eGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFk
ZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZt
LCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5z
dHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQu
dmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2Rl
KGNvbnRleHQubW9kZSgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3
aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFs
aXplcih0aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVs
VHlwZWRBcnJheToKKyAgICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5
KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgp
Lm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wg
SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9m
ZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAg
ICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAg
ICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigp
KSwKKyAgICAgICAgICAgIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3Zv
aWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWpl
Y3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVh
ZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHko
CisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91
bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3Qo
ZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQg
YXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOwor
ICAgIAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBh
dCBsZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zm
c2V0KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAg
IH0KKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5h
bGl6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhpc09iamVj
dC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUgPT0g
V2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJz
aXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3IpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1
ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRl
cyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVu
ZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRz
IHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gK
Ky8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcg
b2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwg
dHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZl
cmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQg
bGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5v
dAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1v
c3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBp
dCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRo
IFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2
ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3RydWN0b3IiIGFuZCBhCisv
LyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50IG1vZGVz
IGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUgdXNlciBo
YXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZworLy8gYnVm
ZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitlbnVtIFR5
cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4gQiBpcyB1
bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNvcGllZCBz
cGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAgLy8gZGV0
ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RUeXBlZEFy
cmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBhdHRlbXB0
cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlhbGl6ZWQg
dG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVyIHBvaW50
ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9jKCksCisg
ICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBkZXRlcm1p
bmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRoZSB2aWV3
IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlwZWRBcnJh
eSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29tZSBjcmF6
eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNvbnRhaW4g
YSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8vIG5hdGl2
ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBvaW50cyB0
byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwgYW5kIE0g
PSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3duIHRoZSB2
ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJDb3JlIHVz
ZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdldCB0aGUg
bmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVpcmVz
IHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3Npbmcg
dGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVyVmll
dworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9kVGFi
bGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5vIG5l
ZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUgaW50
byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xhc3Mg
SlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOworICAgIAorICAgIHN0YXRpYyBzaXplX3Qg
c2l6ZU9mKHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAgeworICAg
ICAgICByZXR1cm4gKGxlbmd0aCAqIGVsZW1lbnRTaXplICsgc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSAtIDEpCisgICAgICAgICAgICAmIH5zaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIGNsYXNzIENvbnN0cnVjdGlvbkNvbnRleHQgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0KTsKKyAgICAgICAgCisgICAgcHVi
bGljOgorICAgICAgICBlbnVtIEluaXRpYWxpemF0aW9uTW9kZSB7IFplcm9GaWxsLCBEb250SW5p
dGlhbGl6ZSB9OworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0
cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsIEluaXRpYWxp
emF0aW9uTW9kZSA9IFplcm9GaWxsKTsKKyAgICAgICAgCisgICAgICAgIENvbnN0cnVjdGlvbkNv
bnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICAgICAgCisgICAgICAgIH5Db25zdHJ1Y3Rpb25Db250ZXh0KCk7CisgICAgICAgIAorICAg
ICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsgfQorICAg
ICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
cjsgfQorICAgICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQorICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9
CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJm
bHk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVj
dHVyZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3Ro
OworICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9i
dXR0ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0
cnVjdGlvbkNvbnRleHQmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAg
IAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAK
K3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciwgbmF0
aXZlIHZpZXcsIGFuZCBKUyBidWZmZXI7IGFsc28KKyAgICAvLyBtb3ZlcyB0aGUgZGF0YSBpbnRv
IHRoZSBDIGhlYXAgaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KCk7CisgICAgCisgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZTsgfQorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7CisgICAgCisg
ICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9s
ZW5ndGg7IH0KKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlZlY3RvcigpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV92ZWN0b3IpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0FycmF5QnVmZmVyVmlldywgbV9sZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk1vZGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1f
bW9kZSk7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsK
KworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHZvaWQqIG1fdmVjdG9yOworICAgIHVpbnQz
Ml90IG1fbGVuZ3RoOworICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
d0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5
KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOwor
fQorCitpbmxpbmUgQXJyYXlCdWZmZXJWaWV3KiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkK
K3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4g
YnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGlu
ZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQor
eworICAgIHJldHVybiBtZXRob2RUYWJsZSgpLT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30K
KworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5n
dGggPSAwOworfQorCitpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZz
ZXQoKSBjb25zdAoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KSB7Cisg
ICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJz
aXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBwdHJk
aWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOworICAgIAorICAgIHVuc2ln
bmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0YSk7CisgICAgQVNTRVJUKHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmll
d0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxs
OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJU
eXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1
ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsKIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1
YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9z
dHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCiAgICAgICAgIAotICAgIHN0YXRp
YyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5
Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VU
eXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShK
U0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNs
dWRlICJFcnJvci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0
YVZpZXc6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmll
dyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBj
b250ZXh0KQoreworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7
CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAg
ICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxl
bmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRl
eHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBB
U1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0s
IGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6
OmNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3
OjpzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQpCit7CisgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcq
PihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5tX2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkg
eworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
bV9sZW5ndGgpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0Rh
dGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBv
YmplY3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3
Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICAgICAgdGhpc09i
amVjdC0+YnVmZmVyKCksIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSwgdGhpc09iamVjdC0+bV9s
ZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNEYXRhVmlld19oCisjZGVmaW5lIEpTRGF0YVZpZXdfaAorCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXcg
OiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJh
eUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZWxlbWVudFNpemUg
PSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25D
b250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZSgK
KyAgICAgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAg
IAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNl
IGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNp
YWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRl
VW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlw
ZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURhdGFWaWV3OworCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiTG9va3VwLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJh
eUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldElu
dDgoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpOworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKEV4ZWNTdGF0ZSogZXhlYyk7CitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhl
Y1N0YXRlKiBleGVjKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNT
dGF0ZSogZXhlYyk7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUq
IGV4ZWMpOworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1Nl
dEludDMyKEV4ZWNTdGF0ZSogZXhlYyk7CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVj
KTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50
MzIoRXhlY1N0YXRlKiBleGVjKTsKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYyk7CitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMp
OworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0geworICAg
ICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0YVZp
ZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5cGUpCit9
OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkYXRh
VGFibGUKKyAgZ2V0SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OCAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQ4ICAgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBnZXRJbnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJ
bnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDE2ICAg
ICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCisgIGdldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50
MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJv
dG9GdW5jR2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdl
dEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgc2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDggICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDE2ICAgICAgICAgICAgICBk
YXRhVmlld1Byb3RvRnVuY1NldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAg
ICAgMAorICBzZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50MzIgICAgICAgICAg
ICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIHNldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDMyICAg
ICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5j
U2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCitAZW5kCisqLwor
CitKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9CisKK0pTRGF0
YVZpZXdQcm90b3R5cGUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIEpTRGF0YVZpZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9
CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXdQcm90b3R5cGU+
KHZtLmhlYXApKQorICAgICAgICBKU0RhdGFWaWV3UHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwor
ICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBwcm90b3R5cGU7
Cit9CisKK1N0cnVjdHVyZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0
aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFW
aWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAg
ICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlw
dG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4
ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitF
bmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3
KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3Qg
YmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0g
ZmFsc2U7CisgICAgaWYgKHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpOwor
ICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4p
KQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFsdWUodmFsdWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBE
YXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3QgdHdvIGFyZ3VtZW50ICh0aGUg
Ynl0ZU9mZnNldCBhbmQgdmFsdWUpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05h
dGl2ZShleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAg
ICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9m
ZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7Cisg
ICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikp
CisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICAqcmVpbnRlcnBy
ZXRfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRh
dGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZhbHVlOworICAgIAorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQx
NkFkYXB0b3I+KGV4ZWMpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldElu
dDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+
KGV4ZWMpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDMy
QWRhcHRvcj4oZXhlYyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERh
dGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0Rmxv
YXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQ2NEFkYXB0
b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAor
I2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBC
YXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVy
ZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1By
b3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQz
MkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
bG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0Zs
b2F0MzJBcnJheV9oIgorI2RlZmluZSAiSlNGbG9hdDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTRmxvYXQ2NEFycmF5X2giCisjZGVmaW5l
ICJKU0Zsb2F0NjRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2
aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVu
CisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IElu
dDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6Cisv
LworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJm
bHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAg
IHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRz
IHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtl
CisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQg
bWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9m
IHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJh
eSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBz
cGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0
IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBs
ZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVy
IGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0
aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgor
CisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRh
cHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252
ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2Ug
aW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5
cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7Cisv
LyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4
X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFs
dWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGlj
IGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZm
ZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRp
YyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBj
cmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZp
ZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0
ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRv
cjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQor
ICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOwor
ICAgIH0KKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVj
dG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBp
bmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhl
bmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1
bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9Cisg
ICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ld
OworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1
aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pT
VmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7
CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0
aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2ln
bmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05h
dGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1
ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9
IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4
UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVu
Z3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAg
ICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0g
b2Zmc2V0OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDog
aWYgaXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0
ZSBleGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZp
Y1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFs
c2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2
ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAg
c3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0
b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRl
ZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
c3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlU
b2tlbik7CisKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQg
bW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhh
dCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9pZCBz
bG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVy
VmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rp
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJu
YWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7
CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKAorICAg
ICAgICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEm
KTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxW
aWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZShnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
Pgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90
b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigz
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdD
bGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNy
ZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5hbWUpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0
cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+Ojpj
cmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisg
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBh
cmd1bWVudC4iKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICBh
c0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRB
cnJheVN0cnVjdHVyZSgKKyAgICAgICAgICAgIFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VU
eXBlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJheUJ1ZmZlcioganNCdWZmZXIgPSBqc0R5bmFtaWND
YXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1wbCgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpID8gZXhlYy0+
YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpID4gMikgeworICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQo
MikudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSBvZmZzZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVy
IGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgZWxl
bWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5ndGgo
KSAtIG9mZnNldCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJl
LCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIGlmIChWaWV3Q2xh
c3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBBcnJh
eUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICAvLyBGb3IgZXZl
cnl0aGluZyBidXQgRGF0YVZpZXcsIHdlIGFsbG93IGNvbnN0cnVjdGlvbiB3aXRoIGFueSBvZjoK
KyAgICAvLyAtIEFub3RoZXIgYXJyYXkuIFRoaXMgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIG9mIHRo
YXQgYXJyYXkuCisgICAgLy8gLSBBbiBpbnRlZ2VyLiBUaGlzIGNyZWF0ZXMgYSBuZXcgdHlwZWQg
YXJyYXkgb2YgdGhhdCBsZW5ndGggYW5kIHplcm8taW5pdGlhbGl6ZXMgaXQuCisgICAgCisgICAg
aWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJn
dW1lbnQoMCkpKSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1
bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIAor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1
bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5n
dGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0
KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVz
dGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShW
aWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CitDYWxsVHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmll
d0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGVmZXJHQy5oIgorI2luY2x1
ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5jbHVkZSAi
VHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAg
IDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRl
eHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7
CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4
ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZt
KCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4
dCBjb250ZXh0KAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpLAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0OjpEb250SW5pdGlh
bGl6ZSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4
ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlm
eVN1YlJhbmdlPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgewor
ICAgICAgICB0aHJvd0Vycm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0
KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAg
IEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4
ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0o
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBpbXBsLT5idWZmZXIoKTsKKyAgICBDb25zdHJ1Y3Rpb25D
b250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBpbXBsLT5ieXRlT2Zmc2V0KCks
IGltcGwtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKKyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdU
eXBlPiBpbXBsKQoreworICAgIHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1
Y3R1cmUsIGltcGwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6dmFsaWRhdGVSYW5nZSgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChj
YW5BY2Nlc3NSYW5nZVF1aWNrbHkob2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJh
bmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordGVt
cGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2V0V2l0aFNwZWNpZmljVHlwZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIE90aGVy
VHlwZSogb3RoZXIsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8v
IEhhbmRsZSB0aGUgaGlsYXJpb3VzIGNhc2U6IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3Ro
IGNvdWxkIGhhdmUgcmVzdWx0ZWQKKyAgICAvLyBpbiBuZXV0ZXJpbmcuIFdlbGwsIG5vLiBUaGF0
J2xsIG5ldmVyIGhhcHBlbiBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZQorICAgIC8vIHNpZGUtZWZm
ZWN0cyBvbiBnZXR0aW5nIHRoZSBsZW5ndGggb2YgYSB0eXBlZCBhcnJheS4gQnV0IHByZWRpY3Rp
bmcgd2hlcmUgdGhlcmUKKyAgICAvLyBhcmUsIG9yIGFyZW4ndCwgc2lkZS1lZmZlY3RzIGlzIGEg
Zm9vbCdzIGdhbWUgc28gd2UgcmVzb3J0IHRvIHRoaXMgY2hlYXAKKyAgICAvLyBjaGVjay4gV29y
c3QgY2FzZSwgaWYgd2UncmUgd3JvbmcsIHBlb3BsZSBzdGFydCBzZWVpbmcgbGVzcyB0aGluZ3Mg
Z2V0IGNvcGllZAorICAgIC8vIGJ1dCB3ZSB3b24ndCBoYXZlIGEgc2VjdXJpdHkgdnVsbmVyYWJp
bGl0eS4KKyAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7Cisg
ICAgCisgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChvdGhlci0+bGVuZ3RoKCkgIT0gbGVuZ3Ro
KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiTGVu
Z3RoIG9mIGluY29taW5nIGFycmF5IGNoYW5nZWQgdW5leHBlY3RlZGx5LiIpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7
IGktLTspCisgICAgICAgIHNldEluZGV4UXVpY2tseShvZmZzZXQgKyBpLCBvdGhlci0+Z2V0SW5k
ZXhRdWlja2x5KGkpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNl
dCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2kgPSBvYmplY3Qt
PmNsYXNzSW5mbygpOworICAgIGlmIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IEFkYXB0
b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICAvLyBUaGUgc3VwZXIgZmFzdCBjYXNlOiB3ZSBjYW4g
anVzdCBtZW1jcHkgc2luY2Ugd2UncmUgdGhlIHNhbWUgdHlwZS4KKyAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIG90aGVyID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pihv
YmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgo
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBs
ZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgbWVt
Y3B5KAorICAgICAgICAgICAgdHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVkVmVj
dG9yKCksCisgICAgICAgICAgICBvdGhlci0+bGVuZ3RoKCkgKiBzaXplb2YoQWRhcHRvcjo6VHlw
ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChjaS0+
dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0
dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50OEFycmF5Kj4ob2JqZWN0
KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhT
cGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCk7
CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBl
KGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQpOworICAgIGNhc2Ug
VHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nh
c3Q8SlNVaW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxK
U1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50
MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1Vp
bnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
ICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQzMkFycmF5
Kj4ob2JqZWN0KSwgb2Zmc2V0KTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1
cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmpl
Y3QpLCBvZmZzZXQpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBzZXRX
aXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCksIG9m
ZnNldCk7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OiB7
CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRoaXMg
Y2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9uJ3QuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmRleFF1aWNrbHko
ZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5nZXQoZXhlYywgaSkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0
aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdl
dEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0
aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAg
IAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkg
eworICAgICAgICAvLyBGaXJlZm94IGFwcGVhcnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0
byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmlj
dCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChp
bmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0
aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blBy
b3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAg
IC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQg
cmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5k
ZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAg
IC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3Bl
cnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7Cisg
ICAgfQorICAgIAorICAgIGlmICghdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHByb3Bl
cnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJv
d2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+c2V0SW5kZXhR
dWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9J
TkRFWCkgeworICAgICAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9
PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldE93blByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdGhpc09iamVjdC0+bV9sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkuYWRkKElkZW50
aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVj
dC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9y
LmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFy
cmF5OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUo
CisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2Vu
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5
cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KKyAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxk
Q29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9yID0g
dGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3Iu
YWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5
KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAg
dGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHZpc2l0b3IuZGlkQ29w
eShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBC
YXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNPYmplY3QsIHZpc2l0b3IsIHRva2VuKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVj
dCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0
aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBs
YWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUg
Vk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRo
YXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3
aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXph
cnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBp
cyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlz
CisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHBy
aW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVy
c2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAg
ICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVh
dGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBi
dXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAg
IC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9y
ZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRo
aW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAv
LyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFw
cHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7Cisg
ICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRo
aXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlz
T2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNv
cmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAo
dGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICF0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAg
ICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJs
ZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPQorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ID0gQnV0dGVy
Zmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
KSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZh
c3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNP
YmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0
cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2ls
bCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAorICAgICAgICAvLyB0
aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRv
cHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJy
YXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVj
dCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBBZGFwdG9yOjpWaWV3VHlwZTo6Y3JlYXRl
KAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgp
LCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAor
I2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKik7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKyNkZWZp
bmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKworI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBW
aWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0
eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgSlNPYmpl
Y3QqIHNvdXJjZUFycmF5ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50
KDApKTsKKyAgICBpZiAoIXNvdXJjZUFycmF5KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFu
IG9iamVjdC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgx
KS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzb3Vy
Y2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdGhpc09iamVjdC0+
c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAgVmll
d0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlw
ZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMyX3Qg
YmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5k
ID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gR2V0IHRoZSBsZW5ndGggaGVy
ZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBkaWRuJ3QgY2hhbmdlLgorICAgIHVuc2ln
bmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBIYW5k
bGUgbmVnYXRpdmUgaW5kaWNlczogLXggPT4gbGVuZ3RoIC0geAorICAgIGlmIChiZWdpbiA8IDAp
CisgICAgICAgIGJlZ2luID0gdGhpc0xlbmd0aCAtIGJlZ2luOworICAgIGlmIChlbmQgPCAwKQor
ICAgICAgICBlbmQgPSB0aGlzTGVuZ3RoIC0gZW5kOworICAgIAorICAgIC8vIENsYW1wIHRoZSBp
bmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LgorICAgIEFTU0VSVChiZWdpbiA+PSAw
KTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAgIGJlZ2luID0gc3RkOjptaW4oYmVnaW4sIHN0
YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICBlbmQgPSBzdGQ6Om1pbihlbmQs
IHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICAKKyAgICAvLyBDbGFtcCBl
bmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisgICAg
QVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47CisgICAg
dW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0VfQVNT
RVJUKGxlbmd0aCA9PSB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPQorICAgICAgICBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5
U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBW
aWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgp
LCBzdHJ1Y3R1cmUsIGFycmF5QnVmZmVyLAorICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0
KCkgKyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBW
aWV3Q2xhc3M6OmVsZW1lbnRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIAorICAgIEFTU0VSVChpbmhlcml0cygmc19p
bmZvKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5z
ZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250RW51
bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1YmFycmF5PFZpZXdDbGFzcz4sIERvbnRFbnVt
LCAyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBw
cm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZT4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBw
cm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTUgKzQ5LDIzIEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpT
Qm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3Qu
aCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgi
CiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlQcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMZWdh
Y3lQcm9maWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpAQCAtMjE0LDYgKzIyMiwzMCBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHJvdG9BY2Nlc3Nv
ci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAw
LCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQcm90b3R5
cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNj
b3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAgIG1fZnVu
Y3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlv
bihleGVjLT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgCisgICAgbV9hcnJh
eUJ1ZmZlclByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgSlNJbnQ4QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJv
dG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDMy
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCBKU1VpbnQ4
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4
Q2xhbXBlZCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1wZWRB
cnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IEpTVWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgSlNGbG9h
dDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0NjQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNEYXRh
Vmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
SW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNVaW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUu
Z2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5zdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnBy
b3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMild
LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0
MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0NjQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVEYXRhVmlldyldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRhVmll
dzo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbmFtZVNjb3BlU3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV9hY3RpdmF0aW9uU3RydWN0dXJl
LnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwpAQCAtMzE4LDYgKzM1MCwyNiBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuSlNPTiwgSlNPTk9iamVj
dDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lk1hdGgsIE1hdGhPYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9u
dEVudW0pOworICAgIAorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZmZXJD
b25zdHJ1Y3RvciA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKTsK
KyAgICBGaXhlZEFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlf
VFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9y
c1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhp
cywgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDgpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7CisgICAg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50MzJB
cnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgpXSA9
IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50OEFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5n
ZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGUodGhpcywgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhDbGFt
cGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQx
NildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50MTZBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJv
dG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMyQXJyYXkiKTsKKyAgICB0eXBl
ZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpTRmxvYXQzMkFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSwgIkZs
b2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxv
YXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxvYXQ2
NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0
KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7CisgICAgCisgICAgbV9hcnJheUJ1
ZmZlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLkFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1C
RVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5cGVkQXJyYXlJbmRleC0tOykgeworICAgICAgICBt
X3R5cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRleF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAg
ICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XS0+bmFtZShleGVjKSks
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAg
IH0KIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyhleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTmFOLCBqc05hTigpLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNs
dWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3Rv
dHlwZS5oIgpAQCAtMTY2LDYgKzE2NywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0
IFR5cGVkQXJyYXlEYXRhIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5
cGU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9Owor
ICAgIAorICAgIEZpeGVkQXJyYXk8VHlwZWRBcnJheURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJB
WV9UWVBFUz4gbV90eXBlZEFycmF5czsKICAgICAgICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9p
bnRlcnNbU3BlY2lhbDo6VGFibGVTaXplXTsgLy8gU3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRo
ZSBMTEludCBhbmQgSklULgogCkBAIC0zMzAsNiArMzQxLDE0IEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAg
IFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBhcnJheUJ1ZmZlclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQ
cm90b3R5cGUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAg
IFN0cnVjdHVyZSogdHlwZWRBcnJheVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3Ry
dWN0dXJlLmdldCgpOworICAgIH0KIAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lh
bDo6UG9pbnRlciBwb2ludGVyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJKU0ludDhBcnJheV9oIgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFy
cmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMy
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5
X2giCisjZGVmaW5lICJKU0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8o
dHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0VfU19J
TkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKElu
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENs
YW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2
NEFycmF5KTsKK01BS0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVj
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9yc19oCisKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+IEpT
SW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OEFycmF5PiBKU1VpbnQ4
QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MTZBcnJh
eT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlDb25zdHJ1Y3RvcjsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJBcnJh
eT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rv
cjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0RhdGFWaWV3
PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAg
dGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19pbmZvID0g
eyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKUyMjdHlwZSMjUHJvdG90eXBlKX0KKworTUFLRV9TX0lORk8oSW50OEFy
cmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJBcnJheSk7
CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZEFycmF5
KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFycmF5KTsK
K01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJyYXkpOwor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisj
ZGVmaW5lIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PEpTSW50OEFycmF5PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4g
SlNJbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50
OENsYW1wZWRBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJB
cnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8
SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQ
cm90b3R5cGU7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5
UHJvdG90eXBlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUgIkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBs
YXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNBcnJheTo6c19pbmZvID0geyN0eXBlICJB
cnJheSIsICZKUyMjdHlwZSMjQXJyYXk6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKUyMjdHlwZSMjQXJyYXkpfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0VfU19J
TkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsKK01B
S0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9TX0lO
Rk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2NCk7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5c19oCisKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9y
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpT
VWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFw
dG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8Rmxv
YXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiAiSlNVaW50OEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUg
IkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4
Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4Q2xh
bXBlZEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4Q2xhbXBlZEFycmF5X2giCisKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDE2QXJyYXlfaCIKKyNk
ZWZpbmUgIkpTVWludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKwor
I2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiAiSlNVaW50MzJBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MzJBcnJheV9oIgorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQ
YXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZm
ZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sK
KyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0
ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBnbG9iYWxPYmpl
Y3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBw
ZXIgPSBQYXNzV2VhazxKU0FycmF5QnVmZmVyPihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gK
KworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVyIHVzZWQgZm9y
IG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVmZmVycyBhbmQg
dGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAorLy8gV2Vi
Q29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3RhbmRhbG9u
ZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBKU0FycmF5QnVm
ZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8KKy8vIC0g
SWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFmdGVyIG9uZSBo
YWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRoZW4geW91
IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRl
eGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAgIHJldHVybiBoYXNJbmRleGVk
UHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzVHlwZWRWaWV3KG1f
Y2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKLSAgICBib29s
IGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOwotICAgIH0KKyAgICBi
b29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3Q7CiAgICAgCiAg
ICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2RlZmluZSBTdHJ1Y3R1cmVJ
bmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIApAQCAtMTA0LDYg
KzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jCiAgICAg
ICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CiB9
CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxs
KiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghaXNUeXBlZFZpZXco
bV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2Vs
bCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGluZSBib29sIFN0cnVj
dHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFk
YXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5QWRhcHRv
cnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVB
cmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5
cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJn
IFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisKKyAg
ICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50
MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5
cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBl
QXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBGbG9hdFR5cGVk
QXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZp
ZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBl
OworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVB
cmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoUU5hTik7
CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7
CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50
OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVjdCBVaW50MTZBZGFw
dG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1
Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdl
bmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhB
ZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFk
YXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFk
YXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRv
cj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0
cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50OF90LCBJbnQ4
QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IEludDE2QWRhcHRvciA6
IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJheSwgSlNJbnQxNkFy
cmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVk
QXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJheSwgVHlwZUludDMy
PiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1
aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4geyB9Oworc3RydWN0
IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQxNl90LCBVaW50
MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3RydWN0IFVpbnQzMkFk
YXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBVaW50MzJBcnJheSwg
SlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0MzJBZGFwdG9yIDog
RmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJh
eSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6IEZsb2F0VHlwZWRB
cnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxv
YXQ2ND4geyB9OworCitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvciB7CisgICAgdHlwZWRlZiB1
aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBWaWV3VHlwZTsKKyAg
ICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29u
c3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAg
ICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1
ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisg
ICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJu
IHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
anNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91Ymxl
KHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFt
cChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1
cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0
b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJy
YXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJyYXlDb250
cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29udHJvbGxl
cl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsK
KworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlZEFy
cmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250cm9sbGVyKCk7Cisg
ICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCosIEFycmF5
QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotI2RlZmlu
ZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xh
c3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFycmF5Tm9uZSwKLSAg
ICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAgVHlwZWRBcnJheUlu
dDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWludDhDbGFtcGVkLAot
ICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwKLSAgICBUeXBlZEFy
cmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3RydWN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0gICAgICAgIDogbV9j
bGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAgICAgICAgLCBtX2xl
bmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVu
Z3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKLSAgICAgICAgLCBt
X3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldChs
ZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJ
bmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zm
c2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRB
cnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGlu
ZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5nCi19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuICZK
U0ludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4g
JkpTVWludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgcmV0dXJuICZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgIHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBl
VWludDE2OgorICAgICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNl
IFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBj
YXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50MzJBcnJheTo6c19pbmZvOwor
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAmSlNGbG9hdDMyQXJyYXk6OnNf
aW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gJkpTRmxvYXQ2NEFy
cmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAmSlNE
YXRhVmlldzo6c19pbmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJOb3RUeXBlZEFycmF5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICBvdXQucHJp
bnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIG91
dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDMy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9h
dDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRGF0YVZpZXci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVf
aAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRB
cnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVp
bnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50
MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisg
ICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9P
Rl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5k
ZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6
CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxl
bWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6
CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNh
c2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUlu
dDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUp
OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAg
Y2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlw
ZVVpbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZs
b2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQ2xh
bXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5cGVVaW50
OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlwZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19oCisjZGVmaW5lIFR5cGVkQXJy
YXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2
NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgVWludDhBcnJheV9oCi0jZGVmaW5lIFVpbnQ4QXJyYXlfaAorI2lmbmRlZiAiVWludDhB
cnJheV9oIgorI2RlZmluZSAiVWludDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0K
LWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFy
cmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBk
aXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAg
ICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbmxp
bmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19
OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWlu
dDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5
OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVh
dGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5p
bml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1VaW50OEFycmF5OjpVaW50OEFy
cmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVp
bnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFy
cmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1
YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLXVzaW5nIEpTQzo6VWludDhBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgog
CiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAog
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDhDbGFtcGVk
QXJyYXlfaAotI2RlZmluZSBVaW50OENsYW1wZWRBcnJheV9oCisjaWZuZGVmICJVaW50OENsYW1w
ZWRBcnJheV9oIgorI2RlZmluZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKIAotI2luY2x1ZGUgIlVp
bnQ4QXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgVWludDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0
aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhl
c2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4K
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQg
dG8gcG90ZW50aWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMg
Y3JlYXRlZCB1bmluaXRpYWxpemVkIC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhz
Ci0gICAgLy8gemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJv
RmlsbCgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBp
bmxpbmUgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRB
cnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJy
YXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6
Onplcm9GaWxsKCkKLXsKLSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVp
bnQ4Q2xhbXBlZEFycmF5OjpzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAg
ICBpZiAoaW5kZXggPj0gbV9sZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjpp
c25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBp
ZiAodmFsdWUgPiAyNTUpCi0gICAgICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0g
PSBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRB
cnJheTo6VWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4o
c3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50
OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Vp
bnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDE2QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
ICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQxNkFycmF5X2gKLSNkZWZpbmUgVWludDE2QXJy
YXlfaAorI2lmbmRlZiAiVWludDE2QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQxNkFycmF5X2giCiAK
LSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdy
YWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgdWludDE2X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlw
ZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTx1aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWlu
dDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDE2QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5k
IGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDE2
QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1
aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZB
cnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFs
aXplZDxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDE2QXJyYXk6OlVpbnQxNkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1
YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVp
bnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxVaW50MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQxNkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCiAKICNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCAr
MTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkg
KzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQzMkFycmF5X2gK
LSNkZWZpbmUgVWludDMyQXJyYXlfaAorI2lmbmRlZiAiVWludDMyQXJyYXlfaCIKKyNkZWZpbmUg
IlVpbnQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDMyQXJy
YXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4gewotcHVibGljOgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVh
dGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBi
ZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRv
IEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0gICAgdXNpbmcg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWlu
dDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PjsKLX07Ci0K
LVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50
MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJy
YXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGFy
cmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJf
dD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDMy
QXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50MzJBcnJheT4oc3RhcnQsIGVu
ZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQzMkFycmF5Owor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50MzJBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhw
Q2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUuaCIKICNp
bmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0cnVj
dG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3RvdHlwZVRhYmxlOwogZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFz
aFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0YVZpZXdUYWJsZTsK
IGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJs
ZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZXJyb3JQcm90
b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNo
VGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGFycmF5UHJvdG90eXBl
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90b3R5cGVUYWJsZSkpCiAgICAg
LCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6Ym9vbGVhblBy
b3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRh
YmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGVycm9yUHJvdG90eXBlVGFi
bGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5cGVUYWJsZSkpCkBAIC0yNTgs
NiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6
TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRoaXMg
bGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBpbml0aWFsaXphdGlvbiBp
dHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVkQXJyYXlDb250cm9sbGVy
ID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQogCiBWTTo6
flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAgICBhcnJheVByb3RvdHlwZVRh
YmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgZGF0
YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZXJyb3JQcm90
b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICszMTQsNyBAQCBWTTo6flZNKCkK
ICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlDb25zdHJ1Y3RvclRh
YmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5UHJvdG90
eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYm9vbGVh
blByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
ZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVD
b25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgot
I2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtSYW5kb20u
aCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY5LDEzICs2OSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNoZTsKICAgICBjbGFzcyBDb21t
b25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgRmxvYXQzMkFy
cmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFzcyBIYW5kbGVTdGFjazsKICAg
ICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50OEFycmF5OwotICAgIGNsYXNz
IEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAgICBjbGFzcyBJbnRlcnByZXRl
cjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTkz
LDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
ICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBVaW50OEFycmF5OwotICAgIGNs
YXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQxNkFycmF5OwotICAgIGNsYXNz
IFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogICAgIGNsYXNzIFVu
bGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
YXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBib29sZWFuUHJv
dG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJsZTsKICAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQ
cm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQ
cm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRy
PFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOwogICAgICAgICBS
ZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3Ig
bV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCkgeyByZXR1cm4g
bV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51bWJlck9mTmV3U3RyaW5nc1Rv
SGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAwOyB9CiAKLSNkZWZpbmUgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6ZWRUeXBlKSBcCi0gICAgICAg
IHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBjYXBpdGFsaXplZFR5cGUj
I0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIFwKLSAgICAg
ICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9j
bGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyA9PSBkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8jI3R5cGUjI0FycmF5RGVzY3Jp
cHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VSVChtXyMjdHlwZSMjQXJyYXlE
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwKLSAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRvcigpIGNvbnN0IHsgQVNTRVJU
KG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyByZXR1cm4gbV8jI3R5cGUj
I0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQxNiwg
SW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQzMiwgSW50MzIp
OwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OCwgVWludDgpOwotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENsYW1wZWQsIFVpbnQ4Q2xhbXBl
ZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQxNiwgVWludDE2KTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDMyLCBVaW50MzIpOwotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMyLCBGbG9hdDMyKTsKLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwgRmxvYXQ2NCk7Ci0jdW5kZWYg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihUeXBlZEFycmF5VHlwZSB0eXBl
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50
OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQzMkFy
cmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDg6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5
RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYXBpTG9j
ay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNsdXNpdmVUaHJlYWQgPT0gY3Vy
cmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAgIE93blB0cjxDb2RlQ2FjaGU+
IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9leGNl
cHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhBcnJheURl
c2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJheURlc2Ny
aXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURlc2NyaXB0
b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2NyaXB0b3I7
Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVzY3JpcHRv
cjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MzJBcnJheURlc2NyaXB0b3I7
Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3JpcHRvcjsK
LSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlwdG9yOwog
ICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3
MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87
IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQx
N0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CisJCTBGMkI2
NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlw
Qnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOEYyQjkxMTcyRTAw
RkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBp
bGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3Bw
ICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZB
NDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
bGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0Yx
OTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3
MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51
bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNvZGVyLmggKi8s
CisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmgg
Ki8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8sCiAJCQkJQThB
NDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQlBOEE0NzI4
MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oICovLApAQCAtNjQ4LDYgKzY1
Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5j
cHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5o
ICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBGaXhlZEFycmF5LmggKi8sCisJ
CQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovLAogCQkJCUE4QTQ3
MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJCQkJQThBNDcyQTcxNTFBODI1
QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFEOEI5RDE3MzE4Nzk4MDAxNDFE
QTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5NCw2ICsxMDAwLDcgQEAKIAkJ
CQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZGIC8qIE93bkFycmF5UHRyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZDMTUxQTgyNUIwMDQxMjNG
RiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZEMTUxQTgyNUIwMDQxMjNG
RiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1Nyw2ICsx
MDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNzE3
QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0
OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1By
aW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3Vu
dGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJl
ZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAor
Ly8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBv
ZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2Vw
dCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVk
IC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRp
bWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJl
ZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbnQgPSAy
OworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291
bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rl
ZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVm
ZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3Vu
dCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9
CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQg
Jj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxl
UmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZD
b3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJl
ZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJy
ZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZCh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxU
Kj4odGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRl
ZCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJs
ZVJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlw
Qnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVu
ZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwor
I2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWlu
dDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYg
MHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitp
bmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAo
KHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZm
MDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAg
IHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZs
aXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAw
MDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAw
ZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxs
dSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwg
OCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8
ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFs
dWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQoreworICAgIGlmIChzaXplb2YodmFs
dWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9
PSAyKSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAg
ICAgICB1aW50MTZfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2
YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVy
biB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KSB7CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MzJf
dCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAg
ICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFs
OworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KSB7CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50NjRfdCB3b3JkOworICAg
ICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0g
ZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5k
aWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7CisKKyNlbmRpZiAvLyBGbGlwQnl0ZXNfaAorCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNw
YWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7
Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0
aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tl
ZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwot
ICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdl
dCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7
Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi0gICAgOiBBcnJheUJ1
ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5n
dGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVuZGlh
bikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwotI2Vs
c2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBz
d2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFyIHRlbXAgPSAqcDsKLSAgICAq
cCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMTZC
aXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKLX0KLQotc3RhdGljIHZv
aWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAz
KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5
dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKLSAgICBz
d2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsKLSAg
ICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzSWZO
ZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKLXsKLSAg
ICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8g
ZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMTZC
aXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBmbGlwQnl0
ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAg
IGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsK
LSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1
cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgbG9h
ZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2YoVCkp
OwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVu
ZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYmV5b25kUmFu
Z2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRoZSBk
YXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVj
dHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCi0gICAgVmFsdWU8VD4g
dGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7Ci0gICAgZmxpcEJ5dGVzSWZO
ZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgbWVt
Y3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRlbXBW
YWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXRE
YXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQotdWludDhfdCBEYXRhVmll
dzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQot
aW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDE2
X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MTZfdCBEYXRhVmll
dzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJu
IGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1m
bG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZmxvYXQ+
KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6Omdl
dEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRh
PGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMy
X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRE
YXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxk
b3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBE
YXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAg
IG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RGF0YVZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0KLSNpbmNsdWRlIDxydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0
YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MTZfdCBnZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVp
bnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDMy
X3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJs
ZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zm
c2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0
VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2
b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0
MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
bmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBi
eXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBi
eXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0
aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YVZpZXdf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208483</attachid>
            <date>2013-08-10 16:59:57 -0700</date>
            <delta_ts>2013-08-10 17:21:07 -0700</delta_ts>
            <desc>jsc debug builds</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>438516</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVj
dG9yLmx1dC5oIFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlw
ZS5sdXQuaCBcCisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVj
dC5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAu
aCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShy
ZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0
dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKU0NUeXBlZEFycmF5U3R1YnNf
aAotI2RlZmluZSBKU0NUeXBlZEFycmF5U3R1YnNfaAotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5
LmgiCi0jaW5jbHVkZSAiRmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MTZBcnJheS5oIgot
I2luY2x1ZGUgIkludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKLSNpbmNsdWRl
ICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgot
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJVaW50MTZBcnJheS5oIgotI2luY2x1
ZGUgIlVpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgIlVp
bnQ4Q2xhbXBlZEFycmF5LmgiCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLSAgICAKLSNkZWZpbmUgVFlQRURfQVJSQVkobmFtZSwgdHlwZSkgXAotY2xhc3Mg
SlMjI25hbWUjI0FycmF5IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsgXAotcHVibGlj
OiBcCi0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCi0gICAgc3RhdGlj
IEpTIyNuYW1lIyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwK
LSAgICB7IFwKLSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXAp
KSBKUyMjbmFtZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAotICAgICAgICBy
ZXR1cm4gcHRyOyBcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1wKLSAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTtcCi0gICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wp
O1wKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1wKLVwKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKLSAgICB7
XAotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pO1wKLSAgICB9XAotXAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5
TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpO1wKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1wKLVwKLSAgICBzdGF0aWMgY29uc3Qg
SlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OlR5cGVkQXJy
YXkjI25hbWU7XAotICAgIHVpbnQzMl90IG1fc3RvcmFnZUxlbmd0aDtcCi0gICAgdHlwZSogbV9z
dG9yYWdlO1wKLSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1wbDtcCi1wcm90ZWN0ZWQ6XAot
ICAgIEpTIyNuYW1lIyNBcnJheShKU0M6OlN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFz
c1JlZlB0cjxuYW1lIyNBcnJheT4pO1wKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTtcCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90
QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsgXAotICAgIEpTQzo6SlNWYWx1ZSBnZXRC
eUluZGV4KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1wKLSAgICB2b2lkIGluZGV4
U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XAot
fTtcCi1cCi1jb25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNuYW1l
ICJBcnJheSIgLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyNu
YW1lIyNBcnJheSkgfTtcCi1cCi1KUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxuYW1lIyNBcnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3Ry
dWN0dXJlKVwKLSAgICAsIG1faW1wbChpbXBsKVwKLXtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMj
QXJyYXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcCi17XAotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTtcCi0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlMjI25hbWUj
I0FycmF5OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFn
ZSksIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpO1wK
LSAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3Jp
cHRvcik7XAotICAgIG1fc3RvcmFnZSA9IG1faW1wbC0+ZGF0YSgpO1wKLSAgICBtX3N0b3JhZ2VM
ZW5ndGggPSBtX2ltcGwtPmxlbmd0aCgpO1wKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOyBcCi0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcCi19
XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3Bl
cnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFn
ZUxlbmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5J
bmRleCk7XAotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhl
YywgaW5kZXgpKTtcCi0gICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
O1wKLX1cCi1cCi1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVwKLXtcCi0gICAgSlMjI25hbWUj
I0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4
IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgRG9udERlbGV0ZSk7
XAotICAgICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTtcCi19XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICBpZiAocHJvcGVydHlO
YW1lIDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBzbG90LnNldFZh
bHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XAotICAgICAg
ICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0Fy
cmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAg
IEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihj
ZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZv
KTtcCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7XAotICAgICAgICB0aGlzT2Jq
ZWN0LT5pbmRleFNldHRlcihleGVjLCBpbmRleCwgdmFsdWUpO1wKLSAgICAgICAgcmV0dXJuO1wK
LSAgICB9XAotICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmluZGV4U2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKSBc
Ci17XAotICAgIG1faW1wbC0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XAotfVwK
LVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXAot
e1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0Fy
cmF5Kj4oY2VsbCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
JnNfaW5mbyk7XAotICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUpO1wKLSAgICByZXR1cm47XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVwKLXtc
Ci0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJh
eSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
JnNfaW5mbyk7XAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3N0
b3JhZ2VMZW5ndGg7ICsraSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSkpO1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpTIyNuYW1l
IyNBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17XAotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7XAotICAgIHR5cGUgcmVz
dWx0ID0gbV9pbXBsLT5pdGVtKGluZGV4KTtcCi0gICAgaWYgKHN0ZDo6aXNuYW4oKGRvdWJsZSly
ZXN1bHQpKVwKLSAgICAgICAgcmV0dXJuIGpzTmFOKCk7XAotICAgIHJldHVybiBKU1ZhbHVlKHJl
c3VsdCk7XAotfVwKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTIyNuYW1lIyNBcnJheShFeGVjU3RhdGUqIGNhbGxGcmFtZSkgeyBcCi0gICAgaWYgKGNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpIDwgMSkgXAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOyBcCi0gICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUtPmFy
Z3VtZW50KDApLnRvSW50MzIoY2FsbEZyYW1lKTsgXAotICAgIGlmIChsZW5ndGggPCAwKSBcCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNhbGxG
cmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7IFwKLSAgICBSZWZQdHI8
bmFtZSMjQXJyYXk+IGJ1ZmZlciA9IG5hbWUjI0FycmF5OjpjcmVhdGUobGVuZ3RoKTsgXAotICAg
IGlmICghYnVmZmVyKSBcCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBj
cmVhdGVSYW5nZUVycm9yKGNhbGxGcmFtZSwgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21h
bGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOyBcCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKUyMjbmFtZSMjQXJyYXk6OmNyZWF0ZShzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBidWZmZXIucmVsZWFzZSgpKSk7IFwKLX0KLQotVFlQRURfQVJSQVko
VWludDgsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDhDbGFtcGVkLCB1aW50OF90KTsKLVRZ
UEVEX0FSUkFZKFVpbnQxNiwgdWludDE2X3QpOwotVFlQRURfQVJSQVkoVWludDMyLCB1aW50MzJf
dCk7Ci1UWVBFRF9BUlJBWShJbnQ4LCBpbnQ4X3QpOwotVFlQRURfQVJSQVkoSW50MTYsIGludDE2
X3QpOwotVFlQRURfQVJSQVkoSW50MzIsIGludDMyX3QpOwotVFlQRURfQVJSQVkoRmxvYXQzMiwg
ZmxvYXQpOwotVFlQRURfQVJSQVkoRmxvYXQ2NCwgZG91YmxlKTsKLQotfQotCi0jZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0NUeXBlZEFycmF5U3R1YnMuaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNQcm94
eS5oIgpAQCAtMjM4LDE2ICsyMzcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAiY2xlYXJTYW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEp
OwogI2VuZGlmCiAgICAgICAgIAotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0s
ICJVaW50OEFycmF5IiwgY29uc3RydWN0SlNVaW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29u
c3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhDbGFtcGVkQXJyYXkiLCBjb25zdHJ1Y3RKU1Vp
bnQ4Q2xhbXBlZEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZt
LCAiVWludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQz
MkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50OEFy
cmF5IiwgY29uc3RydWN0SlNJbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxl
RnVuY3Rpb24odm0sICJJbnQxNkFycmF5IiwgY29uc3RydWN0SlNJbnQxNkFycmF5LCAxKTsKLSAg
ICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MzJBcnJheSIsIGNvbnN0cnVj
dEpTSW50MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IkZsb2F0MzJBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQ2NEFycmF5IiwgY29uc3RydWN0SlNGbG9h
dDY0QXJyYXksIDEpOwotCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShnbG9iYWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
Z3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChn
bG9iYWxFeGVjKCksIGksIGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1lbnRzW2ldKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2
MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZD
MzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZB
RjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQjE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUxN0I2QjVB
QjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAg
Ki87IH07CisJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2QjVBQjAw
QTdBRTNGIC8qIERhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUxMTdC
NkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZCNUFCMDBB
N0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNw
cCAqLzsgfTsKKwkJMEYyQjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLzsgfTsK
KwkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI5MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5jcHAgKi87IH07CisJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Rh
dGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYy
QjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJC
NjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9h
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY0
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLzsgfTsK
KwkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMu
Y3BwICovOyB9OworCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1Vp
bnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ0MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQxN0I2QjVB
QjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA1MTdC
NkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVBQjAwQTdB
RTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9y
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJCNjcwODE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAg
Ki87IH07CisJCTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REQxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERG
R0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9
OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0
aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OSw3ICszOTksNiBAQAog
CQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBCRjAwQkI3
MjJDIC8qIERGR0NvbW1vbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEy
RjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEwQTM0MTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
RUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAw
QUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1h
Y3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87
IH07CiAJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUZDOUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAq
LzsgfTsKIAkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNCw4ICs4
NzMsNiBAQAogCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3QURCNUYz
MDA1QUIxNzQgLyogSW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJD
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFC
MTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyRjE3
QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURCNUYzMDA1
QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1w
ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTEyMDcsNiArMTI1NCw1NiBAQAogCQkwRjIzNUJFQTE3MTc4RTczMDA2
OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQ
cmVwYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlB
bGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZn
L0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQTE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERh
dGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFWaWV3
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVBQjAwQTdB
RTNGIC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFW
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Rh
dGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQz
MkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJ
bnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5
cGVkQXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQyMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQz
MkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdCNkI1QUIw
MEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9ycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJy
YXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNw
cDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFF
ODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU0OCw2IEBACiAJCTBG
RUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25E
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGgg
PSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VD
QjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1i
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5NzgsNiBAQAogCQlBNzU3MDZE
RDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkw
NTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjIsNiBAQAogCQlBN0E4QUYyQjE3
QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYy
QzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYz
MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTMsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlC
MEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAv
KiBjb25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlw
dENvcmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlw
ZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2
ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8q
IEFQSSAqLywKQEAgLTI1NTYsNiArMjY0OCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAv
KiBHQ0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJ
CUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlE
MTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODI4LDYgKzI5MjQs
NTIgQEAKIAkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3
QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8q
IERhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oICovLAorCQkJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAorCQkJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCisJCQkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJMEYyQjY2QjcxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oICovLAorCQkJCTBGMkI2NkI4MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJC
NjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovLAorCQkJ
CTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8sCisJ
CQkJMEYyQjY2QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi8sCisJ
CQkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
ICovLAorCQkJCTBGMkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywK
KwkJCQkwRjJCNjZCRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oICovLAorCQkJCTBG
MkI2NkJGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCAqLywKKwkJ
CQkwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovLAor
CQkJCTBGMkI2NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAorCQkJ
CTBGMkI2NkMyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAorCQkJCTBG
MkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovLAor
CQkJCTBGMkI2NkM0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovLAorCQkJ
CTBGMkI2NkM3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovLAorCQkJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
SW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZE
MDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEMjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZENzE3QjZC
NUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjJC
NjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJMEYy
QjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJ
CQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywK
KwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJCQkw
RjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJCTBG
MkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAogCQkJCUJDRjYw
NTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAz
RUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZD
OSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAtMjkyMCw3ICszMDYyLDYgQEAKIAkJCQlBN0E4QUYy
QzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1
RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFC
MTc0IC8qIEludDhBcnJheS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2Mjkw
MDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5
NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMzA3OCw4ICszMjE5
LDYgQEAKIAkJCQkxNEEzOTZBNjBDRDI5MzMxMDBCNUI0RkYgLyogU3ltYm9sVGFibGUuaCAqLywK
IAkJCQk1RDUzNzI2RDBFMUM1NDZCMDAyMUU1NDkgLyogVHJhY2luZy5kICovLAogCQkJCTVENTM3
MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8sCi0JCQkJQTdBOEFGMkYxN0FEQjVG
MzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggKi8sCi0JCQkJMEZFQjNFQ0IxNjIzN0Y0NzAw
QUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi8sCiAJCQkJQTdBOEFGMzIxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNE
ODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdBREI1RjMwMDVB
QjE3NCAvKiBVaW50MzJBcnJheS5oICovLApAQCAtMzUzOCwxMiArMzY3NywxNSBAQAogCQkJCUJD
MThDNTI0MEUxNkZDOEEwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRh
Vmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNTEwMTU2QkRF
MDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlv
bk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdD
IC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODE2RTFDMTU0Q0M1NkMwMEI4
MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2
RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZl
bnRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NTUsNiArMzY5Nyw3IEBACiAJCQkJQTdDMUVB
RUYxNzk4N0FCNjAwMjk5REIyIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk1RTNCQzA1MEUxQUU2ODIwMEIyRDFDMSAvKiBDYWxsSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3
REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0I5MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5m
by5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTY2LDYgKzM3MDksNyBAQAogCQkJCTg2RTExNkIxMEZF
NzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3
RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQTcxNEJDRjUwNzAw
ODg1QjRGIC8qIENvZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNE
MDBCMzQ0NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVG
MTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApA
QCAtMzU3Niw2ICszNzIwLDcgQEAKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29u
Y3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVC
RTc4NSAvKiBDb25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNjBFMTZGNUNEMDBCMzQ0NjAgLyogQ29u
c3RydWN0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5
IC8qIENvcGllZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDOEQwMzAxNEEzQ0VG
QzAwNTc4RTY1IC8qIENvcGllZEJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MDQsNiArMzc0
OSw3IEBACiAJCQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAvKiBE
RkdBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNG
IC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFG
NDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
MzYxNyw2ICszNzYzLDcgQEAKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxv
Y2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODM2NEI3MTY0QjBDMTEwMDUz
MzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1
MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0Qy
RjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5
NEExNEMzQ0QyOTAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjUwLDYgKzM3OTcsNyBAQAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkExN0EwQjhDQzAwNzczQUQ4
IC8qIERGR0ZsdXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkFFNkM0RDEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dy
YXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTgsNiArMzgwNiw3IEBACiAJCQkJMEZFQTBBMzQx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5
RENDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc4QTk3NzkxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpT
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBE
RkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MSw2
ICszODIwLDcgQEAKIAkJCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTU4MUJCMTUwRTk1MzAwMEI5QTJEOSAvKiBE
RkdOb2RlRmxhZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QTU4MUJDMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFQzlERDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2ODQsNiArMzgzNCw4IEBACiAJCQkJ
MEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc3QjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBC
MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBE
RkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMzY5Myw2ICszODQ1LDcgQEAKIAkJ
CQlBNzQxMDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFE
NyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFG
MDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAw
NTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
OUREMzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzcyNiw2ICszODc5LDcgQEAKIAkJCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyog
RXhlY3V0aW9uSGFybmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAw
RjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJC
MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRM
QWJicmV2aWF0ZWRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzQ2LDYgKzM5MDAsNyBAQAog
CQkJCTBGRUEwQTJDMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyog
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDgxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBMEEwRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3ODExNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZUTExpbmsuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzc5NCw3ICszOTQ5LDYgQEAKIAkJCQlBN0E4QUYzQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0MxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNBMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QThBRjNE
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVy
bmFsRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYx
OSAvKiBJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODEzLDYgKzM5NjcsNyBAQAog
CQkJCTBGNzY2RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1
YnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5
cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RTE3NDM0M0NDMDBBMzJFMjUg
LyogSklUU3R1YnNBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEz
MkUyNSAvKiBKSVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E0QUUwRDE3OTcz
QjREMDA1NjEyQjEgLyogSklUU3R1YnNNSVBTLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NDAsNiAr
Mzk5NSw3IEBACiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRl
eHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2
RjVDRDAwQjM0NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0Qx
RDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBp
biBIZWFkZXJzICovLApAQCAtMzg1NSw2ICs0MDExLDcgQEAKIAkJCQlCQzE4QzQyMzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0
MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0
MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdFJlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2OTU3IC8qIEpTT2JqZWN0UmVmUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODY2LDYgKzQwMjMsNyBAQAogCQkJCTE0ODc0QUU2
MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRB
QzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NUUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4ODQsNiArNDA0Miw3IEBACiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBB
IC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8q
IEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYy
MTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zOTE0LDYgKzQwNzMsNyBAQAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFE
QjUgLyogTG9jYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURC
NSAvKiBMb2NhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGQjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQzNzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBDRDE0QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRCNzIzQjgxMkQ3REE2RjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTI2LDYgKzQwODYsNyBAQAogCQkJCTg2MDE2MUU0MEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAyMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEz
NTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0
OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zOTM0LDE0ICs0MDk1LDE3IEBACiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1h
cmtTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVD
RDAwQjM0NDYwIC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVFMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzUyQTBFMTZGQ0MyMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkwMjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTIx
MUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RUJGMzAwMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUJGMzAyMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lSW5zdGFuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUJGMzA0MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURC
MDAwRjkyOTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzk3MSw2ICs0MTM1LDcgQEAKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEg
LyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjlGQzhDNDE0RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFy
Z2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVG
Mjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1
MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1
NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMzk5OSw5ICs0MTY0LDExIEBACiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFBy
b3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcw
MDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFBy
b3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA1MTdCNkI1
QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLApAQCAtNDAyNCw2ICs0MTkxLDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBB
QzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAw
NDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDM2LDcgKzQyMDQs
OSBAQAogCQkJCTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3Rh
dGljUHJvcGVydHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4
RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZGMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eVByb3RvdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBTdHJpbmdPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZBMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTI2
MEUxNkZDQTcwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTQwNDgsNiArNDIxOCw4IEBACiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0
cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBC
M0FFQTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjkzMzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEEx
RjAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDU3LDkgKzQyMjksMTAgQEAK
IAkJCQkwRjU3MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVE
NTM3MjZGMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
N0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGRUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRD
QjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRD
QjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVC
RTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDg5LDYg
KzQ2NjIsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1
Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyog
RGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1
QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3Ry
YWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY4OCw3
IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFr
aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMy
IC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3Ry
dWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQz
LDYgKzQ3MTgsNyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09T
UkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5
Miw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0
YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0
QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3
QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUz
MTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDY2OCwxMSArNDg0NSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAv
KiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEw
MDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBE
QUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmpl
Y3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8q
IEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFF
ODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZC
MERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4NjksNyBAQAogCQkJCUE3NDgyQjk0
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVy
TWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEw
N0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTIsNyBAQAogCQkJCTg2QzU2OEUw
MTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJC
OTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyArNDk0MywyMSBAQAogCQkJCTE0NzRDMzNDMTZB
QTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVn
RXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVG
IC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEw
N0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1h
dGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMw
OTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5n
VG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyog
U2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0OTkwLDcgQEAKIAkJCQlF
MThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0
QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRF
N0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAK
IGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0
b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGlt
aXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAg
aW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5
TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8p
CiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAg
IGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJu
IEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5
SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5
OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAg
ICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFt
cGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQx
NjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVp
bnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAg
ICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2
NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlu
bGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGlu
ZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1v
ZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAg
ICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1
cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJy
YXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+
aXNTdWJDbGFzc09mKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gU3BlY0Z1
bmN0aW9uOwogICAgIAotICAgIGlmIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAh
PSBUeXBlZEFycmF5Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAg
ICByZXR1cm4gU3BlY0ludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0g
ICAgICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJh
eUludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5OwotICAgICAgICBjYXNl
IFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKLSAg
ICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgcmV0dXJuIFNw
ZWNVaW50OENsYW1wZWRBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAg
ICAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5
VWludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKLSAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgcmV0dXJuIFNw
ZWNGbG9hdDY0QXJyYXk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsK
KyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFycmF5OworICAgIGNhc2Ug
VHlwZUludDMyOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7CisgICAgY2FzZSBUeXBl
VWludDg6CisgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50
OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OworICAgIGNhc2Ug
VHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKKyAgICBjYXNlIFR5
cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJD
bGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1
OCwzMiBAQCBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJhCiAgICAgfQog
fQogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZUludDg7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICBy
ZXR1cm4gVHlwZUludDMyOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlVWludDg7CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiB2b2lkIEFycmF5TW9kZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCh0eXBlKCksIGFycmF5
Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29udmVyc2lvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDYgKzEwNCw4IEBAIGNvbnN0IGNoYXIqIGFycmF5Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2wKIGNv
bnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOwog
Y29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOwog
CitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlKTsKKwogY2xhc3Mg
QXJyYXlNb2RlIHsKIHB1YmxpYzoKICAgICBBcnJheU1vZGUoKQpAQCAtMzgwLDYgKzM4MiwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6OlN0cmluZzsKICAgICB9
CiAgICAgCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvVHlwZWRBcnJheVR5cGUodHlwZSgpKTsKKyAgICB9CisgICAgCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjY3LDM3ICsyNjY3LDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNp
emVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9h
dDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5
cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODczLDQ2ICsy
ODQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4
X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXks
IENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+Zmxv
YXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7Cisg
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlw
ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsK
KyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgwLDM3ICsyNTgwLDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50
OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7
CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUp
OworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODcxLDQ2ICsyODQ3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50
MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90
KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWlu
dDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9h
dCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAg
ICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9k
ZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogCiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDMyICs1ODMsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgfQogfQogICAgIAot
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5
cGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwot
ICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+
aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAg
ICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+
dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0o
KS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsK
LSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0o
KS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBT
bG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5TW9kZSBhcnJheU1v
ZGUsIEluZGV4aW5nVHlwZSBzaGFwZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNs
YXNzKCkpIHsKQEAgLTY5NCw4ICs2NjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0Fy
cmF5KE5vZGUqIG5vCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihu
b2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgCiAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1
cm47CkBAIC03MjcsMjIgKzY5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5
KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENs
YXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBB
cnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5Ogot
ICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJ
bmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRD
bGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQo
ZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI1OTQsOCAr
MjU1NywxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0y
NjEyLDE2ICsyNTc3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
SW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNp
Z25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAg
IG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJl
c3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25l
ZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQog
ICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3Vs
dFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzMiwxMiArMjU5OCwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JB
U0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNp
Z25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2ln
bmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAm
JiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92
ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWlu
dDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKQEAgLTI2NTIsOCArMjYxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2Us
IEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAg
ICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3MCw4ICsyNjM4LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAg
ICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJU
KGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0g
Y2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CkBAIC0yNjg2LDggKzI2NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAg
ICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAg
ICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAg
ICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI2OTYs
OCArMjY2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAg
ICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNl
KTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0yNzE3LDcgKzI2ODUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAg
ICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNp
Z25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWdu
ZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5j
YXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFp
bGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9B
c3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0Miw5ICsyNzEwLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1
ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
czsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkp
OworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAg
ICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMjc2Miw4ICsyNzMwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5v
ZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlw
ZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CkBAIC0yNzc5LDggKzI3NDksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAg
c3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5s
b2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0
LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDEsOCAr
Mjc3MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9k
ZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkp
OworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgIApAQCAtMjgxNywxMCArMjc5MCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5v
ZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5k
czsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkp
OworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRz
ID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAg
IHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0
Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2Ny
YXRjaEZQUik7CkBAIC00MDI2LDggKzQwMDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJy
YXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9y
YWdlUmVnKTsKQEAgLTQwNDEsOCArNDAxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwg
c3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUo
KS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIApAQCAtNDE0Myw4ICs0MTE5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJy
YXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
ZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQog
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6
SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE4NCwxNiArNDE1OCwxNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVH
ZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZh
dWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRl
c2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0K
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2Rl
KiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJv
cGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBU
eXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9k
ZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZv
aWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9D
aGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUq
KTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3Bl
Y3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxl
cjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4
aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4
aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewot
ICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBl
ZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdD
Rm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsK
K3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9o
ZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgp
OworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBt
X2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBI
ZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVy
R0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5n
UmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdD
SW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCisj
aW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworCisvLyBBIEMtaGVhcC1h
bGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnRz
CisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBmcm9tIHRoZSBoZWFwLCB3aGljaCBhcmUg
dHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVjdCBrbm93cyBpdHMgaW5jb21pbmcgcmVm
ZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhhdmUgdGhlIGludmFyaWFudCB0aGF0IHRo
ZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50byB0aGUgR0MKKy8vIGhlYXAuCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZCA6IHB1YmxpYyBE
ZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50
ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAgeworICAgICAgICBpZiAoaGFzVmVjdG9y
T2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICB9Cisg
ICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBKU0Nl
bGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHNpbmds
ZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPmF0KGlu
ZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVh
IHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYgdGhpcworICAgIC8vIHJldHVybnMgdHJ1
ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgR0MncyBsaXN0Lgor
ICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3Rl
YWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqKTsKKyAgICAKKyAgICAv
LyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBp
bmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZhbHNlIGlmIHdlIGRvbid0LiBUaGlzIG1h
eSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQgaWYgaXQgZG9lcyBzbywgdGhpcyByZXR1
cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3YW50CisgICAgLy8gdG8gdXNlIHRoaXMg
d2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZmFsc2UgdW5sZXNzCisgICAg
Ly8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBsaXN0LgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29sIGZpbHRlckluY29taW5nUmVmZXJlbmNl
cyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRw
dHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsgfQorICAgIAorICAgIGJvb2wgaGFzVmVj
dG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9lbmNvZGVkUG9pbnRlciAmIHNpbmdsZXRv
bkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29taW5nKCkgY29uc3QgeyByZXR1cm4gISFt
X2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNTaW5nbGV0b24oKSBjb25zdCB7IHJldHVy
biBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JPZkNlbGxzKCk7IH0KKyAgICAKKyAgICBK
U0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzU2luZ2xl
dG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBv
aW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEpTQ2Vs
bCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNWZWN0
b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwq
Pio+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBTaW5nbGV0b24gZmxh
ZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAgIC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBz
ZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIGNlbGxzLgorICAgIHVpbnRwdHJf
dCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVm
Q291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlm
ICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMt
PnNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChp
bmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBp
ZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBu
ZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigp
KTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50
ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFz
VmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5
cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5j
ZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIWhhc0Fu
eUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOworICAg
ICAgICBBU1NFUlQodGhpcy0+cmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgICAgIAorICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAK
KyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNp
bmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0K
KyAgICAgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCkt
PmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCkt
PmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxs
cygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxs
cygpLT5zaXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBp
ZiAodmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9m
Q2VsbHMoKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCgh
aGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiB0aGlzLT5zZXRJc0RlZmVycmVkKGZh
bHNlKTsKKyAgICB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxz
KCktPmF0KDApOworICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9p
bnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFn
KCk7CisgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVm
Q291bnRlZFNldF9oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworLy8gVCA9IHNvbWUgc3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRl
ZCwgbXVzdCBzdXBwb3J0IGEgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJs
aWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmpl
Y3QgaXMgbmV3IHRvIHRoaXMgc2V0LgorICAgIGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQq
KTsKKyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzOyB9OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBy
ZW1vdmVBbGwoSlNDZWxsKik7CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsK
KyAgICAKKyAgICBWZWN0b3I8VCo+IG1fdmVjdG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
c19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8
VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXpl
KCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMo
cmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sK
KyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBtX3ZlY3Rvci5hcHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9
IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpz
d2VlcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsr
aSkgeworICAgICAgICBUKiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNp
emUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVj
dC0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIG1fYnl0ZXMgLT0gc2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9
IG1fdmVjdG9yLmxhc3QoKTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8
VD46OnJlbW92ZUFsbChKU0NlbGwqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURl
YWQoSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNl
dElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2su
aCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRl
ICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1
ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgpAQCAtMzU4LDYgKzM1OSwxNCBAQCB2b2lkIEhlYXA6
OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRp
c29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2Vs
bCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVm
ZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOworICAgICAgICBkaWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygp
KTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RW
aXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRv
ciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwxNCArNjMwLDE5IEBAIHNp
emVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0
Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7CisgICAgcmV0dXJuIG1f
ZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKK30KKwogc2l6ZV90IEhl
YXA6OnNpemUoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFn
ZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICByZXR1cm4gbV9vYmplY3RT
cGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYVNpemUoKTsKIH0KIAog
c2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBh
Y2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICByZXR1cm4gbV9vYmplY3RT
cGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgp
OwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1
LDYgKzc1OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAg
ICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAgCisgICAgeworICAg
ICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1ZmZl
cnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNp
emUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAtOTI0LDEyICs5NDMs
MTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAgICBtX2RlZmVycmFs
RGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5l
ZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQogewogICAgIFJFTEVB
U0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBtX2RlZmVycmFsRGVw
dGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJ
Zk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgIGNvbGxlY3RJ
Zk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZp
bmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxv
Y2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJH
Q1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJI
YW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9j
az4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdl
IG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgb2JqZWN0Q291
bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJ
VFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0
aW5lczsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxs
LCBBcnJheUJ1ZmZlciogYnVmZmVyKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9y
QVdoaWxlOwogICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1
YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJs
b2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBp
bmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVk
KCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9j
YXRvcjsKICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVk
U3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFy
cmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlV
c2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90
eXBlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3Rv
dHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCku
Ym9vbGVhblByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUq
IGRhdGFWaWV3VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+
dm0oKS5kYXRhVmlld1RhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRh
dGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRh
dGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0
b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRh
dGVDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVy
cm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRT
aGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3Jh
Z2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAg
ICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZs
b2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAg
ICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBl
bWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBQcm9wZXJ0eSBp
cyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlw
ZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9w
ZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKQEAgLTUwMyw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBp
bmRleGluZ1NoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGlu
Zyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
Jiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5v
dEZpbmFsIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSwzNSAr
MTU0OSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAg
Y2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3Jh
Z2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJh
eURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVz
Y3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2Ny
aXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xh
bXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5
cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQor
ICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CkBAIC0xNjE4LDM1ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMy
QXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXks
IFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xh
bXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNj
cmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5
RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
OCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAg
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShh
cnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsxNjIzLDEwIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1
dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5
cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAK
ICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhl
IGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAgLy8gY2xvYmJlcmluZyB0
aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3Bl
cnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gs
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBi
YXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNs
YXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6
Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlm
IChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRleChiYXNl
LCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3Vs
dFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChzaWdu
ZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkK
ICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVz
VHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0x
NzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRC
CiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAm
JiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAgIGlmICh0eXBlID09IFR5
cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
T3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgCiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOwpAQCAtMTc0
MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIK
ICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0
VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6
ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogewor
ICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdU
MTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3Ry
dWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2Ns
YXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2Up
OworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2Ny
YXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAg
ICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBS
ZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwpA
QCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFy
cmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVk
bmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4LDggKzE3
NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1
Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBl
KHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIsMTEgQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJl
IGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhl
IHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0g
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0
ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBpZiAocm91bmRpbmcg
PT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0g
ICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVzcyA9IFVuc2lnbmVkVHlw
ZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOwog
ICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0
Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIo
R3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAg
eG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3LDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgICAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7Cisg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAgICAgc3Rv
cmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNP
bmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAK
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQg
dmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwot
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlT
Y3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5OCw5ICsx
ODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAog
ICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3Zh
bCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8g
YmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9z
dG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBl
KSkgewogICAgIGNhc2UgNDoKICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwg
ZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3Jh
dGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEw
LDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0y
NiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZl
ci5oIgogCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9v
bCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0
b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlC
dWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkgQEAgYm9v
bCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAg
IGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRW
aWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxW
aWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc05ldXRlcmFibGUg
PSAhbV9waW5Db3VudDsKIAotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCisgICAgaWYg
KGlzTmV1dGVyYWJsZSkKICAgICAgICAgbV9jb250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwogICAg
IGVsc2UgewogICAgICAgICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYsMzYgKzUx
LDEzIEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAg
ICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJl
bW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwg
Y3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsK
LSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCk7IGktLTspIHsKKyAgICAgICAgSlNBcnJh
eUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5j
b21pbmdSZWZlcmVuY2VBdChpKSk7CisgICAgICAgIGlmICh2aWV3KQorICAgICAgICAgICAgdmll
dy0+bmV1dGVyKCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVm
ZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZl
ciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0Vmll
dyA9IG1fZmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZp
ZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9p
ZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAg
QVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3
KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2Vmll
dzsKLSAgICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+
bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZp
ZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5t
X3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MK
IAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5o
CShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTUgKzI2LDE3IEBACiAjaWZuZGVmIEFycmF5
QnVmZmVyX2gKICNkZWZpbmUgQXJyYXlCdWZmZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIldlYWsuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZm
ZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50
cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00
NSw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJD
b250ZW50cygpOwotCisgICAgCiAgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQog
ICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBA
IC04NiwxMiArODgsMTMgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwog
fTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4g
eworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlC
dWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJh
eUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50
cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRv
cHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9u
bHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC05
OSwxNCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlu
bGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgoKSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGltYXRlSW5C
eXRlcygpIGNvbnN0OwogCiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNl
KGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHZvaWQgcGlu
KCk7CisgICAgaW5saW5lIHZvaWQgdW5waW4oKTsKIAotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1
ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwg
VmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAg
ICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAg
IH5BcnJheUJ1ZmZlcigpIHsgfQpAQCAtMTE5LDggKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIGlu
bGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7CiAgICAgc3RhdGljIGlu
bGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7CiAKKyAgICB1
bnNpZ25lZCBtX3BpbkNvdW50OwogICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsK
LSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OworCitwdWJsaWM6CisgICAgV2VhazxK
U0FycmF5QnVmZmVyPiBtX3dyYXBwZXI7CiB9OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFs
dWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCkBAIC0xNTksNiArMTY3LDEyIEBAIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7
Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJy
YXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0Vmll
dygwKQorICAgIDogbV9waW5Db3VudCgwKQogewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29u
dGVudHMpOwogfQpAQCAtMTk0LDYgKzIwOCwxMSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0
ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0K
IAorc2l6ZV90IEFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBzaXplb2YoQXJyYXlCdWZmZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRl
TGVuZ3RoKCkpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xp
Y2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAogewogICAgIHJldHVybiBzbGljZUltcGwoY2xh
bXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywyMyBAQCB1
bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAgICAgcmV0dXJuIGNsYW1w
VmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpw
aW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6dW5waW4o
KQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0
cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
LCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5
QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92
ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5
RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8v
IGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdl
IGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hl
Y2sgaGVyZT8KKyAgICAvLyBEbyBub3QgYWxsb3cgMzEtYml0IG92ZXJmbG93IG9mIHRoZSB0b3Rh
bCBzaXplLgogICAgIGlmIChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNp
emUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6
ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICBpZiAodG90YWxT
aXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplCisgICAgICAgICAgICB8fCB0b3Rh
bFNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90
Pjo6bWF4KCkpKSB7CiAgICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMjUzLDcgKzI4MCw1IEBAIEFycmF5QnVmZmVyQ29udGVu
dHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpT
Qzo6QXJyYXlCdWZmZXI7Ci11c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVudHM7Ci0KICNlbmRp
ZiAvLyBBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMjggKzMwLDM2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BcnJheUJ1ZmZlclZp
ZXc6OkFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpCi0gICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1f
aXNOZXV0ZXJhYmxlKHRydWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX3ByZXZW
aWV3KDApCi0gICAgLCBtX25leHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVy
VmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKKyAgICAgICAg
LCBtX2lzTmV1dGVyYWJsZSh0cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAg
ICBtX2Jhc2VBZGRyZXNzID0gbV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVy
LT5kYXRhKCkpICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAg
ICAgbV9idWZmZXItPmFkZFZpZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5
QnVmZmVyVmlldygpCiB7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVt
b3ZlVmlldyh0aGlzKTsKKyAgICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZl
ci0+dW5waW4oKTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit2b2lkIEFy
cmF5QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0gICAgbV9idWZmZXIg
PSAwOwotICAgIG1fYnl0ZU9mZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0gbV9pc05ldXRlcmFi
bGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7Cisg
ICAgCisgICAgaWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChm
bGFnKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVm
ZmVyLT5waW4oKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gK
IAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzcsNjAgKzM3LDUwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3
PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAg
ICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJ
bnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBU
eXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0g
ICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBl
KCkgY29uc3QgPSAwOworICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3QgPSAwOwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhbV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9
CisgICAgCiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7
CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29u
c3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQog
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9p
ZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAg
ICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJW
aWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUlt
cGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRl
T2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9m
ZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJy
YXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8vIEhl
bHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBp
cwogICAgIC8vIHdpdGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBz
dGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRpYyBi
b29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAgICAg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9m
ZnNldCAlIHNpemVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMiwxMCAr
OTIsMjUgQEAgcHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgcHJv
dGVjdGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wg
c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlu
bGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1Jhbmdl
SW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBp
bnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOworCiAgICAg
Ly8gSW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkn
cyB2aWV3OwogICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20g
dGhlIHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LSAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zm
c2V0LCB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRB
bmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Km51bUVsZW1lbnRzKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRf
TUFYIC0gYXJyYXlCeXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQg
PiBtYXhPZmZzZXQpIHsKQEAgLTExOSwxOSArMTI0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAg
Km51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7
CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsK
LQogICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFn
ZSwgcGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAg
IHVuc2lnbmVkIG1fYnl0ZU9mZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAx
OwogCi1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsK
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyog
bV9wcmV2VmlldzsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29s
IEFycmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0KQpAQCAtMTc2LDcgKzE3Nyw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6
ZXJvUmFuZ2VJbXBsKHVuc2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2ln
bmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQg
QXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQg
ZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAg
ICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpAQCAtMTk2LDYg
KzE5OCw0IEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmQKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJWaWV3OwotCiAjZW5kaWYg
Ly8gQXJyYXlCdWZmZXJWaWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NsYXNzSW5mby5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3
Owogc3RydWN0IEhhc2hUYWJsZTsKIAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3
LDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIEdldE93blByb3BlcnR5RGVzY3Jp
cHRvckZ1bmN0aW9uUHRyIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICAKKyAgICB0eXBl
ZGVmIHZvaWQgKCpTbG93RG93bkFuZFdhc3RlTWVtb3J5KShKU0FycmF5QnVmZmVyVmlldyopOwor
ICAgIFNsb3dEb3duQW5kV2FzdGVNZW1vcnkgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeTsKKyAgICAK
KyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJ
bXBsKShKU0FycmF5QnVmZmVyVmlldyopOworICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVk
QXJyYXlJbXBsOwogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBc
CkBAIC0xMzksNiArMTQ2LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNz
TmFtZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Q
cm9wZXJ0eSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Is
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRUeXBlZEFycmF5SW1wbCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFt
ZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGluZyB0aGUg
bGlzdC4KICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUo
bWFjcm8pIFwKICAgICBtYWNybyhBcnJheSkgXAorICAgIG1hY3JvKEFycmF5QnVmZmVyKSBcCiAg
ICAgbWFjcm8oQm9vbGVhbikgXAogICAgIG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikg
XApAQCAtNTUsNiArNTYsOSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1l
bnRzKSBcCiAgICAgbWFjcm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3Jv
KGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNv
ZGUpIFwKICAgICBtYWNybyhieXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBc
CkBAIC0xMTIsNiArMTE2LDcgQEAKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51bWVyYWJsZSkgXAog
ICAgIG1hY3JvKHByb3RvdHlwZSkgXAogICAgIG1hY3JvKHNldCkgXAorICAgIG1hY3JvKHNsaWNl
KSBcCiAgICAgbWFjcm8oc291cmNlKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1h
Y3JvKHN0YWNrKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZp
ZXcuY3BwCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0RhdGFWaWV3LmNwcDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9u
IFZhbHVlIHsKKyAgICBUIGRhdGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAg
aWYgKCFidWZmZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyLCAwLCBsZW5ndGgpOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVp
bnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBD
aGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZz
ZXQgKyBjaGVja2VkTGVuZ3RoOworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8
fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRl
T2Zmc2V0LCBieXRlTGVuZ3RoKSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwg
bV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBC
eXRlcyhib29sIGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1
cm4gbGl0dGxlRW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRp
ZgorfQorCitpbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBj
aGFyIHRlbXAgPSAqcDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAg
KyAxKTsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7Cisg
ICAgc3dhcEJ5dGVzKHAsIHAgKyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30K
Kworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5
dGVzKHAsIHAgKyA3KTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0
ZXMocCArIDIsIHAgKyA1KTsKKyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3Rh
dGljIHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29s
IGxpdHRsZUVuZGlhbikKK3sKKyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4p
KQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6Cisg
ICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAg
ICAgICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSA0OgorICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIDg6CisgICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3
OjpnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkp
IHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5j
ZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qg
c3VwcG9ydCB1bmFsaWduZWQgbG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5
KHZhbHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBi
eXRlT2Zmc2V0LCBzaXplb2YoVCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVz
LCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5v
dCB3YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEg
YnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBz
dG9yZXMuCisgICAgVmFsdWU8VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFs
dWU7CisgICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxp
dHRsZUVuZGlhbik7CisgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNz
KSArIGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90
IERhdGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsK
K30KKwordWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsKK30KKworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwor
fQorCit1aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3Qg
RGF0YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVp
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRs
ZUVuZGlhbiwgZWMpOworfQorCitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQor
Citkb3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRv
dWJsZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6
OnNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4o
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDM5ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcu
aCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRl
c1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQ
dHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNp
emVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAo
Ynl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zm
c2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0
aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2Vk
TWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2Ug
SlNDIHsKIAogRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5
QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFW
aWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wg
bmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFO
KQotICAgIHJldHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5k
aWFuOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBx
KQotewotICAgIGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwot
fQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2Fw
Qnl0ZXMocCwgcCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hh
ciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwg
cCArIDIpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsK
LSAgICBzd2FwQnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwot
ICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQp
OwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90
IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxp
dHRsZUVuZGlhbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAg
IGNhc2UgMToKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAyOgotICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LVQgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihi
eXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRp
cmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMg
dGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsK
LSAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VB
ZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQo
dmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUu
ZGF0YTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAg
ICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291
bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQg
dW5hbGlnbmVkIHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVl
LmRhdGEgPSB2YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNp
emVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1f
YmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwot
fQotCi1pbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOwotfQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90
PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90
IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lk
IERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmll
dyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6
bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxl
bmd0aCA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNp
bmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsg
fQorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNl
KGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50
MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1
aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2
X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisgICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQorICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQg
Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0K
KyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
KyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0KKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJf
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2
b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2
NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRS
YW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1f
Ynl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2ln
bmVkIG1fYnl0ZUxlbmd0aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRh
Vmlldy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gK
ICNkZWZpbmUgRGF0YVZpZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcu
aD4KKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CituYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJW
aWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
TGVuZ3RoOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gc2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJ
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdl
dFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90
IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAg
ICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWlu
dDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9h
dCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBz
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2Us
IGVjKTsgfQotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVp
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMy
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1
ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsg
fQotICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBz
ZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRG
bG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNv
bnN0CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5
VHlwZSBnZXRUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7
CiAgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2
YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3Qg
eyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVv
ZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBU
IGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXRE
YXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0KICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZp
ZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJy
YXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
ICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDg0ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotI2lmbmRlZiBGbG9hdDMyQXJyYXlfaAotI2RlZmluZSBGbG9hdDMyQXJyYXlfaAor
I2lmbmRlZiAiRmxvYXQzMkFycmF5X2giCisjZGVmaW5lICJGbG9hdDMyQXJyYXlfaCIKIAotI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5
QmFzZTxmbG9hdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3du
IHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0
aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0
LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZs
b2F0Pjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAg
IGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBpbmxpbmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3Ig
dmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxm
bG9hdD47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46
OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQz
MkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZs
b2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRB
cnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0MzJB
cnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5
LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zs
b2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDk4ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRmxvYXQ2
NEFycmF5X2gKLSNkZWZpbmUgRmxvYXQ2NEFycmF5X2gKKyNpZm5kZWYgIkZsb2F0NjRBcnJheV9o
IgorI2RlZmluZSAiRmxvYXQ2NEFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBGbG9hdDY0QXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
Y3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8g
U2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2ls
bCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5
IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZv
aWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUeXBlRmxvYXQ2NDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0
NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICAKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07
Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxG
bG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9h
dDY0QXJyYXk6OmNyZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+
KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFy
cmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1G
bG9hdDY0QXJyYXk6OkZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlC
YXNlPGRvdWJsZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwg
ZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5
OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJW
aWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
Y2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citw
cm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PiBjcmVhdGUoY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisg
ICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihiYXNlQWRkcmVzcygpKTsgfQorICAgIAorICAg
IGJvb2wgc2V0KEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogYXJyYXksIHVuc2lnbmVk
IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNl
dFJhbmdlKGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVu
Z3RoLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0UmFuZ2VJbXBs
KAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksCisgICAg
ICAgICAgICBkYXRhTGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAg
ICAgICAgICAgb2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0
ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgp
OworICAgICAgICBkYXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBwb3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzLT5s
ZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAgICAgICAgICAm
JiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdwor
ICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQorICAgIAorICAg
IFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUg
Z2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dHlwZVZhbHVl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2Rl
ZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwg
Ynl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0ZShs
ZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNpemVv
ZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZm
ZXI7CisgICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlPihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJyYXlCdWZmZXI6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVu
Z3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJldHVybiBzdWJhcnJheShzdGFy
dCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Cit7CisgICAgdW5z
aWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0YXJ0
LCBlbmQsIHRoaXMtPmxlbmd0aCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKKyAgICBjbGFtcE9mZnNl
dEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksICZv
ZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIG9mZnNldCwgbGVu
Z3RoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNz
IEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVy
ZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgp
IHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xl
bmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3Jk
OyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBl
ZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1
ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3RhdGlj
IEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0g
MTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90IHB1
YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBh
cnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcgdGhl
IHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAgdWlu
dDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5
IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRoaXMs
IGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAgc3Ry
dWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRB
cnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDgwICsyMywxMCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBJbnQ4QXJyYXlfaAotI2RlZmluZSBJbnQ4QXJyYXlfaAor
I2lmbmRlZiAiSW50OEFycmF5X2giCisjZGVmaW5lICJJbnQ4QXJyYXlfaCIKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50
OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVu
dGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJl
c3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0
OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAg
aW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Owot
ICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gVHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGlu
ZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0
ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+
IEludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFy
cmF5PihsZW5ndGgpOwotfQotCi1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxl
bmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+
KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQ4
QXJyYXk7CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIEludDhBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKQEAgLTIzLDgwICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBJbnQxNkFycmF5X2gKLSNkZWZpbmUgSW50MTZBcnJheV9oCisjaWZuZGVmICJJbnQx
NkFycmF5X2giCisjZGVmaW5lICJJbnQxNkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgSW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2
X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4g
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDE2QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0Owot
ICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OnNldDsKLQotICAgIGlu
bGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gVHlwZUludDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgSW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0
byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJ
bnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJy
YXk6OmNyZWF0ZShjb25zdCBpbnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5
LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNy
ZWF0ZTxJbnQxNkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVV
bmluaXRpYWxpemVkPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJy
YXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJ
bnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxJbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6SW50MTZBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5
cy5oIgogCiAjZW5kaWYgLy8gSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAg
QEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzcgKzIzLDEw
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEludDMyQXJyYXlfaAotI2RlZmlu
ZSBJbnQzMkFycmF5X2gKKyNpZm5kZWYgIkludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkludDMyQXJy
YXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEludDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTxpbnQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDMyQXJyYXk+IGNyZWF0ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0K
LSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBh
cnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMg
ZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludD46OnNldDsKLSAgICB1
c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5l
IFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gVHlwZUludDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MzJB
cnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFz
cy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50PjsKLX07Ci0KLVBhc3NSZWZQ
dHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGxlbmd0aCk7
Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IGlu
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
aW50Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8aW50Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQzMkFycmF5PihsZW5ndGgpOwot
fQotCi1JbnQzMkFycmF5OjpJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxU
eXBlZEFycmF5QmFzZTxpbnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1Q
YXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQzMkFycmF5PihzdGFydCwgZW5k
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6SW50MzJBcnJheTsKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gSW50MzJBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKworI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
ICJSZWplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5
QnVmZmVyOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyIiwgJkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyKX07CisKK0pTQXJyYXlCdWZmZXI6
OkpTQXJyYXlCdWZmZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAg
LCBtX2ltcGwoYXJyYXlCdWZmZXIuZ2V0KCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBtX2ltcGwpOworfQorCitKU0FycmF5QnVm
ZmVyKiBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyKQoreworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIEpTQXJyYXlCdWZmZXIq
IHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZm
ZXI+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyKHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZl
cik7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
LAorICAgICAgICBOb25BcnJheSk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJv
cGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlC
dWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAg
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwoKS0+
Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAg
ICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpw
dXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNl
bGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMsIHNsb3QuaXNTdHJpY3RNb2RlKCks
ICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0
eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVy
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisg
ICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRl
ZmluZSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVy
biBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAor
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2Rl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyX2gKKworI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXIgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlcihWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIEpTQXJyYXlCdWZmZXIqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+KTsKKyAgICAKKyAgICBBcnJheUJ1ZmZlciogaW1wbCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbDsgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAor
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKK3ByaXZhdGU6CisgICAgQXJyYXlCdWZmZXIqIG1faW1wbDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgor
CisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAor
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKwor
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
OiBCYXNlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1
ZmZlciIpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7
Cit9CisKK0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
OjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBy
ZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Io
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0s
IHByb3RvdHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rv
ciA9CisgICAgICAgIGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihleGVjLT5jYWxs
ZWUoKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZl
ciBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCAxKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJl
c3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgY29uc3Ry
dWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBidWZmZXIpOwor
ICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworQ29uc3RydWN0
VHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoCisgICAgSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKK30KKworQ2FsbFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENhbGxU
eXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisK
KyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOworCitjbGFzcyBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRl
cm5hbEZ1bmN0aW9uIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSopOworCitwdWJsaWM6CisgICAgc3RhdGlj
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKiwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCos
IENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24q
PihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBzbGljZSBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZl
ci4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJTbGljZSByZXF1
aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMyX3QgYmVnaW4g
PSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49
IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhp
c09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBuZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5pbXBsKCktPnNsaWNlKGJlZ2luLCBlbmQpOwor
ICAgIGlmICghbmV3QnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoY2FsbGVlLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5
QnVmZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBuZXdCdWZmZXIpOworICAgIAor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworY29uc3QgQ2xhc3NJbmZv
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUpCit9OworCitKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
c2xpY2UsIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKK30KKworSlNB
cnJheUJ1ZmZlclByb3RvdHlwZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5QnVmZmVyUHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0
aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3Ry
dWN0dXJlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZv
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGVfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyUHJvdG90eXBl
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwg
SlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyUHJv
dG90eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNB
cnJheUJ1ZmZlclByb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiUmVqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZp
ZXc6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlC
dWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAg
IFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3Qg
ZWxlbWVudFNpemUsCisgICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVj
dHVyZSgwKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sK
KyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBH
QyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9
IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFs
bG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsK
KyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3Qq
IGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAg
ICAgICAgICAgIGFzV29yZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24n
dCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5n
dGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlm
ICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3Rvcikp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0
TWFsbG9jKGxlbmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAg
ICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJy
YXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1
Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVj
dG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZz
ZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFy
cmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5n
SGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZs
eSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwg
MCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENv
bnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVj
dHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0
b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29u
dGV4dC5tb2RlKCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNo
IChtX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVy
KHRoaXMsIGZpbmFsaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBl
ZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+
aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVm
ZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIo
dGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZm
ZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90
eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0Fy
cmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0
KCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVm
ZmVyKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4
ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBl
eGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAor
ICAgICAgICAgICAgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChl
eGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9u
bHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAg
ICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVj
LCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJh
eSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7
Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAg
CisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxl
YXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwor
ICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXpl
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0
ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVU
eXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVy
Vmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
VGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRo
b3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisv
LyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhl
IERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8g
ICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBh
biBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBl
IG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50
LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5r
IHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90Cisv
LyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCog
YSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlz
IGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2Vi
Q29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1
cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3Qg
aW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHBy
b3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVw
ZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBk
b25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIg
b3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRB
cnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNl
ZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNl
LCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1p
bmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXks
CisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5v
dCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBw
b2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwg
ViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAv
LyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQg
ZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2ls
bCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAor
ICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdh
eS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJl
ZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5
cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEK
KyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdh
c3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rv
ci4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBh
IEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRp
dmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xv
d2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGlu
Z3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3Cisv
LyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwg
c28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0
byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0Fy
cmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXpl
T2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0g
MSkKKyAgICAgICAgICAgICYgfnNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6
CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFs
aXplIH07CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0
dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRp
b25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4
dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zdHJ1Y3R1
cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVy
ZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJf
dCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0
ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZpZXco
Vk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBi
dWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhl
IGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7Cisg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigp
OworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3
LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUo
KS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVy
KiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVy
KCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgp
LT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWdu
ZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0g
V2FzdGVmdWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVk
QXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5k
YXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihkZWx0YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBk
ZWx0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1
IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlC
dWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0Fy
cmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYg
KzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhl
Y1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9i
amVjdDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVk
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2Vu
ZGlmCiAgICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5
U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmll
dyopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFW
aWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3
KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0
JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyog
SlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2
ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7
CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0
ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZp
ZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZp
ZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0Rh
dGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2ln
bmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOwor
fQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
dW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFW
aWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9udEVudW0gfCBSZWFkT25s
eSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFy
cmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIERhdGFW
aWV3OjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5i
eXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKworU3RydWN0dXJlKiBKU0Rh
dGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Rh
dGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBK
U0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmll
dyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCisgICAgLy8g
RHVtbXkgbWV0aG9kcywgd2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2UgYXJlIGp1c3Qg
aW4gcGxhY2UgdG8KKyAgICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24g
d2UgZG8gZWxzZXdoZXJlLgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVVbmluaXRpYWxp
emVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IEpTRGF0YVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlw
ZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5
KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworICAgIAorcHVibGlj
OgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRB
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFW
aWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXcuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6
OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBF
eGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFW
aWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1
dC5oCitAYmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgZ2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAgICBk
YXRhVmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAg
ICAgMAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYg
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAgICAg
ICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVp
bnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMyICAg
ICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5j
R2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDgg
ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90
b0Z1bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0
SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBzZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90
b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6
Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmlld1By
b3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNEYXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90b3R5
cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
CisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAgIGV4
ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90
b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29s
IEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRT
dGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3Rh
dGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2Jq
ZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBE
YXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4
ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0
ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAg
Ym9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBs
aXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49
IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAg
ICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9y
KCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxl
RW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsK
KyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1
ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0
RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5
bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRh
VmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikp
OworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFz
dCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOworICAgIAorICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2
YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAg
ICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQor
ICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2Yg
Ym91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIAorICAgICpyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihzdGF0
aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpID0gdmFs
dWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRv
cj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRE
YXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
R2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MTZB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRG
bG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNl
dERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y1NldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50OEFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRv
cj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNl
dERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgiCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVf
aAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVj
dHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19p
bmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1
cmVGbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmll
d1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxv
YXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGbG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJK
U0Zsb2F0MzJBcnJheV9oIgorI2RlZmluZSAiSlNGbG9hdDMyQXJyYXlfaCIKKworI2luY2x1ZGUg
IkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTRmxvYXQ2NEFycmF5X2giCisjZGVm
aW5lICJKU0Zsb2F0NjRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisj
ZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJh
eSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBz
ZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3
IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6
CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0
ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8g
ICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmll
bGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBN
YWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBi
dXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25l
IG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBh
cnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGll
ZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdz
IGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNp
bXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2lu
dGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBp
cyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBl
LgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4g
QWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBj
b252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1
c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAg
IHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7
CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBp
bnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpT
VmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1
ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlC
dWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0
YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6
OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNy
ZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRh
cHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsg
fQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwg
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3Ip
OworICAgIH0KKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1f
dmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRj
aCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAt
IGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2ts
eSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9
CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3Rvcigp
W2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5z
aWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRl
eFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0
b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0
aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRv
TmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVu
c2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlU
b05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1
ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldElu
ZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1f
bGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAg
ICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGgg
Pj0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2Vw
dDogaWYgaXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3By
aWF0ZSBleGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9y
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVj
aWZpY1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQg
ZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwg
aGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFk
YXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENv
cHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBh
bmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUg
dGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9p
ZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVm
ZmVyVmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVu
Y3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJh
c2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKAor
ICAgICAgICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwg
SlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERh
dGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZShn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBw
cm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAg
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5hbWUp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+
OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
CisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9u
ZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAg
ICBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+dHlw
ZWRBcnJheVN0cnVjdHVyZSgKKyAgICAgICAgICAgIFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3Jh
Z2VUeXBlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJheUJ1ZmZlcioganNCdWZmZXIgPSBqc0R5bmFt
aWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAgICAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1wbCgpOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpID8gZXhl
Yy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1l
bnQoMikudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkgLSBvZmZzZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVm
ZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUg
ZWxlbWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5n
dGgoKSAtIG9mZnNldCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0
dXJlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIGlmIChWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBB
cnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICAvLyBGb3Ig
ZXZlcnl0aGluZyBidXQgRGF0YVZpZXcsIHdlIGFsbG93IGNvbnN0cnVjdGlvbiB3aXRoIGFueSBv
ZjoKKyAgICAvLyAtIEFub3RoZXIgYXJyYXkuIFRoaXMgY3JlYXRlcyBhIGNvcHkgb2YgdGhlIG9m
IHRoYXQgYXJyYXkuCisgICAgLy8gLSBBbiBpbnRlZ2VyLiBUaGlzIGNyZWF0ZXMgYSBuZXcgdHlw
ZWQgYXJyYXkgb2YgdGhhdCBsZW5ndGggYW5kIHplcm8taW5pdGlhbGl6ZXMgaXQuCisgICAgCisg
ICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+
YXJndW1lbnQoMCkpKSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5h
cmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiBy
ZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+
c2V0KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVx
dWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47Cisg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitDYWxsVHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdD
bGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8
Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGVmZXJHQy5oIgorI2lu
Y2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQor
ICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNv
bnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVz
dWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhl
Yy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dCBjb250ZXh0KAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxl
bmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICBDb25zdHJ1Y3Rp
b25Db250ZXh0OjpEb250SW5pdGlhbGl6ZSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3Nl
ZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFB
cnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAgICB0aHJvd0Vycm9yKAorICAgICAg
ICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0
aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6
Vmlld1R5cGU+IGltcGwpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBpbXBs
LT5idWZmZXIoKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVy
ZSwgYnVmZmVyLCBpbXBsLT5ieXRlT2Zmc2V0KCksIGltcGwtPmxlbmd0aCgpKTsKKyAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pih2
bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKKyAgICBQYXNz
UmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIHJldHVybiBj
cmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIGltcGwpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6dmFsaWRhdGVSYW5nZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChjYW5BY2Nlc3NSYW5nZVF1aWNrbHkob2Zmc2V0
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFu
ZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPgor
Ym9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0V2l0aFNwZWNpZmljVHlw
ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIE90aGVyVHlwZSogb3RoZXIsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEhhbmRsZSB0aGUgaGlsYXJpb3VzIGNhc2U6
IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3RoIGNvdWxkIGhhdmUgcmVzdWx0ZWQKKyAgICAv
LyBpbiBuZXV0ZXJpbmcuIFdlbGwsIG5vLiBUaGF0J2xsIG5ldmVyIGhhcHBlbiBiZWNhdXNlIHRo
ZXJlIGNhbm5vdCBiZQorICAgIC8vIHNpZGUtZWZmZWN0cyBvbiBnZXR0aW5nIHRoZSBsZW5ndGgg
b2YgYSB0eXBlZCBhcnJheS4gQnV0IHByZWRpY3Rpbmcgd2hlcmUgdGhlcmUKKyAgICAvLyBhcmUs
IG9yIGFyZW4ndCwgc2lkZS1lZmZlY3RzIGlzIGEgZm9vbCdzIGdhbWUgc28gd2UgcmVzb3J0IHRv
IHRoaXMgY2hlYXAKKyAgICAvLyBjaGVjay4gV29yc3QgY2FzZSwgaWYgd2UncmUgd3JvbmcsIHBl
b3BsZSBzdGFydCBzZWVpbmcgbGVzcyB0aGluZ3MgZ2V0IGNvcGllZAorICAgIC8vIGJ1dCB3ZSB3
b24ndCBoYXZlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KKyAgICBsZW5ndGggPSBzdGQ6Om1p
bihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZVJhbmdl
KGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmIChvdGhlci0+bGVuZ3RoKCkgIT0gbGVuZ3RoKSB7CisgICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiTGVuZ3RoIG9mIGluY29taW5nIGFycmF5IGNoYW5n
ZWQgdW5leHBlY3RlZGx5LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHNldEluZGV4UXVp
Y2tseShvZmZzZXQgKyBpLCBvdGhlci0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IGNvbnN0IENsYXNzSW5mbyogY2kgPSBvYmplY3QtPmNsYXNzSW5mbygpOworICAgIGlmIChjaS0+
dHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICAv
LyBUaGUgc3VwZXIgZmFzdCBjYXNlOiB3ZSBjYW4ganVzdCBtZW1jcHkgc2luY2Ugd2UncmUgdGhl
IHNhbWUgdHlwZS4KKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90aGVyID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAgICAgbGVuZ3RoID0g
c3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSh0eXBlZFZlY3RvcigpICsgb2Zmc2V0
LCBvdGhlci0+dHlwZWRWZWN0b3IoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNpLT50eXBlZEFycmF5U3RvcmFn
ZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNp
ZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNU
eXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7
CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBl
KGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7Cisg
ICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4
ZWMsIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
Y2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlw
ZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTVWludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVu
Z3RoKTsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6IHsK
KyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2UgY291bGQgb3B0aW1pemUgdGhpcyBj
YXNlLiBCdXQgcmlnaHQgbm93LCB3ZSBkb24ndC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXNldEluZGV4UXVpY2tseShl
eGVjLCBvZmZzZXQgKyBpLCBvYmplY3QtPmdldChleGVjLCBpKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0
SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
Ym9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAo
aW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldElu
ZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAg
UHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAg
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7
CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRzIHRv
IHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3RyaWN0
IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGlu
ZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4KHRo
aXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3duUHJv
cGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAg
Ly8gVGhpcyBpcyBtYXRjaGluZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBpdCBy
ZWplY3RzIGFsbCBhdHRlbXB0cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBpbmRl
eGVkIHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0CisgICAg
Ly8gb2YgYm91bmRzLgorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVy
dHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxs
KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAgdGhpc09iamVj
dCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAg
ICB9CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkocHJvcGVy
dHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNsb3Quc2V0VmFsdWUo
dGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmICghdGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkp
IHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRocm93
aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5kcy4K
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1
aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lO
REVYKSB7CisgICAgICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0aGlzT2JqZWN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5hZGQoSWRlbnRp
ZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVybiBCYXNlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0
LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3Iu
Y29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sIHRoaXNPYmpl
Y3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheTogeworICAgICAgICB2
aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJy
YXk6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJhY2tpbmdTdG9yZSgK
KyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0gVHlw
ZWRBcnJheVZlY3RvckNvcHlUb2tlbgorICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRD
b3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0
aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5h
bGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBtZW1jcHko
bmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5
KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAorICAgIEJh
c2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBXZSBwbGF5IHRo
aXMgZ2FtZSBiZWNhdXNlIHdlIHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVuIGZyb20gcGxh
Y2VzIHRoYXQKKyAgICAvLyBkb24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUqIG9yIHRoZSBW
TSwgYW5kIHdlIG9ubHkgYWxsb2NhdGUgc28gbGl0dGxlCisgICAgLy8gbWVtb3J5IGhlcmUgdGhh
dCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gdHJpZ2dlciBhIEdDIC0ganVzdCBhY2NvdW50aW5nIHdo
YXQKKyAgICAvLyB3ZSBoYXZlIGRvbmUgaXMgZ29vZCBlbm91Z2guIFRoZSBzb3J0IG9mIGJpemFy
cm8gZXhjZXB0aW9uIHRvIHRoZSAiYWxsb2NhdGluZworICAgIC8vIGxpdHRsZSBtZW1vcnkiIGlz
IHdoZW4gd2UgdHJhbnNmZXIgYSBiYWNraW5nIGJ1ZmZlciBpbnRvIHRoZSBDIGhlYXA7IHRoaXMK
KyAgICAvLyB3aWxsIHRlbXBvcmFyaWx5IGdldCBjb3VudGVkIHRvd2FyZHMgaGVhcCBmb290cHJp
bnQgKGluY29ycmVjdGx5LCBpbiB0aGUgY2FzZQorICAgIC8vIG9mIGFkb3B0aW5nIGFuIG92ZXJz
aXplIHR5cGVkIGFycmF5KSBidXQgd2UgZG9uJ3QgR0MgaGVyZSBhbnl3YXkuIFRoYXQncworICAg
IC8vIGFsbW9zdCBjZXJ0YWlubHkgZmluZS4gVGhlIHdvcnN0IGNhc2UgaXMgaWYgeW91IGNyZWF0
ZWQgYSB0b24gb2YgZmFzdCB0eXBlZAorICAgIC8vIGFycmF5cywgYW5kIGRpZCBub3RoaW5nIGJ1
dCBjYXVzZWQgYWxsIG9mIHRoZW0gdG8gc2xvdyBkb3duIGFuZCB3YXN0ZSBtZW1vcnkuCisgICAg
Ly8gSW4gdGhhdCBjYXNlLCB5b3VyIG1lbW9yeSBmb290cHJpbnQgd2lsbCBkb3VibGUgYmVmb3Jl
IHRoZSBHQyByZWFsaXplcyB3aGF0J3MKKyAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55dGhp
bmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdworICAgIC8v
IHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0MgYXBw
cm9wcmlhdGVseS4KKyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsKKyAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOworICAgIAorICAgIEFTU0VSVCghdGhp
c09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IHRoaXNP
YmplY3QtPmJ5dGVTaXplKCk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJlY29y
ZCwgaW4gdGhlIGJ1dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAorICAgIGlmICh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYgIXRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAg
ICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxl
LgorICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseSwgKmhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgp
LAorICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
cjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFz
dFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09i
amVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8gRklY
TUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRy
YSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxs
IGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8vIHRo
ZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9w
dGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5zZXRBcnJh
eUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0
LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUo
CisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCks
IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisj
ZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlKiBjcmVhdGUoCisgICAgICAgIEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxw
ZXJzLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmll
dy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJh
eSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYg
KCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikpOwor
ICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9m
ZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3Vy
Y2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJy
YXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcu
IikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQg
bGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisg
ICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Cisg
ICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3Qt
Pmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFzc2Vy
dCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVuZ3Ro
ID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGlu
ZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdp
biA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5kID0g
dGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0aGUg
Ym91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNTRVJU
KGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgor
ICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0g
YmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZm
ZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0g
dGhpc09iamVjdC0+bGVuZ3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0K
KyAgICAgICAgY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1
bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1
ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0Ns
YXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAgbGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50U2l6
ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NF
UlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0u
cHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmll
d0NsYXNzPiwgRG9udEVudW0sIDIpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVy
dHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3
Q2xhc3M+LCBEb250RW51bSwgMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0K
KyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5m
aW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksMTUgKzQ5LDI2IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3Rv
dHlwZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJK
U09OT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgi
CiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC0yMTQsNiArMjI1LDMwIEBAIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIo
ZXhlYy0+dm0oKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBn
bG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0
QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJv
dG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlw
ZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJB
cnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1Vp
bnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50OENsYW1w
ZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWlu
dDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNV
aW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
RmxvYXQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkp
OworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0
YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJy
YXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQxNildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
SW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
SW50MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OENsYW1wZWQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBKU1VpbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0u
c3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyld
LnByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywganNOdWxsKCkpKTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpz
TnVsbCgpKSk7CkBAIC0zMTgsNiArMzUzLDI2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0
KEpTVmFsdWUgcHJvdG8KIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywg
dGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9iamVj
dDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAgCisg
ICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0gSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJyYXk8
SW50ZXJuYWxGdW5jdGlvbiosIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gdHlwZWRBcnJh
eUNvbnN0cnVjdG9yczsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUlu
dDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDhBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlw
ZS5nZXQoKSwgIkludDhBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRl
eChUeXBlSW50MTYpXSA9IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJ
bnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQx
NildLnByb3RvdHlwZS5nZXQoKSwgIkludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3Ry
dWN0b3JzW3RvSW5kZXgoVHlwZUludDMyKV0gPSBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQzMkFycmF5Iik7CisgICAgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OCldID0gSlNVaW50OEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhBcnJh
eSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDhDbGFtcGVk
KV0gPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQ4
Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50OENsYW1wZWRBcnJheSIpOworICAg
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQxNkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJV
aW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWlu
dDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5w
cm90b3R5cGUuZ2V0KCksICJVaW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlRmxvYXQzMildID0gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQzMkFycmF5Iik7Cisg
ICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zsb2F0
NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0
KCksICJGbG9hdDY0QXJyYXkiKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLT5w
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJbmRleCA9IE5VTUJFUl9PRl9UWVBFRF9BUlJB
WV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7CisgICAgICAgIG1fdHlwZWRBcnJheXNbdHlw
ZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFs
UHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4sIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAj
aW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVj
dE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0xNjYs
NiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Jl
Z0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVj
dFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rp
b25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQcm90b3R5
cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJheURhdGEg
eworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3RvdHlwZTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07CisgICAgCisgICAgRml4ZWRB
cnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiBtX3R5cGVk
QXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpU
YWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFuZCBKSVQu
CiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ09iamVjdFN0cnVjdHVy
ZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGFycmF5QnVmZmVy
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKTsg
fQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiB0eXBl
ZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVjaWFsOjpQb2ludGVyIHBvaW50
ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50OEFycmF5X2gi
CisjZGVmaW5lICJKU0ludDhBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiAiSlNJbnQxNkFycmF5X2giCisjZGVmaW5lICJKU0ludDE2QXJyYXlfaCIKKworI2luY2x1
ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDMyQXJyYXlfaCIKKyNkZWZpbmUgIkpT
SW50MzJBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25z
dCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7IkZ1bmN0aW9uIiwg
JkpTIyN0eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5
cGUjI0NvbnN0cnVjdG9yKX0KKworTUFLRV9TX0lORk8oSW50OEFycmF5KTsKK01BS0VfU19JTkZP
KEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZEFycmF5KTsKK01BS0VfU19JTkZPKFVp
bnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0
MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJyYXkpOworTUFLRV9TX0lORk8oRGF0YVZp
ZXcpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1
ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5
PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0lu
dDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpT
VWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJh
eT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9y
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFy
cmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVm
aW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBK
UyMjdHlwZSMjUHJvdG90eXBlOjpzX2luZm8gPSB7I3R5cGUgIlByb3RvdHlwZSIsICZKUyMjdHlw
ZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNQcm90
b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJh
eSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkp
OworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsK
K01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5UHJvdG90eXBl
c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5UHJv
dG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDE2
QXJyYXk+IEpTSW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhBcnJheT4gSlNVaW50
OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFycmF5PiBKU1Vp
bnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZTxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJy
YXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpT
RmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5cy5oIgorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlw
ZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNBcnJheTo6c19p
bmZvID0geyN0eXBlICJBcnJheSIsICZKUyMjdHlwZSMjQXJyYXk6OkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQXJyYXkpfQorCitNQUtFX1NfSU5GTyhJ
bnQ4KTsKK01BS0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19J
TkZPKFVpbnQ4KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50
MTYpOworTUFLRV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9T
X0lORk8oRmxvYXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5
c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWlu
dDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFk
YXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVp
bnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiAiSlNVaW50OEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4QXJyYXlf
aCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVk
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Vp
bnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmICJKU1VpbnQ4Q2xhbXBlZEFycmF5X2giCisjZGVmaW5lICJKU1VpbnQ4Q2xhbXBlZEFycmF5
X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xh
bXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWlu
dDE2QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDE2QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MzJBcnJheV9oIgorI2RlZmluZSAiSlNVaW50
MzJBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmlu
ZSBPcGVyYXRpb25zX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb3h5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
CitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVmZmVy
KiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93
cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAgIEpTQXJyYXlC
dWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBuYXRpdmUpOworICAgIG5h
dGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJheUJ1ZmZlcj4ocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5
Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29udHJv
bGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFycmF5
IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0
IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBydW5u
aW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJZiB0
aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2
ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZl
ciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRuJ3Qg
ZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25lLgorCitjbGFzcyBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJsaWM6
CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciog
dG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVmZmVyKik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTMgKzIzMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOworICAgICAgICByZXR1
cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBp
c1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsK
LSAgICB9CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZp
bmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgi
CiAKQEAgLTEwNCw2ICsxMDUsMTcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0Q29uYwogICAgICAgICB2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1
ZUlnbm9yZWQpOwogfQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVy
KGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRp
ZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAo
IWlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpLT5tb2RlKCkgPT0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCiBpbmxp
bmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9iamVjdCgpID09IGxleGljYWxHbG9iYWxPYmplY3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0
eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlw
ZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRl
ZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3
VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZh
bHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0
b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUg
dG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
Pih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5h
bWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1
Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7Cisg
ICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVB
cmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVl
ID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0
IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7
CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1
Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJB
ZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRl
ZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJ
bnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFw
dG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4
Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2
NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJ
bnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJy
YXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDog
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJy
YXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+
IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1
aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0
cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwg
VWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9h
dDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwg
SlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3Ig
OiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRB
cnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3Igewor
ICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkg
Vmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7Cisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1w
ZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1
cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRv
dWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8
IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAg
ICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5
cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1R5cGVkQXJyYXlDb250cm9s
bGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorVHlwZWRBcnJheUNvbnRyb2xsZXI6On5U
eXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRB
cnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlC
dWZmZXI7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNH
bG9iYWxPYmplY3Q7CisKK2NsYXNzIFR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNv
dW50ZWQ8VHlwZWRBcnJheUNvbnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBUeXBlZEFycmF5Q29u
dHJvbGxlcigpOworICAgIHZpcnR1YWwgflR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisg
ICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNj
cmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlw
dG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsK
LQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRB
cnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAotICAg
IFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVp
bnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIs
Ci0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0
cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQot
ICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0g
ICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNl
dCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8p
Ci0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9s
ZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJ
bmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVf
dCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAg
IFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBl
ZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGlu
ZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3Jp
cHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUu
aCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5v
dFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgVHlwZUludDg6CisgICAg
ICAgIHJldHVybiAmSlNJbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAg
ICAgICAgcmV0dXJuICZKU1VpbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6CisgICAgICAgIHJldHVybiAmSlNVaW50OENsYW1wZWRBcnJheTo6c19pbmZvOworICAg
IGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gJkpTSW50MTZBcnJheTo6c19pbmZvOwor
ICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQxNkFycmF5OjpzX2lu
Zm87CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiAmSlNJbnQzMkFycmF5Ojpz
X2luZm87CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gJkpTVWludDMyQXJy
YXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gJkpTRmxv
YXQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJu
ICZKU0Zsb2F0NjRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAg
ICByZXR1cm4gJkpTRGF0YVZpZXc6OnNfaW5mbzsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIG91dC5wcmludCgi
Tm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50ODoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MzIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVk
OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDE2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQzMjoK
KyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQ2NCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIG91dC5wcmludCgi
VHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5
cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2xhc3NJbmZvOwor
CitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4
LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwK
KyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5
cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmlldworfTsKKworI2Rl
ZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVMgVHlwZURhdGFWaWV3CisKK2lubGluZSB1
bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9CisKK2lubGluZSBib29sIGlzVHlwZWRWaWV3
KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBO
b3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitpbmxp
bmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2Fz
ZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gMjsKKyAg
ICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgY2FzZSBUeXBlRmxv
YXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAg
cmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFy
cmF5VHlwZSB0eXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlw
ZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAg
ICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChU
eXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlw
ZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlw
ZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VHlwZWRB
cnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheXNfaAorI2Rl
ZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIK
KyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1w
ZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVp
bnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4g
VWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRv
cj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFk
YXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBU
eXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50
OEFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFVpbnQ4QXJyYXlfaAotI2RlZmluZSBVaW50OEFycmF5X2gKKyNp
Zm5kZWYgIlVpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4QXJyYXlfaCIKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8dWludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0
KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgaW5saW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90
Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJh
eT4gVWludDhBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhB
cnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhB
cnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhf
dD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDhB
cnJheTo6VWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1
aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhB
cnJheT4gVWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQ4QXJyYXk7CisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKIAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjMgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IFVpbnQ4Q2xhbXBlZEFycmF5X2gKLSNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAorI2lmbmRl
ZiAiVWludDhDbGFtcGVkQXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQ4Q2xhbXBlZEFycmF5X2giCiAK
LSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDogcHVibGljIFVpbnQ4
QXJyYXkgewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4g
aXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBu
b3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZp
bGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBJdCdz
IG9ubHkgbmVlZGVkIHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGFycmF5
Ci0gICAgLy8gd2FzIGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVmYXVsdCBpbml0aWFs
aXphdGlvbiBwYXRocwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCi0gICAgaW5s
aW5lIHZvaWQgemVyb0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+
OjpzZXQ7Ci0gICAgaW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUp
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdU
eXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1w
ZWQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1wZWRBcnJheShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBm
cmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENs
YW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVp
bnQ4Q2xhbXBlZEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJh
eT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVV
bmluaXRpYWxpemVkPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi12b2lkIFVpbnQ4
Q2xhbXBlZEFycmF5Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsK
LX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
dmFsdWUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAgICAgdmFsdWUgPSAw
OwotICAgIGVsc2UgaWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9IDI1NTsKLSAgICBk
YXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKLX0KLQot
VWludDhDbGFtcGVkQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBVaW50
OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBj
b25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhD
bGFtcGVkQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNp
bmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAj
ZW5kaWYgLy8gVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEw
IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI0LDc5ICsyMywx
MCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBVaW50MTZBcnJheV9oCi0jZGVm
aW5lIFVpbnQxNkFycmF5X2gKKyNpZm5kZWYgIlVpbnQxNkFycmF5X2giCisjZGVmaW5lICJVaW50
MTZBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNv
bnN0IHVpbnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBv
bmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmls
bGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZh
U2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVn
cmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gVHlwZVVpbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFy
cmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNz
LgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNz
UmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5Ojpj
cmVhdGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+Ojpj
cmVhdGU8VWludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5
OjpVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8
dWludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVp
bnQxNkFycmF5PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpVaW50MTZBcnJheTsKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKQEAgLTI0LDc5ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBV
aW50MzJBcnJheV9oCi0jZGVmaW5lIFVpbnQzMkFycmF5X2gKKyNpZm5kZWYgIlVpbnQzMkFycmF5
X2giCisjZGVmaW5lICJVaW50MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNs
YXNzIFVpbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJl
IGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0
cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0
OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0KLSAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgaW5saW5lIFVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3Igdmlz
aWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
OjpjcmVhdGU8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJy
YXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVp
bnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
VWludDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTx1aW50MzJfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDMyQXJyYXk+KGxlbmd0aCk7
Ci19Ci0KLVVpbnQzMkFycmF5OjpVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVn
cmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQot
ewotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDMyQXJy
YXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpV
aW50MzJBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDMy
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2lu
Y2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRl
ckNhY2hlLmgiCiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJT
dHJvbmdJbmxpbmVzLmgiCkBAIC04Nyw2ICs4OCw3IEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUg
YXJyYXlDb25zdHJ1Y3RvclQKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlQcm90b3R5cGVU
YWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblByb3RvdHlwZVRhYmxlOwogZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRh
dGFWaWV3VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVUYWJsZTsKIGV4dGVybiBj
b25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRh
YmxlIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0xNDUsNiArMTQ3LDcgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgYXJyYXlDb25zdHJ1Y3RvclRhYmxl
KGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBh
cnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5UHJvdG90eXBl
VGFibGUpKQogICAgICwgYm9vbGVhblByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihK
U0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpCisgICAgLCBkYXRhVmlld1RhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmRhdGFWaWV3VGFibGUpKQogICAgICwgZGF0ZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkpCiAgICAgLCBkYXRlQ29uc3RydWN0b3JUYWJsZShm
YXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlQ29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBlcnJv
clByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmVycm9yUHJvdG90eXBlVGFi
bGUpKQpAQCAtMjU4LDYgKzI2MSwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0
UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5p
dGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5p
dGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFy
cmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigp
KTsKIH0KIAogVk06On5WTSgpCkBAIC0yODksNiArMjk2LDcgQEAgVk06On5WTSgpCiAgICAgYXJy
YXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBhcnJheUNvbnN0cnVjdG9yVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYm9vbGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJs
ZSgpOworICAgIGRhdGFWaWV3VGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZGF0ZVRhYmxlLT5k
ZWxldGVUYWJsZSgpOwogICAgIGRhdGVDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwog
ICAgIGVycm9yUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CkBAIC0zMDYsNiArMzE0LDcg
QEAgVk06On5WTSgpCiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5
Q29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUq
PihhcnJheVByb3RvdHlwZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihkYXRhVmlld1RhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNo
VGFibGUqPihkYXRlQ29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihlcnJvclByb3RvdHlwZVRhYmxlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRl
ICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dl
bmVyYXRvcnMuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRl
ICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBA
IC02OSwxMyArNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQ2FjaGU7CiAg
ICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNs
YXNzIEZsb2F0MzJBcnJheTsKLSAgICBjbGFzcyBGbG9hdDY0QXJyYXk7CiAgICAgY2xhc3MgSGFu
ZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwotICAgIGNsYXNzIEludDhBcnJh
eTsKLSAgICBjbGFzcyBJbnQxNkFycmF5OwotICAgIGNsYXNzIEludDMyQXJyYXk7CiAgICAgY2xh
c3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgSlNP
YmplY3Q7CkBAIC05MywxMCArODgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVnRXhwOwogI2VuZGlmCi0gICAgY2xhc3MgVWludDhB
cnJheTsKLSAgICBjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLSAgICBjbGFzcyBVaW50MTZBcnJh
eTsKLSAgICBjbGFzcyBVaW50MzJBcnJheTsKICAgICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsK
ICAgICBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU7CkBAIC0yMzAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25z
dCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogYm9vbGVhblByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGFW
aWV3VGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlOwogICAgICAgICBj
b25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBIYXNo
VGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0zOTAsNiArMzgyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAg
ICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7Cisg
ICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxl
cjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2lu
dGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkBAIC00MjgsNTUgKzQyMSw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29u
cygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJP
Zk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9CiAgICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2lu
Y2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQog
Ci0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlw
ZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2Fw
aXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlE
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFz
c0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBl
IyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAg
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBj
b25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0
dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24o
aW50MzIsIEludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgs
IFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVk
LCBVaW50OENsYW1wZWQpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50
MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwg
VWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxv
YXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0
NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRB
cnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheUludDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgICAgIHJl
dHVybiAmaW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNh
c2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAg
ICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBjdXJyZW50
VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgZXhjbHVzaXZl
VGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsKQEAgLTUxMCwxNiArNDU0LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3BlcnR5OwogICAgICAgICBPd25Q
dHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNr
RnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3Ig
bV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2lu
dDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDMy
QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJy
YXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MTZB
cnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDMyQXJy
YXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJh
eURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcjsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDggQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
IAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8q
IE5vTG9jay5oICovOyB9OworCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICov
OyB9OworCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBB
N0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkw
RjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdE
QkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0
aW9uVGhyZWFkLmNwcCAqLzsgfTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5v
TG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02MzAsNiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIz
RkYgLyogRGVjaW1hbE51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZG
IC8qIERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyog
RGVjb2Rlci5oICovLAorCQkJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5o
ICovLAogCQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8s
CiAJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywK
QEAgLTY0OCw2ICs2NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxl
UHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxl
UHJpbnRTdHJlYW0uaCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRB
cnJheS5oICovLAorCQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAq
LywKIAkJCQlBOEE0NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4
QTQ3MkE3MTUxQTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQx
NzMxODc5ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiAr
MTAwMCw3IEBACiAJCQkJQThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21T
b3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBP
d25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNG
IC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1
MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1
MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNGRTE1MUE4MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTEwNTcsNiArMTA2NCw3IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRl
bXBvcmFyeUNoYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEy
M0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRo
cmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZl
cnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEg
dmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBi
ZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlv
dSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFs
ICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmlj
YWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywg
b3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4K
KworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFs
SW5jcmVtZW50ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAg
ICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0g
MTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9y
ZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERl
ZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNy
ZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAg
ICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVm
Q291bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRl
ZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBtX3JlZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3Vu
dDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJs
aWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
ZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAg
ICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBzZXRJc0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVm
ZXJyZWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJy
YWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50
ZWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0ZsaXBCeXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gK
KyNkZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4o
Ym9vbCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxp
dHRsZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30K
KworaW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gKCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+
PiA4KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFs
dWUgJiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+
PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGlu
ZSB1aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFs
dWUgJiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAw
eDAwMDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAw
MDAwMDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYw
MDAwMDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxs
dSkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAy
NCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAg
ICAgICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1Nik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBp
ZiAoc2l6ZW9mKHZhbHVlKSA9PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNp
emVvZih2YWx1ZSkgPT0gMikgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdp
bmFsOworICAgICAgICAgICAgdWludDE2X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1
Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOwor
ICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkg
PT0gNCkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAg
ICAgICAgdWludDMyX3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0g
dmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1
cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkgeworICAg
ICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDY0
X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAg
ICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5h
bDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
VCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpuZWVkVG9GbGlwQnl0
ZXNJZkxpdHRsZUVuZGlhbjsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzOworCisjZW5kaWYgLy8gRmxp
cEJ5dGVzX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7
Ci0gICAgVCBkYXRhOwotICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhfdCkpOwotICAgIGlmICghYnVm
ZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwg
MCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1
aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hl
Y2tlZExlbmd0aDsKLSAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tl
ZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCkpOwotfQotCi1EYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQot
ICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxl
bmd0aChieXRlTGVuZ3RoKQotewotfQotCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9v
bCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRs
ZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQot
aW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1w
ID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZs
aXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBC
eXRlcyhwLCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRp
YyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBw
ICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAy
LCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVF
bmRpYW4pCi17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZs
aXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAg
ICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA4OgotICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0
YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291
bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQg
dW5hbGlnbmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5i
eXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNl
dCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9m
KFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0
byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJv
ciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgot
ICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAg
IGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRp
YW4pOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRl
T2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmll
dzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVp
bnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4g
Z2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWlu
dDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2
X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3
OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBn
ZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91Ymxl
IERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5
dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQot
Ci12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZz
ZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7
Ci19Ci0KLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3Ojpu
ZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIERhdGFWaWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
Ci0KLWNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShp
bnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWlu
dDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90
IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0g
ICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRV
aW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3Qg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQo
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFu
Z2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5
dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1bnNpZ25l
ZCBtX2J5dGVMZW5ndGg7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIERhdGFWaWV3X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208484</attachid>
            <date>2013-08-10 17:21:07 -0700</date>
            <delta_ts>2013-08-10 18:52:18 -0700</delta_ts>
            <desc>starting to pass tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>456761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1NyBA
QAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEkgcmV3cm90ZSB0eXBlZCBhcnJheXMu
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEpTQ1R5cGVkQXJy
YXlTdHVicy5oOiBSZW1vdmVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6CisgICAgICAg
IChKU0M6Omhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8pOgorICAgICAgICAoSlND
OjpqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8pOgorICAgICAgICAoSlNDOjp0eXBlZEFycmF5VHlw
ZUZvckpJVEFycmF5TW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAqIGRm
Zy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRvVHlwZWRBcnJheVR5cGUp
OgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJh
eU1vZGU6OnR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJy
YXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAgICAqIGhlYXAvRGVmZXJHQy5oOgorICAgICAg
ICAoSlNDOjpEZWZlckdDRm9yQVdoaWxlOjpEZWZlckdDRm9yQVdoaWxlKToKKyAgICAgICAgKEpT
Qzo6RGVmZXJHQ0ZvckFXaGlsZTo6fkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAqIGhlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDSW5jb21pbmdS
ZWZDb3VudGVkOjpHQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5jb21p
bmdSZWZDb3VudGVkOjp+R0NJbmNvbWluZ1JlZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpHQ0lu
Y29taW5nUmVmQ291bnRlZDo6bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAo
SlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6aW5jb21pbmdSZWZlcmVuY2VBdCk6CisgICAgICAg
IChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpzaW5nbGV0b25GbGFnKToKKyAgICAgICAgKEpT
Qzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc1ZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzQW55SW5jb21pbmcpOgorICAgICAgICAoSlNDOjpH
Q0luY29taW5nUmVmQ291bnRlZDo6aGFzU2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNv
bWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZD
b3VudGVkOjp2ZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjphZGRJbmNvbWluZ1JlZmVyZW5j
ZSk6CisgICAgICAgIChKU0M6Ojo6ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpH
Q0luY29taW5nUmVmQ291bnRlZFNldDo6c2l6ZSk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5n
UmVmQ291bnRlZFNldElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQpOgorICAgICAgICAoSlNDOjo6On5HQ0luY29taW5nUmVmQ291bnRlZFNl
dCk6CisgICAgICAgIChKU0M6Ojo6YWRkUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6Ojpzd2Vl
cCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3ZlQWxsKToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVE
ZWFkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRS
ZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpleHRyYVNpemUpOgorICAgICAgICAoSlND
OjpIZWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOgorICAgICAgICAo
SlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJy
YWxEZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRH
Q0lmTmVlZGVkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKToK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRU
eXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoSlND
OjpBcnJheUJ1ZmZlcjo6dHJhbnNmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQpOgorICAgICAgICAo
SlNDOjpBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
cjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnBp
bik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp1bnBpbik6CisgICAgICAgIChKU0M6OkFy
cmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZm
ZXJWaWV3KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKToKKyAgICAg
ICAgKiBydW50aW1lL0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmlzTmV1dGVyZWQpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZl
cik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YmFzZUFkZHJlc3MpOgorICAgICAg
ICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJW
aWV3OjpjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xh
c3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9EYXRhVmlldy5jcHAuCisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpjcmVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRGF0YVZpZXcuaC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmJ5dGVMZW5n
dGgpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0VHlwZSk6CisgICAgICAgICogcnVudGlt
ZS9GbG9hdDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0NjRBcnJheS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmRhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzo6c2V0UmFuZ2UpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Onplcm9S
YW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppdGVtKToKKyAgICAgICAgKEpTQzo6R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91bmREYXRhKToKKyAgICAgICAgKEpTQzo6R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnN1YmFycmF5KToKKyAgICAgICAg
KiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVy
OjphcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBcnJheUJ1
ZmZlcik6CisgICAgICAgICogcnVudGltZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGlt
ZS9JbnQzMkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlcjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3du
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyOjppbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6Omdl
dENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmZpbmFsaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6c2l6ZU9mKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0
OjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNv
bnN0cnVjdGlvbkNvbnRleHQ6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojptb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OmJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3Ojptb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKToKKyAgICAgICAgKiBydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6aW1wbCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAg
ICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNsb3dEb3duQW5k
V2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KToKKyAg
ICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmll
dzo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OnNldCk6
CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChK
U0M6OkpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3UHJvdG90eXBlKToKKyAg
ICAgICAgKEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6Z2V0RGF0YSk6CisgICAgICAgIChKU0M6OnNldERhdGEpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY0dldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dl
dEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMik6CisgICAg
ICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY0dldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
R2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90
b0Z1bmNTZXRJbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIp
OgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0Rmxv
YXQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCk6CisgICAg
ICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNGbG9hdDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0Zsb2F0
NjRBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0
ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlU2l6
ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp0eXBlZFZlY3Rvcik6
CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5HZXRJbmRleFF1aWNr
bHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuU2V0SW5kZXhR
dWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldzo6Z2V0SW5kZXhRdWlja2x5QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUpOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9Eb3VibGUpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkFjY2Vzc1JhbmdlUXVp
Y2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlldyk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6Ojo6Z2V0Q2Fs
bERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAg
ICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAoSlNDOjo6OnZhbGlkYXRlUmFuZ2UpOgorICAgICAgICAoSlNDOjo6OnNl
dFdpdGhTcGVjaWZpY1R5cGUpOgorICAgICAgICAoSlNDOjo6OnNldCk6CisgICAgICAgIChKU0M6
Ojo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6Ojo6ZGVmaW5l
T3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpwdXRC
eUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgorICAgICAg
ICAoSlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6Ojo6
Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6Ojo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6Ojo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ojo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ojo6Z2V0VHlwZWRBcnJheUltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDogQWRk
ZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlu
bGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY1NldCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1N1
YmFycmF5KToKKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZSk6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjo6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0Ojp0eXBlZEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTSW50
MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50MzJBcnJheS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9K
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBl
ZEFycmF5cy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDE2QXJyYXkuaDogQWRkZWQuCisgICAgICAg
ICogcnVudGltZS9KU1VpbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNV
aW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJh
eS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcjo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNJbmRleGlu
Z0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkludGVncmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToKKyAg
ICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAg
ICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAo
SlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OkZs
b2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlw
ZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRh
cHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0pT
VmFsdWUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OmNsYW1wKToKKyAgICAgICAgKiBydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlR5cGVk
QXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlR5
cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAqIHJ1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9U
eXBlZEFycmF5RGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRB
cnJheVR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y2xhc3NJbmZvRm9yVHlwZSk6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJh
eVR5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OnRvSW5kZXgpOgorICAgICAgICAoSlNDOjpp
c1R5cGVkVmlldyk6CisgICAgICAgIChKU0M6OmVsZW1lbnRTaXplKToKKyAgICAgICAgKEpTQzo6
aXNJbnQpOgorICAgICAgICAoSlNDOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6aXNTaWduZWQp
OgorICAgICAgICAoSlNDOjppc0NsYW1wZWQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJh
eXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9VaW50MTZBcnJheS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVWludDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQ4QXJyYXkuaDoK
KyAgICAgICAgKiBydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0p
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0wOCAgTWFyayBMYW0gIDxtYXJr
LmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVzdG9yaW5nIHVzZSBvZiBTdGFja0l0ZXJhdG9y
IGluc3RlYWQgb2YgSW50ZXJwcmV0ZXI6OmdldFN0YWNrdHJhY2UoKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAg
ICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAg
SlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAg
SlNHbG9iYWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAuaCBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNTM3NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKU0NUeXBlZEFycmF5U3R1YnNfaAotI2RlZmluZSBKU0NU
eXBlZEFycmF5U3R1YnNfaAotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAi
RmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkludDMy
QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJs
ZU9iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKLSNpbmNsdWRlICJVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQzMkFycmF5
LmgiCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQ4Q2xhbXBlZEFycmF5
LmgiCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAK
LSNkZWZpbmUgVFlQRURfQVJSQVkobmFtZSwgdHlwZSkgXAotY2xhc3MgSlMjI25hbWUjI0FycmF5
IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsgXAotcHVibGljOiBcCi0gICAgdHlwZWRl
ZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCi0gICAgc3RhdGljIEpTIyNuYW1lIyNBcnJh
eSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKLSAgICB7IFwKLSAgICAg
ICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxs
PEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFtZSMjQXJy
YXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAotICAgICAgICByZXR1cm4gcHRyOyBcCi0g
ICAgfVwKLVwKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1wKLSAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGlj
IHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCi0g
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1wKLVwKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKLSAgICB7XAotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pO1wK
LSAgICB9XAotXAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1wKLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCopO1wKLVwKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBlZEFycmF5
VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OlR5cGVkQXJyYXkjI25hbWU7XAotICAg
IHVpbnQzMl90IG1fc3RvcmFnZUxlbmd0aDtcCi0gICAgdHlwZSogbV9zdG9yYWdlO1wKLSAgICBS
ZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1wbDtcCi1wcm90ZWN0ZWQ6XAotICAgIEpTIyNuYW1lIyNB
cnJheShKU0M6OlN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxuYW1lIyNB
cnJheT4pO1wKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcCi0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVu
TGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsgXAotICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1wKLSAgICB2b2lkIGluZGV4U2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XAotfTtcCi1cCi1jb25zdCBD
bGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNuYW1lICJBcnJheSIgLCAmQmFz
ZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyNuYW1lIyNBcnJheSkgfTtc
Ci1cCi1KUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4g
aW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKVwKLSAgICAs
IG1faW1wbChpbXBsKVwKLXtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSlcCi17XAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcCi0gICAg
VHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlMjI25hbWUjI0FycmF5OjpzX2luZm8s
IE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZT
RVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpO1wKLSAgICB2bS5yZWdpc3Rl
clR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRvcik7XAotICAgIG1f
c3RvcmFnZSA9IG1faW1wbC0+ZGF0YSgpO1wKLSAgICBtX3N0b3JhZ2VMZW5ndGggPSBtX2ltcGwt
Pmxlbmd0aCgpO1wKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVu
dW0pOyBcCi0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcCi19XAotXAotYm9vbCBKUyMj
bmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClc
Ci17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMj
QXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAg
ICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcCi0g
ICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+
bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KTtcCi0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2Jq
ZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgRG9udERlbGV0ZSk7XAotICAgICAgICByZXR1
cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcCi19XAotXAotYm9v
bCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
UyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICBpZiAocHJvcGVydHlOYW1lIDwgdGhpc09iamVj
dC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qt
PmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XAotICAgICAgICByZXR1cm4gdHJ1ZTtc
Ci0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KSB7XAotICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRl
cihleGVjLCBpbmRleCwgdmFsdWUpO1wKLSAgICAgICAgcmV0dXJuO1wKLSAgICB9XAotICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTtcCi19
XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKSBcCi17XAotICAgIG1faW1w
bC0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XAotfVwKLVwKLXZvaWQgSlMjI25h
bWUjI0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXAote1wKLSAgICBKUyMjbmFt
ZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4oY2VsbCk7XAot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAg
IHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpO1wKLSAg
ICByZXR1cm47XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVwKLXtcCi0gICAgSlMjI25hbWUj
I0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGg7ICsr
aSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
O1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpTIyNuYW1lIyNBcnJheTo6Z2V0QnlJ
bmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17XAotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7XAotICAgIHR5cGUgcmVzdWx0ID0gbV9pbXBsLT5p
dGVtKGluZGV4KTtcCi0gICAgaWYgKHN0ZDo6aXNuYW4oKGRvdWJsZSlyZXN1bHQpKVwKLSAgICAg
ICAgcmV0dXJuIGpzTmFOKCk7XAotICAgIHJldHVybiBKU1ZhbHVlKHJlc3VsdCk7XAotfVwKLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTIyNuYW1lIyNBcnJh
eShFeGVjU3RhdGUqIGNhbGxGcmFtZSkgeyBcCi0gICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkgXAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOyBcCi0gICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvSW50
MzIoY2FsbEZyYW1lKTsgXAotICAgIGlmIChsZW5ndGggPCAwKSBcCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNhbGxGcmFtZS0+dm0oKSwgY2Fs
bEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7IFwKLSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IGJ1
ZmZlciA9IG5hbWUjI0FycmF5OjpjcmVhdGUobGVuZ3RoKTsgXAotICAgIGlmICghYnVmZmVyKSBc
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVSYW5nZUVycm9y
KGNhbGxGcmFtZSwgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0
aXZlIGludGVnZXIuIikpOyBcCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyMjbmFtZSMj
QXJyYXk6OmNyZWF0ZShzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LCBidWZmZXIucmVsZWFzZSgpKSk7IFwKLX0KLQotVFlQRURfQVJSQVkoVWludDgsIHVpbnQ4X3Qp
OwotVFlQRURfQVJSQVkoVWludDhDbGFtcGVkLCB1aW50OF90KTsKLVRZUEVEX0FSUkFZKFVpbnQx
NiwgdWludDE2X3QpOwotVFlQRURfQVJSQVkoVWludDMyLCB1aW50MzJfdCk7Ci1UWVBFRF9BUlJB
WShJbnQ4LCBpbnQ4X3QpOwotVFlQRURfQVJSQVkoSW50MTYsIGludDE2X3QpOwotVFlQRURfQVJS
QVkoSW50MzIsIGludDMyX3QpOwotVFlQRURfQVJSQVkoRmxvYXQzMiwgZmxvYXQpOwotVFlQRURf
QVJSQVkoRmxvYXQ2NCwgZG91YmxlKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVU
aHJlYWRpbmcuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKLSNpbmNsdWRlICJKU0NUeXBlZEFycmF5U3R1YnMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5oIgpAQCAtMjM4LDE2
ICsyMzcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiY2xlYXJTYW1w
bGluZ0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOwogI2VuZGlmCiAgICAg
ICAgIAotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OEFycmF5Iiwg
Y29uc3RydWN0SlNVaW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0
aW9uKHZtLCAiVWludDhDbGFtcGVkQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4Q2xhbXBlZEFycmF5
LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDE2QXJyYXki
LCBjb25zdHJ1Y3RKU1VpbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1
bmN0aW9uKHZtLCAiVWludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQzMkFycmF5LCAxKTsKLSAg
ICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50OEFycmF5IiwgY29uc3RydWN0
SlNJbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJ
bnQxNkFycmF5IiwgY29uc3RydWN0SlNJbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3Ry
dWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MzJBcnJheSIsIGNvbnN0cnVjdEpTSW50MzJBcnJheSwg
MSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkZsb2F0MzJBcnJheSIs
IGNvbnN0cnVjdEpTRmxvYXQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1
bmN0aW9uKHZtLCAiRmxvYXQ2NEFycmF5IiwgY29uc3RydWN0SlNGbG9hdDY0QXJyYXksIDEpOwot
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxFeGVj
KCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7
ICsraSkKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxFeGVjKCksIGks
IGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1lbnRzW2ldKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTExOCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNC
MUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4
MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0Yy
NzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUMxN0I2QjUz
RjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQTE3QjZC
NTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERh
dGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi87IH07CisJCTBGMkI2
NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFW
aWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjIxN0I2QjVB
QjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAv
KiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsKKwkJMEYy
QjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNw
cCAqLzsgfTsKKwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkU2
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI4MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTcxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI5MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi87
IH07CisJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJEMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RUMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFRTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMxMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cCAqLzsgfTsKKwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkZD
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovOyB9OworCQkw
RjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAv
KiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFw
dG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA3MTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29u
dHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi87IH07CisJCTBGMkI2
NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwogCQkwRjJCREMxNjE1
MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0Zp
eHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4
MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OSw3ICszOTksNiBAQAogCQkwRkVBMEEzMjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1v
bkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUIzRUNEMTYyMzdGNEQw
MEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRUNF
MTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGRUZDOUFB
MTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE3MTY4MUEzQjAw
MDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5
QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE4MTY4MUEzQjAw
MDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNCw4ICs4NzMsNiBAQAogCQlBN0E4
QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50
OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJEMTdBREI1
RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFs
VHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdB
OEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzAxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhD
bGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQxMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTEyMDcsNiArMTI1NCw1NiBAQAogCQkwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09T
UkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyog
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QUIxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFWaWV3LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFWaWV3Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIz
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90
b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmll
d1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMwMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MzJBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNFMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZE
ODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFy
cmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkREMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8q
IERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU0OCw2IEBACiAJCTBGRUEwQTJFMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUu
Y3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3
QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUZD
OUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODgyLDcgKzE5NzgsNiBAQAogCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4
OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3QjVCNDE3
QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRB
cnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJy
YXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhE
MDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAu
Y3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTI3LDggKzIwMjIsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQg
LyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FE
QjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdB
OEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjYwLDcgKzIzNTMsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBq
c2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywK
IAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAq
LywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmgg
Ki8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2VzLm1ha2Ug
Ki8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0
b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKQEAgLTI1
NTYsNiArMjY0OCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMu
aCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODI4LDYgKzI5MjQsNTIgQEAKIAkJN0VGNkUw
QkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmll
dy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8s
CisJCQkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovLAorCQkJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXIuY3BwICovLAorCQkJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyLmggKi8sCisJCQkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oICovLAorCQkJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJCNjZCOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovLAorCQkJCTBGMkI2NkJBMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QkIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi8sCisJCQkJMEYyQjY2QkMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAorCQkJCTBGMkI2
NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCRTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oICovLAorCQkJCTBGMkI2NkJGMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJCNjZDMDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovLAorCQkJCTBGMkI2NkMxMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkMyMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAorCQkJCTBGMkI2NkMzMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovLAorCQkJCTBGMkI2NkM0MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggKi8s
CisJCQkJMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3JJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovLAorCQkJCTBGMkI2NkM3MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovLAorCQkJ
CTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5
LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICov
LAorCQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuY3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQz
MkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyog
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjJCNjZEQjE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5
QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyog
QXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMu
Y3BwICovLApAQCAtMjkyMCw3ICszMDYyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8q
IEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMzA3OCw4ICszMjE5LDYgQEAKIAkJCQkxNEEz
OTZBNjBDRDI5MzMxMDBCNUI0RkYgLyogU3ltYm9sVGFibGUuaCAqLywKIAkJCQk1RDUzNzI2RDBF
MUM1NDZCMDAyMUU1NDkgLyogVHJhY2luZy5kICovLAogCQkJCTVENTM3MjZFMEUxQzU0ODgwMDIx
RTU0OSAvKiBUcmFjaW5nLmggKi8sCi0JCQkJQTdBOEFGMkYxN0FEQjVGMzAwNUFCMTc0IC8qIFR5
cGVkQXJyYXlCYXNlLmggKi8sCi0JCQkJMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggKi8sCiAJCQkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVp
bnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldp
dGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJB
cnJheS5oICovLApAQCAtMzUzOCwxMiArMzY3NywxNSBAQAogCQkJCUJDMThDNTI0MEUxNkZDOEEw
MEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3Vu
dGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcgLyogQXNz
ZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NEEy
NjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODE2RTFDMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0Fs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8q
IEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzBCMTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVE
OEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgx
NUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM1NTUsNiArMzY5Nyw3IEBACiAJCQkJQTdDMUVBRUYxNzk4N0FCNjAwMjk5
REIyIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1RTNCQzA1MEUx
QUU2ODIwMEIyRDFDMSAvKiBDYWxsSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyog
Q2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4
NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNTY2LDYgKzM3MDksNyBAQAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAv
KiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4
MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0QkU3MjdB
MDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAgLyogQ29t
bW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVE
RTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3Niw2ICszNzIw
LDcgQEAKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2
YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNjBFMTZGNUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1IC8qIENv
cGllZEJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MDQsNiArMzc0OSw3IEBACiAJCQkJMEY2
NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNpcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUzNENCQUYw
MDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE2
MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5
aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxNyw2ICszNzYzLDcg
QEAKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAvKiBERkdCcmFu
Y2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMyOERGODIwMDJCMkFE
NyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjU2
QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERG
R0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEExNEMzQ0QyOTAwN0Mz
REIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjUwLDYgKzM3OTcs
NyBAQAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkExN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNkM0RDEzNkExMUU0
MDA5NjMwMTIgLyogREZHRlBSSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjgxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlE
QzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2NTgsNiArMzgwNiw3IEBACiAJCQkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJD
IC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5RENDMTMyOERGODIwMDJC
MkFENyAvKiBERkdKSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzkxNzk3
MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzNBNTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MSw2ICszODIwLDcgQEAKIAkJ
CQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQTU4MUJCMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTU4MUJDMTUwRTk1MzAw
MEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDAxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5
Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2ODQsNiArMzgzNCw4IEBACiAJCQkJMEYyMzVCRUUxNzE3OEU3
MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzhBOTc3QjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTggLyogREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1RTE0
RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY5Myw2ICszODQ1LDcgQEAKIAkJCQlBNzQxMDE3RjE3OURB
RjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJv
YXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0UgLyogREZH
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMDE3
QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Ns
b3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMzEzMjhERjgyMDAy
QjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovLApAQCAtMzcyNiw2ICsz
ODc5LDcgQEAKIAkJCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhw
cmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBl
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzQ2LDYgKzM5MDAsNyBAQAogCQkJCTBGRUEwQTJDMTcw
QjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEwRTE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3ODEx
Nzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZUTExpbmsuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzc5NCw3ICszOTQ5LDYgQEAKIAkJCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QThBRjNEMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg4NTNG
QTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODEzLDYgKzM5NjcsNyBAQAogCQkJCTBGNzY2RDMxMTVB
QTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RTE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk0u
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVi
c0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E0QUUwRDE3OTczQjREMDA1NjEyQjEgLyog
SklUU3R1YnNNSVBTLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NDAsNiArMzk5NSw3IEBACiAJCQkJ
QkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlB
ZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2
M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4
MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLApA
QCAtMzg1NSw2ICs0MDExLDcgQEAKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNM
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNN
YW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4
NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDI1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTcyODBBMjgxMTU1N0UzMDAwRDU2OTU3IC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zODY2LDYgKzQwMjMsNyBAQAogCQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4
NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1
N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYwMTc5ODdB
QjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODQs
NiArNDA0Miw3IEBACiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1h
Y2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2
QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY3MDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5
QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAw
NkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTE0LDYgKzQwNzMs
NyBAQAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3Bl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNzBFMTZGNUNE
MDBCMzQ0NjAgLyogTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDRDE0QkJCMTdE
MDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRC
NzIzQjgxMkQ3REE2RjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zOTI2LDYgKzQwODYsNyBAQAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NzAyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyogTWFya2Vk
QWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBCMDJFODYg
LyogTWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1
QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTM0LDE0ICs0MDk1
LDE3IEBACiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJl
c3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYwIC8qIE1h
dGhPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyQTBFMTZG
Q0MyMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkwMjEz
RTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTIxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUJGMzAwMTU2MEYwNkEw
MDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUJGMzAy
MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RUJGMzA0MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjkyOTcgLyogTmF0
aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcw
MDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUZGMDA2
NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzk3MSw2
ICs0MTM1LDcgQEAKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNDE0RTFCNjAw
MDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8q
IFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0
NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUz
NThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzk5OSw5ICs0MTY0
LDExIEBACiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXRE
aXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRl
c3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEw
RTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0Yx
MUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Qy
MDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LApAQCAtNDAyNCw2ICs0MTkxLDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyog
U2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZF
NkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNE
MDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDYz
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDM2LDcgKzQyMDQsOSBAQAogCQkJCTE0REYw
NERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVydHlBbmFs
eXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIxIC8qIFN0
cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY2
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJp
bmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTI2MEUxNkZDQTcwMEIzNDQ2
MCAvKiBTdHJpbmdQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNDgsNiArNDIx
OCw4IEBACiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyogU3RydWN0
dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0Q0E3RERE
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRjE3
QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNFIC8qIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Yw
RDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDU3LDkgKzQyMjksMTAgQEAKIAkJCQkwRjU3MkQ0RjE2
ODc5RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NzAzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVENTM3MjZGMEUxQzU0ODgw
MDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRTE3QURCNUYz
MDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRUIzRUNE
MTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZf
ZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyog
dWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDg5LDYgKzQ2NjIsNyBAQAogCQkJ
CTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlF
RTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY4OCw3IEBACiAJCQkJQTdEODlD
RjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZG
MDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MTgsNyBAQAog
CQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Miw3IEBACiAJCQkJQzIx
MTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0
dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFG
QURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBB
NjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3
MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSAr
NDg0NSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05h
bWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcg
LyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmls
ZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhE
NyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2
NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00NjkwLDYgKzQ4NjksNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcx
MiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIg
LyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1
MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdG
MCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3
OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAw
Q0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYw
ODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDc2MiwxNyArNDk0MywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAv
KiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMx
Njc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hl
ZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIg
LyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBS
ZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAw
NzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZF
ODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMw
NkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNB
RkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0OTkwLDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhD
MDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAw
NkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQw
NTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBp
bmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhh
c09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5
cGVkQXJyYXlOb25lOworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmco
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5
TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1v
ZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNo
IChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJh
eUludDg6CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsK
LSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAg
cmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2Fz
ZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlw
ZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWlu
dDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBl
VWludDhDbGFtcGVkOgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAg
Y2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0
dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNl
IFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5
cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBK
SVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlw
ZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJu
IFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJ
bnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7
CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAg
IGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFt
cGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2
OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOwor
ICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7Cisg
ICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJh
eTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhp
bmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVj
dWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZK
U0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwogICAgIAot
ICAgIGlmIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9u
ZSkgewotICAgICAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7
Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0lu
dDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICByZXR1
cm4gU3BlY0ludDE2QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50
ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRB
cnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNVaW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5Rmxv
YXQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OwotICAgICAgICBjYXNl
IFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0QXJyYXk7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHN3
aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFycmF5OworICAgIGNhc2UgVHlwZUludDMyOgorICAg
ICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAg
IHJldHVybiBTcGVjVWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAg
ICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDE2Ogor
ICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAg
ICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAg
ICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAg
ICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVj
dDo6c19pbmZvKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBjb25zdCBj
aGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJhCiAgICAgfQogfQogCitUeXBlZEFycmF5
VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUlu
dDg7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQx
NjsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDMy
OworICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7
CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDhDbGFtcGVkOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1
cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0
dXJuIFR5cGVVaW50MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5vdFR5
cGVkQXJyYXk7CisgICAgfQorfQorCiB2b2lkIEFycmF5TW9kZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewogICAgIG91dC5wcmludCh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3Vs
YXRpb24oKSwgY29udmVyc2lvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIGNv
bnN0IGNoYXIqIGFycmF5Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIqIGFycmF5
U3BlY3VsYXRpb25Ub1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOwogY29uc3QgY2hhciogYXJy
YXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOwogCitUeXBlZEFycmF5VHlw
ZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlKTsKKwogY2xhc3MgQXJyYXlNb2RlIHsKIHB1
YmxpYzoKICAgICBBcnJheU1vZGUoKQpAQCAtMzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6OlN0cmluZzsKICAgICB9CiAgICAgCisgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvVHlwZWRBcnJheVR5cGUodHlwZSgpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
dHlwZSgpID09IG90aGVyLnR5cGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjY3LDM3ICsyNjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRB
cnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAg
aWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckludFR5
cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODczLDQ2ICsyODQ5LDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51
aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVp
bnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5
VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAo
aXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRB
cnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5
KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTgwLDM3ICsyNTgwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCks
IG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUg
dHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0K
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODcxLDQ2ICsyODQ3LDEzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZt
KCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlw
ZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
dHlwZSk7CisgICAgICAgIH0gfQogCiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDMyICs1ODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgfQogfQogICAgIAotY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1v
ZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgcmV0
dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6
OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIHJl
dHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDMyQXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5
OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5TW9kZSBhcnJheU1vZGUsIEluZGV4aW5nVHlw
ZSBzaGFwZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKQEAgLTY5
NCw4ICs2NjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUo
KSk7Ci0gICAgCiAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0
LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAg
ICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC03MjcsMjIg
KzY5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1
bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5t
X2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFz
c0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0lu
Zm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQ
dHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI1OTQsOCArMjU1NywxMCBAQCBzdGF0
aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5
cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjEyLDE2ICsyNTc3LDE3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxh
dGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3Jp
cHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
ICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkp
CisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2ln
bmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVk
VHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9q
aXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1
bHRSZWcpOwpAQCAtMjYzMiwxMiArMjU5OCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0g
ICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkp
IHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09
IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQg
JiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3Vs
dFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0
UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTIs
OCArMjYxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAg
ICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2Rl
KiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQo
dHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOwogICAgIApAQCAtMjY3MCw4ICsyNjM4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRp
bmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09
IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5
dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBA
IC0yNjg2LDggKzI2NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcg
PT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9
PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGls
ZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI2OTYsOCArMjY2NCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRp
bmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6
ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBv
cmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0yNzE3LDcgKzI2ODUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxp
bmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2ln
bmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQz
MihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5j
aElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0Miw5ICsyNzEwLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdl
UmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRP
ZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0
b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAt
Mjc2Miw4ICsyNzMwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0y
Nzc5LDggKzI3NDksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZs
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRv
RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDEsOCArMjc3MiwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1l
bnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2Rl
LCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAt
MjgxNywxMCArMjc5MCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5
Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9k
ZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7
CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAg
ICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00
MDI2LDggKzQwMDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFBy
CiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAg
IAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQw
NDEsOCArNDAxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFBy
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQo
ZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7Cisg
ICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlw
ZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSks
CisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApA
QCAtNDE0Myw4ICs0MTE5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3Vt
ZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSog
bm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5
cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgpAQCAtNDE4NCwxNiArNDE1OCwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5n
dGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1
bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVk
QXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7
CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3Jp
cHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5l
c3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRp
bmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVt
ZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwg
VHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRB
cnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNv
bXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBF
ZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURl
c2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xv
d0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJy
YXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xv
d0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJy
YXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNv
cHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29w
eVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0
ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBE
ZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAg
eworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAK
KyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50
RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3Vu
dGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0
IHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5j
b21pbmcgcmVmZXJlbmNlcyBmcm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8g
cmV2ZXJzZTogdGhlIG9iamVjdCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBv
YmplY3RzIGFsc28KKy8vIGhhdmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSBy
ZWZlcmVuY2VzIGJhY2sgaW50byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291
bnRlZDxUPiB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6
IG1fZW5jb2RlZFBvaW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5n
UmVmQ291bnRlZCgpCisgICAgeworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAg
ICAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90
IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aGFzQW55SW5jb21pbmcoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFz
U2luZ2xldG9uKCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rv
ck9mQ2VsbHMoKS0+c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVm
ZXJlbmNlQXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0Fu
eUluY29taW5nKCkpOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9Cisg
ICAgCisgICAgLy8gSXQncyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBk
aXJlY3RseSwgc2luY2UgaWYgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBv
c2VkIHRvIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBh
ZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5j
dGlvbiByZXR1cm5zIHRydWUgaWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8v
IHJlZmVyZW5jZSwgYW5kIGZhbHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9i
amVjdCwKKyAgICAvLyBhbmQgaWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdl
bmVyYWwsIHlvdSBkb24ndCB3YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBm
dW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28g
d2Fsa2luZyB0aGUgR0MncyBsaXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0
aW9uVHlwZT4KKyAgICBib29sIGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlv
blR5cGUmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25G
bGFnKCkgeyByZXR1cm4gMTsgfQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNv
bnN0IHsgcmV0dXJuICEobV9lbmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAg
ICBib29sIGhhc0FueUluY29taW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVy
OyB9CisgICAgYm9vbCBoYXNTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWlu
ZygpICYmICFoYXNWZWN0b3JPZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRv
bigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xl
dG9uRmxhZygpKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNl
bGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPio+KG1fZW5jb2RlZFBv
aW50ZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMg
aXMgYSBKU0NlbGwqLgorICAgIC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBw
b2ludGVyIHRvIGEgdmVjdG9yIG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2lu
dGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVm
Q291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAor
I2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRk
SW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21p
bmcoKSkgeworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oY2VsbCkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQo
dHJ1ZSk7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5j
ZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9u
KCkpIHsKKyAgICAgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2Vs
bCo+KCk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVj
dG9yLT5hcHBlbmQoY2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxz
KCktPmFwcGVuZChjZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5j
b21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rp
b25UeXBlJiBmaWx0ZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsK
KyAgICAgICAgQVNTRVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NFUlQodGhp
cy0+cmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAor
ICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAKKyAgICBpZiAoaGFzU2lu
Z2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNpbmdsZXRvbigpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2VuY29kZWRQ
b2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAg
cmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0
b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0
KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0g
MikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxs
cygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICAg
ICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmco
KSk7CisgICAgICAgIHJldHVybiB0aGlzLT5zZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9Cisg
ICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxzKCktPmF0KDApOworICAg
IGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJU
KGhhc1NpbmdsZXRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRl
ZFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisK
KyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVCA9IHNvbWUgc3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwgbXVzdCBzdXBwb3J0
IGEgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6CisgICAgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3IHRvIHRo
aXMgc2V0LgorICAgIGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2
b2lkIHN3ZWVwKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzOyB9OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVBbGwoSlNDZWxs
Kik7CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAgICAKKyAgICBWZWN0
b3I8VCo+IG1fdmVjdG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAg
ICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46
OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVj
dC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3ZlY3Rvci5hcHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9IG9iamVjdC0+Z2NTaXpl
RXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBU
KiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdj
U2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVjdC0+ZmlsdGVySW5jb21p
bmdSZWZlcmVuY2VzKHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG1fYnl0ZXMgLT0gc2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9yLmxhc3Qo
KTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZUFsbChK
U0NlbGwqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxsKiBjZWxs
KQoreworICAgIHJldHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
V29ya2xpc3QuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0
b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgpAQCAtMzU4LDYgKzM1OSwxNCBAQCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29k
ZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7
CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIq
IGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1
ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBk
aWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisK
IHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9v
dFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3Rl
Y3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwxNCArNjMwLDE5IEBAIHNpemVfdCBIZWFwOjpvYmpl
Y3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAor
c2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7CisgICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2Fn
ZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKK30KKwogc2l6ZV90IEhlYXA6OnNpemUoKQogewot
ICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSAr
IG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBt
X3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNh
cGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9y
YWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgp
ICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3Qg
SGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1LDYgKzc1OSwxMSBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFW
QVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3
ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAg
ICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFj
ZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAtOTI0LDEyICs5NDMsMTYgQEAgdm9pZCBIZWFw
OjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAot
dm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhl
YXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVm
ZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30K
Kwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7Cisg
ICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNp
bmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5j
bHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVk
ZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERh
dGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpA
QCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9p
ZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAg
IHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFn
ZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwog
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwx
MSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91
YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0
JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciog
YnVmZmVyKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNz
IERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9yQVdoaWxlOwogICAgICAg
ICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmllbmQgY2xh
c3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CkBAIC0y
MzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yJiBi
bG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJh
bERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgICAg
ICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAgICAgICAg
Y29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKICAgICAgICAg
TWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9yYWdl
U3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2Fy
cmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKIAogI2lmIEVO
QUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0
dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KICAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxG
cmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlw
ZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRhVmlld1Rh
YmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQogICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRh
YmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclBy
b3RvdHlwZVRhYmxlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4Miw4ICs0ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1p
dERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3Vv
dXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0
SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVk
QXJyYXlTaWduZWRuZXNzKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgICAgICBKdW1wTGlzdCBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFy
cmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFy
cmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFz
ZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KICAgICAgICAgLy8g
VGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hl
Y2tlZCBhbmQKQEAgLTUwMyw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
ICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0g
Q29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBM
aXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7Ci0gICAgICAgIEp1
bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1l
bnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAg
ICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAg
ZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSwzNSArMTU0OSwxMyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0
b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwg
MSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1w
ZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJB
cnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2
NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9y
KCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwor
ICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1v
ZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlw
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CkBAIC0xNjE4LDM1ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlw
ZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
SW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9y
KCksIDQsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50
OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRp
bmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVu
c2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRy
dW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAg
ICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAg
ICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsxNjIzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVu
Y3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJp
YykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICAvLyBUaGUgYmVz
dCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5mby4gV2Ug
bmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIgdGhh
dCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5LgogCkBAIC0xNjg5
LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFk
ZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUo
dHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
KSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
ZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAg
IHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBl
KSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGlt
ZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25l
ZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxv
YWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5
bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwg
cHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2NzEsNyBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogICAgIAog
ICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09
IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAgIGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKICAg
ICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0
UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgCiAgICAgICAgIGNvbnZlcnRJbnQz
MlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3LDEwIEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICByZXR1cm4gc2xv
d0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFz
ZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKQEAgLTE3NTgsMTEg
KzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0lu
Zm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVz
cyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJl
OjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBl
KSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0
eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVj
dG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dp
dGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgbG9hZEZsb2F0
KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAgICAg
IGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4ICsxNzQ4
LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICByZXR1
cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVf
dCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJh
eVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkp
OworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4LDggKzE3NjksOCBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQo
KSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBk
ZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlT
Y3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBp
bnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBw
YXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGlu
ZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVzcyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAg
aWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkg
PT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0z
MigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVh
cmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3Jh
dGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3LDcgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwog
ICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRj
aCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKICAgICAgICAg
YnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBB
U1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4NzIs
OCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gs
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0Zv
clR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVu
Z3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5OCw5ICsxODYxLDkgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxk
IGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQg
dGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQu
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwg
bGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2Ug
NDoKICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CiAgICAg
ICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAog
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxNCArMjYsMTMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogCi0jaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGtlZXBBbGl2ZSh0aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6
dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZm
ZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAg
IGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFi
bGUgPSBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc05ldXRlcmFibGUgPSAhbV9waW5Db3VudDsK
IAotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCisgICAgaWYgKGlzTmV1dGVyYWJsZSkK
ICAgICAgICAgbV9jb250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwogICAgIGVsc2UgewogICAgICAg
ICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYsMzYgKzUxLDEzIEBAIGJvb2wgQXJy
YXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZm
ZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVu
dCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0
ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVy
ZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mSW5j
b21pbmdSZWZlcmVuY2VzKCk7IGktLTspIHsKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZp
ZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VB
dChpKSk7CisgICAgICAgIGlmICh2aWV3KQorICAgICAgICAgICAgdmlldy0+bmV1dGVyKCk7CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyOjphZGRWaWV3KEFy
cmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7Ci0gICAg
dmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmlyc3RWaWV3
OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJldlZpZXcg
PSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6
cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0g
dmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAgICB2aWV3
LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBpZiAodmll
dy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0VmlldyA9IHZp
ZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAgICAgIG1f
Zmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gdmll
dy0+bV9uZXh0VmlldyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgpAQCAtMjYsMTUgKzI2LDE3IEBACiAjaWZuZGVmIEFycmF5QnVmZmVyX2gKICNkZWZp
bmUgQXJyYXlCdWZmZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3Mg
SlNBcnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Nyw3IEBAIHB1
YmxpYzoKICAgICB7IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisg
ICAgCiAgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiArODgsMTMg
QEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJy
YXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlC
dWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQq
IHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lk
KiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC05OSwxNCArMTAyLDE2IEBA
IHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lk
KiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsK
KyAgICAKKyAgICBpbmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0Owog
CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50
IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGlu
dCBiZWdpbikgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHZvaWQgcGluKCk7CisgICAgaW5saW5l
IHZvaWQgdW5waW4oKTsKIAotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAg
ICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBib29sIGlzTmV1dGVy
ZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5BcnJheUJ1ZmZlcigp
IHsgfQpAQCAtMTE5LDggKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBj
bGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7CiAgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBW
YWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7CiAKKyAgICB1bnNpZ25lZCBtX3BpbkNv
dW50OwogICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsKLSAgICBBcnJheUJ1ZmZl
clZpZXcqIG1fZmlyc3RWaWV3OworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5QnVmZmVyPiBt
X3dyYXBwZXI7CiB9OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBs
ZWZ0LCBpbnQgcmlnaHQpCkBAIC0xNTksNiArMTY3LDEyIEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVy
KGNvbnRlbnRzKSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpj
cmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7Cisg
ICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZvaWQqPihkYXRhKSwg
Ynl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNy
ZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpE
b250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlC
dWZmZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9w
aW5Db3VudCgwKQogewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAt
MTk0LDYgKzIwOCwxMSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0KIAorc2l6ZV90IEFycmF5
QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBzaXpl
b2YoQXJyYXlCdWZmZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlTGVuZ3RoKCkpOworfQor
CiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBp
bnQgZW5kKSBjb25zdAogewogICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiks
IGNsYW1wSW5kZXgoZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywyMyBAQCB1bnNpZ25lZCBBcnJheUJ1
ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAs
IGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1f
cGluQ291bnQrKzsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGlu
Q291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNv
bnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMm
IHJlc3VsdCkKIHsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0
b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5j
dGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwg
aWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAg
IC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICAv
LyBEbyBub3QgYWxsb3cgMzEtYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgogICAgIGlm
IChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50
cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRz
ICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVu
dHMgIT0gZWxlbWVudEJ5dGVTaXplCisgICAgICAgICAgICB8fCB0b3RhbFNpemUgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAg
ICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMjUzLDcgKzI4MCw1IEBAIEFycmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZl
ckNvbnRlbnQKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXI7
Ci11c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVudHM7Ci0KICNlbmRpZiAvLyBBcnJheUJ1ZmZl
cl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMw
LDM2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVy
VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQp
Ci0gICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1faXNOZXV0ZXJhYmxlKHRy
dWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX3ByZXZWaWV3KDApCi0gICAgLCBt
X25leHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldygKKyAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKKyAg
ICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2lzTmV1dGVyYWJs
ZSh0cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNz
ID0gbV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9i
eXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFk
ZFZpZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7
Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsK
KyAgICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKIH0K
IAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6
c2V0TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0
ZU9mZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0gbV9pc05ldXRlcmFibGUpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7CisgICAgCisgICAgaWYgKCFt
X2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmbGFnKQorICAgICAgICBt
X2J1ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5waW4oKTsKIH0K
IAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKIAogI2luY2x1ZGUgIkFy
cmF5QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgPGFs
Z29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtMzcsNjAgKzM3LDUwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJyYXlCdWZm
ZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgs
Ci0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAg
VHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAg
ICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRh
VmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwor
ICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAw
OwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChp
c05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CisgICAg
ICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNv
bnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxl
KGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICB2b2lkIHNldE5ldXRl
cmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+QXJy
YXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJy
YXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAg
IGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJh
bmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25l
ZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8vIEhlbHBlciB0byB2ZXJpZnkg
dGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwogICAgIC8vIHdpdGhp
biByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJp
ZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJh
bmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIp
CisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNpemVvZihU
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMiwxMCArOTIsMjUgQEAgcHJvdGVj
dGVkOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgcHJvdGVjdGVkOgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1
ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29sIHNldFJh
bmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxpbmUg
dm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25l
ZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOworCiAgICAgLy8gSW5wdXQgb2Zmc2V0
IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwogICAgIC8v
IG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcg
YnVmZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9p
ZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNpZ25lZCAq
bnVtRWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51bUVsZW1lbnRzKQog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFYIC0gYXJyYXlCeXRl
T2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBtYXhPZmZzZXQpIHsK
QEAgLTExOSwxOSArMTI0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRzID0g
c3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRoaXMg
aXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0
ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVuc2lnbmVkIG1fYnl0
ZU9mZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwogCi1wcml2YXRlOgor
ICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9wcmV2VmlldzsKLSAg
ICBBcnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFycmF5QnVmZmVyVmll
dzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQpA
QCAtMTc2LDcgKzE3Nyw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVu
c2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0
ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwg
dW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3
OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBh
cnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAgaWYgKHN0YXJ0IDwg
MCkKICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpAQCAtMTk2LDYgKzE5OCw0IEBAIHZvaWQg
QXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmQKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJWaWV3OwotCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJW
aWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShy
ZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0lu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owogc3RydWN0IEhhc2hU
YWJsZTsKIAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3LDEyIEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOwogICAgIEdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRy
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgKCpTbG93
RG93bkFuZFdhc3RlTWVtb3J5KShKU0FycmF5QnVmZmVyVmlldyopOworICAgIFNsb3dEb3duQW5k
V2FzdGVNZW1vcnkgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeTsKKyAgICAKKyAgICB0eXBlZGVmIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0FycmF5QnVm
ZmVyVmlldyopOworICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBsOwogfTsK
IAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzksNiArMTQ2
LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0
VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAgICAgJkNs
YXNzTmFtZTo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpn
ZXRUeXBlZEFycmF5SW1wbCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0
b3JhZ2VUeXBlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGluZyB0aGUgbGlzdC4KICNkZWZpbmUg
SlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwKICAgICBt
YWNybyhBcnJheSkgXAorICAgIG1hY3JvKEFycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQm9vbGVh
bikgXAogICAgIG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTYs
OSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFj
cm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwK
KyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNy
byhieXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsNiArMTE2
LDcgQEAKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51bWVyYWJsZSkgXAogICAgIG1hY3JvKHByb3Rv
dHlwZSkgXAogICAgIG1hY3JvKHNldCkgXAorICAgIG1hY3JvKHNsaWNlKSBcCiAgICAgbWFjcm8o
c291cmNlKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHN0YWNrKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lv
biAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDox
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKwor
bmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9uIFZhbHVlIHsKKyAgICBU
IGRhdGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAgaWYgKCFidWZmZXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5n
dGgpOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
Y2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVu
Z3RoOworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVu
c2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVu
Z3RoKSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBB
cnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5
dGVMZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRs
ZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFu
OworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUg
dm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBjaGFyIHRlbXAgPSAqcDsK
KyAgICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5dGVz
Rm9yMTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKK30KKworc3Rh
dGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAs
IHAgKyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30KKworc3RhdGljIHZvaWQg
ZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsK
KyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1
KTsKKyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5
dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikK
K3sKKyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQorICAgICAgICByZXR1
cm47CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIC8vIE5vdGhp
bmcgdG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmxpcEJ5dGVz
Rm9yMTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBm
bGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6Cisg
ICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3OjpnZXREYXRhKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29u
c3QKK3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMg
PSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVz
ZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWdu
ZWQgbG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXpl
b2YoVCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxp
dHRsZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYmV5
b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3Jl
IHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFy
Y2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCisgICAgVmFs
dWU8VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7CisgICAgZmxpcEJ5
dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Cisg
ICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQs
IHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90IERhdGFWaWV3OjpnZXRJ
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKK30KKwordWludDhfdCBE
YXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsK
K30KKworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRh
PGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1aW50MTZfdCBE
YXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0
ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3QgRGF0YVZpZXc6OmdldElu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwor
fQorCitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8
ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCitkb3VibGUgRGF0YVZp
ZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBz
ZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQg
RGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9
CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91Ymxl
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0
RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwor
dm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigp
OworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDM5ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwot
fTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERh
dGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7
Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
cmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRh
Vmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVj
a2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsK
LSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNr
ZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93
ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVy
LCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAogRGF0YVZp
ZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmlldyhidWZm
ZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFWaWV3OjpEYXRhVmlldyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVz
KGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBs
aXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19
Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIg
dGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9p
ZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEp
OwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBz
d2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1z
dGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMo
cCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhw
ICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0
dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAg
ICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAg
ICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6
Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6Omdl
dERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewot
ICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0
IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBw
b3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFs
dWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVP
ZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNp
emVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9m
ZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdh
bnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMg
ZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jl
cy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsK
LSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxl
RW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsg
Ynl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0
YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQot
Ci11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRy
PERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAg
ICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90
IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0
ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRV
aW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0K
LQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxk
b3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3
OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+
KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJ
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwg
dmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVP
ZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAg
ICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Cit9
IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlIDxydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgRGF0
YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwg
dW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MTZfdCBnZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVp
bnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2X3QgZ2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDMy
X3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGRvdWJs
ZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zm
c2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0
VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2
b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0
MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisK
KyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQg
bmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBi
eXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBi
eXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0
aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0YVZpZXdf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gKICNkZWZpbmUgRGF0YVZp
ZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlICJB
cnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3Rl
ZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAg
dmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3Ro
OyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50LCBp
bnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQxNl90
IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZfdCBnZXRV
aW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0g
ICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZzZXQs
IGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBnZXRGbG9h
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRG
bG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGRv
dWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBz
ZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZv
aWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDE2
KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQz
Ml90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1
ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsg
fQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0
RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZUxl
bmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CiAgICAgfQogCi1wcm90
ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2YXRlOgotICAgIERhdGFW
aWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJv
b2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9m
ZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxl
bmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0K
ICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZpZXdfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkocmV2aXNpb24g
MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKQEAgLTI0LDg0ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBGbG9hdDMyQXJyYXlfaAotI2RlZmluZSBGbG9hdDMyQXJyYXlfaAorI2lmbmRlZiAiRmxvYXQz
MkFycmF5X2giCisjZGVmaW5lICJGbG9hdDMyQXJyYXlfaCIKIAotI2luY2x1ZGUgIlR5cGVkQXJy
YXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewot
cHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMy
QXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJy
YXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRp
cmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0g
ICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxv
YXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1Q
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMy
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJy
YXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNy
ZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJh
eTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0MzJBcnJheTsKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1
Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExLDk4ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKLSNkZWZp
bmUgRmxvYXQ2NEFycmF5X2gKKyNpZm5kZWYgIkZsb2F0NjRBcnJheV9oIgorI2RlZmluZSAiRmxv
YXQ2NEFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDY0QXJyYXkg
OiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKGNvbnN0IGRv
dWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUg
dXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERv
Ci0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQg
d2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDY0QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlwZWRB
cnJheUJhc2U8ZG91YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2
NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRmxv
YXQ2NDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0NjRBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAg
ICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07Ci0KLVBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0
ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGFycmF5LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxG
bG9hdDY0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQ8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDY0QXJyYXk6OkZs
b2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+
IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5OworI2luY2x1ZGUgIlR5
cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUo
Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUqPihiYXNlQWRkcmVzcygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0KEdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldFJhbmdlKGNvbnN0IHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBv
ZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0UmFuZ2VJbXBsKAorICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksCisgICAgICAgICAgICBkYXRhTGVu
Z3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICAgICAgb2Zmc2V0
ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHplcm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpLCBsZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlz
TmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5n
dGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClb
aW5kZXhdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91Ymxl
IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBB
ZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJv
dW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9m
ZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAg
ICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3Mg
Pj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJh
eVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBH
ZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisg
ICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5
cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNy
ZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBl
ZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+
ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdl
PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlw
ZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQor
ICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZihB
ZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgor
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBj
YWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZz
ZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlw
ZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3MgTExJbnRPZmZz
ZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6
CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xl
bmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5s
ZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CisgICAgdm9pZCBz
ZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUudHlwZWRBcnJheS5idWZmZXIg
PSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJ
bmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBv
ZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJy
YXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFy
cmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBs
ZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9m
IHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAgICB9IGxl
bmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJyYXlCdWZm
ZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpA
QCAtMjQsODAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEludDhB
cnJheV9oCi0jZGVmaW5lIEludDhBcnJheV9oCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIKKyNkZWZp
bmUgIkludDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIEludDhBcnJh
eSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4gewotcHVibGljOgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShjb25z
dCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50
OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2lu
ZyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBW
aWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50ODsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDhBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8v
IE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFz
cyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IElu
dDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRl
PEludDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJ
bnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUludDhBcnJh
eTo6SW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPElu
dDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5
PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3ViYXJyYXlJbXBsPEludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDhBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5
cy5oIgogCiAjZW5kaWYgLy8gSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAg
QEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjMsODAgKzIzLDEw
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEludDE2QXJyYXlfaAotI2RlZmlu
ZSBJbnQxNkFycmF5X2gKKyNpZm5kZWYgIkludDE2QXJyYXlfaCIKKyNkZWZpbmUgIkludDE2QXJy
YXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDogcHVibGlj
IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IGludDE2
X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJy
YXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5
cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBW
aWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MTY7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNs
YXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5
PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2
X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJheT4obGVu
Z3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwot
fQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2QXJyYXk+
KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQx
NkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBJbnQxNkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAog
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCkBAIC0yNCw3NyArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
LSNpZm5kZWYgSW50MzJBcnJheV9oCi0jZGVmaW5lIEludDMyQXJyYXlfaAorI2lmbmRlZiAiSW50
MzJBcnJheV9oIgorI2RlZmluZSAiSW50MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxU
eXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJBcnJheSA6
IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IGlu
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQg
d2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAg
IC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhv
dXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJh
eT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlw
ZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8
aW50Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIGlubGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29u
c3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFy
cmF5QmFzZTxpbnQ+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+
OjpjcmVhdGU8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5
PiBJbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYXJy
YXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVh
dGU8SW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRp
YWxpemVkPEludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMyQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXlJbXBsPEludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotdXNpbmcgSlNDOjpJbnQzMkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNl
bmRpZiAvLyBJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJy
YXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJy
YXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkK
K3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRo
aXMsIG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgK
KyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNz
ZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJy
YXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsKK30KKwor
Ym9vbCBKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUo
anNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVj
dC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAg
ICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICByZWpl
Y3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSBy
ZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9wZXJ0eSgK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIg
cHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwor
fQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlC
dWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5
QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNB
cnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisj
ZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZl
ciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZN
JiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlciog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAor
ICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBBcnJheUJ1
ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Fy
cmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5j
dGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZSogcHJvdG90eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAg
ICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxl
YXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+
YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAor
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5n
dGgsIDEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KAorICAgICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5
QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0
QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlw
ZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RB
cnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisK
K2NsYXNzIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBj
cmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBl
Kik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBK
U1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlw
ZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMg
Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
IgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9u
KiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAg
ICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9m
IHNsaWNlIG11c3QgYmUgYW4gYXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5h
cmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgo
KTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3Qt
PmltcGwoKS0+c2xpY2UoYmVnaW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUt
Pmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxs
ZWUtPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpT
QXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBz
dHJ1Y3R1cmUsIG5ld0J1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19p
bmZvID0geworICAgICJBcnJheUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJy
YXlCdWZmZXJQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElW
RV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNT
bGljZSwgRG9udEVudW0sIDIpOworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5
QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+
KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUp
OworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3Rl
ZDoKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6
CisgICAgc3RhdGljIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXc6
OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxl
bWVudFNpemUsCisgICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVy
ZSgwKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAg
ICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBh
bGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNp
emVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAg
ICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFz
V29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAg
ICAgICAgIGFzV29yZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBh
bGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5ndGgg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlmICgh
dHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFs
bG9jKGxlbmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0
KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBt
X3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7
Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rp
b25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVjdG9y
KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQp
CisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5
KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVh
ZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7
Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0
cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVy
ZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3Io
KSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4
dC5tb2RlKCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoICht
X21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRo
aXMsIGZpbmFsaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFy
cmF5OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5k
ZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkp
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVy
KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4ZWMt
PnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVj
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAorICAg
ICAgICAgICAgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVj
LCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkg
dHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBw
cm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9
CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3
Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
QmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30K
Kwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAor
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0
IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykg
eworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOwor
ICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAg
ICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAg
IAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVj
LCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21v
ZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1
bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBl
ZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmll
d19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhp
cyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3Nl
IHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAg
ICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERP
TS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAg
QysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBh
cnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9m
IHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAo
MSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRp
bWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBi
ZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBt
YXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEg
bWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29y
ZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBm
cm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5z
dGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3Rv
dHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5k
aW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25l
IGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3Ig
dGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJh
eU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwg
ViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBh
bmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVk
IGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisg
ICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0
byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2lu
dCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBw
b2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBh
bmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50
aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBh
ZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAg
IAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4g
QidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVy
ZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVk
IGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAg
ICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3Rl
ZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4K
KyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpT
QXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUK
Ky8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2lu
ZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3Mg
dmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBp
dCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28g
dGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBl
dmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5
QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2Yo
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkK
KyAgICAgICAgICAgICYgfihzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJs
aWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0
aWFsaXplIH07CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3Ry
dWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6
YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29u
dGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zdHJ1
Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVj
dHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBC
dXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2
ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMg
dGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3du
QW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7
CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRl
cigpOworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJW
aWV3LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlND
ZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAg
ICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sK
KyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFi
bGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVm
ZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3Rl
TWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVh
ZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJs
ZSgpLT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1
ZmZlclZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5z
aWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUg
IT0gV2FzdGVmdWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5
cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNf
Y2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigp
LT5kYXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihkZWx0YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9
PSBkZWx0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAor
I2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0
LDE1IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJy
YXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChK
U0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1
ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3
LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3Mg
RXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJs
ZU9iamVjdDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRh
dGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQog
I2VuZGlmCiAgICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFy
cmF5U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRB
cnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3Rl
ZDoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVy
VmlldyopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5o
IgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIK
KyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRh
dGFWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFW
aWV3KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250
ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmll
dyogSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3
Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgp
KSB7CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZl
ciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0
YVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0
YVZpZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBK
U0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVu
c2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAw
OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgdW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0
eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0Rh
dGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9udEVudW0gfCBSZWFk
T25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1l
bW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBl
ZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIERh
dGFWaWV3OjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0
LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKworU3RydWN0dXJlKiBK
U0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1Ymxp
YyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVy
VmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQm
KTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAg
ICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCisgICAg
Ly8gRHVtbXkgbWV0aG9kcywgd2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2UgYXJlIGp1
c3QgaW4gcGxhY2UgdG8KKyAgICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lhbGl6YXRp
b24gd2UgZG8gZWxzZXdoZXJlLgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVVbmluaXRp
YWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIEpTRGF0YVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5
VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVt
b3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworICAgIAorcHVi
bGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlRE
QVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Rh
dGFWaWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTRGF0
YVZpZXcuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBCeXRlcy5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5
cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAw
LCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Rh
dGFWaWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBl
Lmx1dC5oCitAYmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgZ2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMy
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jR2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldElu
dDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlw
ZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmll
d1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNEYXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90
b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAg
IGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQ
cm90b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCiti
b29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVj
U3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4o
b2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFW
aWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBv
ZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUg
Ynl0ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5h
cmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisg
ICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAg
ICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0
ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAK
KyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVj
dG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0
dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVl
KTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1ZSh2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUg
c2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBq
c0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFk
YXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcu
IikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBs
ZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOworICAgIAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsK
KyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVu
dCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQg
b2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0
bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUp
OworICAgIAorICAgICpyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpID0g
dmFsdWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBn
ZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50
MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IHNldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMp
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3Rv
RnVuY1NldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50
OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRG
bG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IHNldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgiCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5
cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0
cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRh
Vmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGbG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJKU0Zsb2F0MzJBcnJheV9oIgorI2RlZmluZSAiSlNGbG9hdDMyQXJyYXlfaCIKKworI2luY2x1
ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTRmxvYXQ2NEFycmF5X2giCisj
ZGVmaW5lICJKU0Zsb2F0NjRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBh
cnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBh
cyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0g
bmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVs
ZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBC
dXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgor
Ly8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2Ug
ZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1F
OiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNl
ZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8g
b25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBl
ZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNv
cGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhp
bmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8v
IHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBw
b2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4g
TCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0
eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkg
YW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQn
cyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsg
SSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8g
ICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5
cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRp
YyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZl
KEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAg
c3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJy
YXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJh
c2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0
b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUg
QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0
aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0
b3IpOworICAgIH0KKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBt
YXRjaCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0
cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAg
ICB9CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3Rv
cigpW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUo
dW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJ
bmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBn
ZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9y
Ojp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xl
bmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6
OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNr
bHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwg
SlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2
YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNl
dEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9
IG1fbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAg
ICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5n
dGggPj0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4
Y2VwdDogaWYgaXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHBy
b3ByaWF0ZSBleGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVy
cm9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhT
cGVjaWZpY1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBh
bmQgZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdp
bGwgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9
IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZl
ciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5v
dGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMg
dm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5
QnVmZmVyVmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFs
RnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRl
KAorICAgICAgICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVj
dERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERh
dGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
aCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBl
LCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5h
bWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xh
c3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0
IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAg
ICAgICBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+
dHlwZWRBcnJheVN0cnVjdHVyZSgKKyAgICAgICAgICAgIFZpZXdDbGFzczo6VHlwZWRBcnJheVN0
b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJheUJ1ZmZlcioganNCdWZmZXIgPSBqc0R5
bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAgICAgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1wbCgpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpID8g
ZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOworICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJn
dW1lbnQoMikudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVu
Z3RoKCkgLSBvZmZzZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5
QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0
aGUgZWxlbWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVM
ZW5ndGgoKSAtIG9mZnNldCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3Ry
dWN0dXJlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIGlmIChW
aWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3Rl
ZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICAvLyBG
b3IgZXZlcnl0aGluZyBidXQgRGF0YVZpZXcsIHdlIGFsbG93IGNvbnN0cnVjdGlvbiB3aXRoIGFu
eSBvZjoKKyAgICAvLyAtIEFub3RoZXIgYXJyYXkuIFRoaXMgY3JlYXRlcyBhIGNvcHkgb2YgdGhl
IG9mIHRoYXQgYXJyYXkuCisgICAgLy8gLSBBbiBpbnRlZ2VyLiBUaGlzIGNyZWF0ZXMgYSBuZXcg
dHlwZWQgYXJyYXkgb2YgdGhhdCBsZW5ndGggYW5kIHplcm8taW5pdGlhbGl6ZXMgaXQuCisgICAg
CisgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhl
Yy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgICAgICBvZmZzZXQgPSBleGVj
LT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNz
KiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3Vs
dC0+c2V0KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8IDApCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAi
UmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwq
LCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47
CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitDYWxsVHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAg
ICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZp
ZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNf
aAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGVmZXJHQy5oIgor
I2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0
KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
cmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24o
ZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29u
c3RydWN0aW9uQ29udGV4dCBjb250ZXh0KAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1Y3R1cmUs
IGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICBDb25zdHJ1
Y3Rpb25Db250ZXh0OjpEb250SW5pdGlhbGl6ZSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+
ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBh
c3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYg
KCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAgICB0aHJvd0Vycm9yKAorICAg
ICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxl
bmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwg
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisg
ICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAg
IHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAg
IFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRv
cjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBp
bXBsLT5idWZmZXIoKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVj
dHVyZSwgYnVmZmVyLCBpbXBsLT5ieXRlT2Zmc2V0KCksIGltcGwtPmxlbmd0aCgpKTsKKyAgICBB
U1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNvbnRleHQp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwKKyAgICBQ
YXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIHJldHVy
biBjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIGltcGwpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6dmFsaWRhdGVSYW5nZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChjYW5BY2Nlc3NSYW5nZVF1aWNrbHkob2Zm
c2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0
IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBl
PgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0V2l0aFNwZWNpZmlj
VHlwZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIE90aGVyVHlwZSogb3RoZXIsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEhhbmRsZSB0aGUgaGlsYXJpb3VzIGNh
c2U6IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3RoIGNvdWxkIGhhdmUgcmVzdWx0ZWQKKyAg
ICAvLyBpbiBuZXV0ZXJpbmcuIFdlbGwsIG5vLiBUaGF0J2xsIG5ldmVyIGhhcHBlbiBiZWNhdXNl
IHRoZXJlIGNhbm5vdCBiZQorICAgIC8vIHNpZGUtZWZmZWN0cyBvbiBnZXR0aW5nIHRoZSBsZW5n
dGggb2YgYSB0eXBlZCBhcnJheS4gQnV0IHByZWRpY3Rpbmcgd2hlcmUgdGhlcmUKKyAgICAvLyBh
cmUsIG9yIGFyZW4ndCwgc2lkZS1lZmZlY3RzIGlzIGEgZm9vbCdzIGdhbWUgc28gd2UgcmVzb3J0
IHRvIHRoaXMgY2hlYXAKKyAgICAvLyBjaGVjay4gV29yc3QgY2FzZSwgaWYgd2UncmUgd3Jvbmcs
IHBlb3BsZSBzdGFydCBzZWVpbmcgbGVzcyB0aGluZ3MgZ2V0IGNvcGllZAorICAgIC8vIGJ1dCB3
ZSB3b24ndCBoYXZlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KKyAgICBsZW5ndGggPSBzdGQ6
Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZVJh
bmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIGlmIChvdGhlci0+bGVuZ3RoKCkgIT0gbGVuZ3RoKSB7CisgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiTGVuZ3RoIG9mIGluY29taW5nIGFycmF5IGNo
YW5nZWQgdW5leHBlY3RlZGx5LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHNldEluZGV4
UXVpY2tseShvZmZzZXQgKyBpLCBvdGhlci0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAgICAKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorewor
ICAgIGNvbnN0IENsYXNzSW5mbyogY2kgPSBvYmplY3QtPmNsYXNzSW5mbygpOworICAgIGlmIChj
aS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAg
ICAvLyBUaGUgc3VwZXIgZmFzdCBjYXNlOiB3ZSBjYW4ganVzdCBtZW1jcHkgc2luY2Ugd2UncmUg
dGhlIHNhbWUgdHlwZS4KKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90aGVyID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAgICAgbGVuZ3Ro
ID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAg
aWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSh0eXBlZFZlY3RvcigpICsgb2Zm
c2V0LCBvdGhlci0+dHlwZWRWZWN0b3IoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNpLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNU
eXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7
CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBl
KGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7Cisg
ICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVj
aWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVj
aWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6
IHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2UgY291bGQgb3B0aW1pemUgdGhp
cyBjYXNlLiBCdXQgcmlnaHQgbm93LCB3ZSBkb24ndC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXNldEluZGV4UXVpY2ts
eShleGVjLCBvZmZzZXQgKyBpLCBvYmplY3QtPmdldChleGVjLCBpKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVy
KHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAg
IGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2Fu
R2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERl
c2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBp
ZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdl
dEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisg
ICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0dGVtcHRz
IHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4gaW4gc3Ry
aWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRCeUluZGV4
KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVmaW5lT3du
UHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgLy8gVGhpcyBpcyBtYXRjaGluZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1bGFyLCBp
dCByZWplY3RzIGFsbCBhdHRlbXB0cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5IGZvciBp
bmRleGVkIHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUgb3V0Cisg
ICAgLy8gb2YgYm91bmRzLgorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRU
aHJvdywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJv
cGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihj
ZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
QmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoCisgICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAgdGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsK
KyAgICB9CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkocHJv
cGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpOworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PnB1dCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICghdGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRob3V0IHRo
cm93aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhlIGJvdW5k
cy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5zZXRJbmRl
eFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJv
cGVydHlOYW1lKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2Rl
ID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5hZGQoSWRl
bnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2Jq
ZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0
b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4sIHRoaXNP
YmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheTogeworICAgICAg
ICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVk
QXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
Pgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJhY2tpbmdTdG9y
ZSgKKyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAodG9rZW4gPT0g
VHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbgorICAgICAgICAmJiB2aXNpdG9yLmNoZWNrSWZTaG91
bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRWZWN0b3Ig
PSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRv
ci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBtZW1j
cHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAg
ICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRvci5kaWRD
b3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAgIAorICAg
IEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyogb2Jq
ZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBXZSBwbGF5
IHRoaXMgZ2FtZSBiZWNhdXNlIHdlIHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVuIGZyb20g
cGxhY2VzIHRoYXQKKyAgICAvLyBkb24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUqIG9yIHRo
ZSBWTSwgYW5kIHdlIG9ubHkgYWxsb2NhdGUgc28gbGl0dGxlCisgICAgLy8gbWVtb3J5IGhlcmUg
dGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gdHJpZ2dlciBhIEdDIC0ganVzdCBhY2NvdW50aW5n
IHdoYXQKKyAgICAvLyB3ZSBoYXZlIGRvbmUgaXMgZ29vZCBlbm91Z2guIFRoZSBzb3J0IG9mIGJp
emFycm8gZXhjZXB0aW9uIHRvIHRoZSAiYWxsb2NhdGluZworICAgIC8vIGxpdHRsZSBtZW1vcnki
IGlzIHdoZW4gd2UgdHJhbnNmZXIgYSBiYWNraW5nIGJ1ZmZlciBpbnRvIHRoZSBDIGhlYXA7IHRo
aXMKKyAgICAvLyB3aWxsIHRlbXBvcmFyaWx5IGdldCBjb3VudGVkIHRvd2FyZHMgaGVhcCBmb290
cHJpbnQgKGluY29ycmVjdGx5LCBpbiB0aGUgY2FzZQorICAgIC8vIG9mIGFkb3B0aW5nIGFuIG92
ZXJzaXplIHR5cGVkIGFycmF5KSBidXQgd2UgZG9uJ3QgR0MgaGVyZSBhbnl3YXkuIFRoYXQncwor
ICAgIC8vIGFsbW9zdCBjZXJ0YWlubHkgZmluZS4gVGhlIHdvcnN0IGNhc2UgaXMgaWYgeW91IGNy
ZWF0ZWQgYSB0b24gb2YgZmFzdCB0eXBlZAorICAgIC8vIGFycmF5cywgYW5kIGRpZCBub3RoaW5n
IGJ1dCBjYXVzZWQgYWxsIG9mIHRoZW0gdG8gc2xvdyBkb3duIGFuZCB3YXN0ZSBtZW1vcnkuCisg
ICAgLy8gSW4gdGhhdCBjYXNlLCB5b3VyIG1lbW9yeSBmb290cHJpbnQgd2lsbCBkb3VibGUgYmVm
b3JlIHRoZSBHQyByZWFsaXplcyB3aGF0J3MKKyAgICAvLyB1cC4gQnV0IGlmIHlvdSBkbyAqYW55
dGhpbmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25vdworICAg
IC8vIHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdpbGwgR0Mg
YXBwcm9wcmlhdGVseS4KKyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KTsK
KyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOworICAgIAorICAgIEFTU0VSVCgh
dGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IHRo
aXNPYmplY3QtPmJ5dGVTaXplKCk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJl
Y29yZCwgaW4gdGhlIGJ1dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAorICAgIGlm
ICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYgIXRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgewor
ICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3Np
YmxlLgorICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0dGVyZmx5
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPSBCdXR0
ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseSwgKmhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLAorICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2Ug
RmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhp
c09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8g
RklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBl
eHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3
aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8v
IHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVB
ZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5zZXRB
cnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2Jq
ZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVh
dGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0
KCksIHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9o
CisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6IHB1YmxpYyBK
U05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlKiBjcmVhdGUoCisgICAgICAgIEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFeGNlcHRpb25I
ZWxwZXJzLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkg
dmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3Rl
ZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VB
cnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAg
aWYgKCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikp
OworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIo
ZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAg
IG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBz
b3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3Vi
YXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhp
c09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwor
ICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZp
ZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
CisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7
CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmpl
Y3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFz
c2VydCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVu
Z3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZl
IGluZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBi
ZWdpbiA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5k
ID0gdGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0
aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNT
RVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2Fz
dDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2lu
LgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQg
Pj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlC
dWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGgg
PT0gdGhpc09iamVjdC0+bGVuZ3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0KKyAgICAgICAgY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShW
aWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiBy
ZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJh
eUJ1ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmll
d0NsYXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAgbGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50
U2l6ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBB
U1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8
Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJv
cGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxW
aWV3Q2xhc3M+LCBEb250RW51bSwgMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBl
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBl
LT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5
cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDksMTUgKzQ5LDI2IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24u
aCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tP
YmplY3QuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1By
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRl
ICJKU09OT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVy
LmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC0yMTQsNiArMjI1LDMwIEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0
ZXIoZXhlYy0+dm0oKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygp
LCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGly
ZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywg
cHJvdG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3Rv
dHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZt
KCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJv
dG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVh
dGUoZXhlYywgdGhpcywgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDhBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5
cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50
MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50OENs
YW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
VWludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
SlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRmxvYXQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJy
YXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVj
LCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
RGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
YXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQxNildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVVaW50OENsYW1wZWQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlw
ZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3
KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmll
dyldLnByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywganNOdWxsKCkpKTsKICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IGpzTnVsbCgpKSk7CkBAIC0zMTgsNiArMzUzLDI3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJl
c2V0KEpTVmFsdWUgcHJvdG8KIAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMt
PnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhl
YywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9i
amVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAg
CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0g
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJy
YXk8SW50ZXJuYWxGdW5jdGlvbiosIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gdHlwZWRB
cnJheUNvbnN0cnVjdG9yczsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlw
ZUludDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDhBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3Rv
dHlwZS5nZXQoKSwgIkludDhBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9J
bmRleChUeXBlSW50MTYpXSA9IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywg
SlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQxNildLnByb3RvdHlwZS5nZXQoKSwgIkludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDMyKV0gPSBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQzMkFycmF5Iik7CisgICAg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OCldID0gSlNVaW50OEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhB
cnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDhDbGFt
cGVkKV0gPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1Vp
bnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50OENsYW1wZWRBcnJheSIpOwor
ICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQx
NkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCks
ICJVaW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
VWludDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQz
MkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIp
XS5wcm90b3R5cGUuZ2V0KCksICJVaW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQzMildID0gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQzMkFycmF5Iik7
CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDY0QXJyYXlDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5
cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUu
Z2V0KCksICJGbG9hdDY0QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0gPSBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBK
U0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRh
VmlldyldLnByb3RvdHlwZS5nZXQoKSwgIkRhdGFWaWV3Iik7CisgICAgCisgICAgbV9hcnJheUJ1
ZmZlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLkFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1C
RVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5cGVkQXJyYXlJbmRleC0tOykgeworICAgICAgICBt
X3R5cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRleF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAg
ICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4
ZWMsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XS0+bmFtZShleGVjKSks
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAg
IH0KIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyhleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTmFOLCBqc05hTigpLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNs
dWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3Rv
dHlwZS5oIgpAQCAtMTY2LDYgKzE2NywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlPiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0
IFR5cGVkQXJyYXlEYXRhIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5
cGU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9Owor
ICAgIAorICAgIEZpeGVkQXJyYXk8VHlwZWRBcnJheURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJB
WV9UWVBFUz4gbV90eXBlZEFycmF5czsKICAgICAgICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9p
bnRlcnNbU3BlY2lhbDo6VGFibGVTaXplXTsgLy8gU3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRo
ZSBMTEludCBhbmQgSklULgogCkBAIC0zMzAsNiArMzQxLDE0IEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAg
IFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBhcnJheUJ1ZmZlclByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQ
cm90b3R5cGUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAg
IFN0cnVjdHVyZSogdHlwZWRBcnJheVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3Ry
dWN0dXJlLmdldCgpOworICAgIH0KIAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lh
bDo6UG9pbnRlciBwb2ludGVyKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
ICJKU0ludDhBcnJheV9oIgorI2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFy
cmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMy
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5
X2giCisjZGVmaW5lICJKU0ludDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAg
IHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZSMjQ29uc3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1Nf
SU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJ
bnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhD
bGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0
NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1
Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNfaAorCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBK
U0ludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50
OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9y
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJy
YXk+IEpTVWludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJy
YXk+IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmll
dz4gSlNEYXRhVmlld0NvbnN0cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAg
IHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNQcm90b3R5cGU6OnNfaW5mbyA9
IHsjdHlwZSAiUHJvdG90eXBlIiwgJkpTIyN0eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19JTkZPKEludDhB
cnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkp
OworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJh
eSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7
CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAor
I2RlZmluZSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5UHJvdG90eXBl
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDMyQXJyYXk+
IEpTSW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNVaW50OEFycmF5PiBKU1VpbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWlu
dDhDbGFtcGVkQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDMyQXJyYXk+IEpTVWludDMy
QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5
UHJvdG90eXBlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJh
eVByb3RvdHlwZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlZEFycmF5cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5
VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5G
Tyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5
OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19J
TkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFL
RV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZP
KFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitN
QUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVk
QXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4g
SlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhB
cnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50
OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENs
YW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVk
QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWlu
dDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAi
SlNVaW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJK
U1VpbnQzMkFycmF5X2giCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAv
LyBKU1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw5IEBACiAj
ZGVmaW5lIE9wZXJhdGlvbnNfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Np
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKyNpbmNsdWRlICJQYXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkg
eyB9CisKK0pTQXJyYXlCdWZmZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlC
dWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0gbmF0aXZl
LT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisgICAgSlNB
cnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVj
LT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIG5hdGl2ZSk7Cisg
ICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhazxKU0FycmF5QnVmZmVyPihyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBj
b250cm9sbGVyIHVzZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8g
YXJyYXkgYnVmZmVycyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMg
aXNuJ3Qgd2hhdAorLy8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVu
IHJ1bm5pbmcgc3RhbmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAt
IElmIHRoZSBKU0FycmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlz
IGFsaXZlLgorLy8KKy8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5
QnVmZmVyIGFmdGVyIG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRp
ZG4ndCBkaWUsIHRoZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1
YmxpYzoKKyAgICBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVm
ZmVyKiB0b0pTKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAg
IHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAg
IHx8IGlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAg
IH0KICAgICAKLSAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBl
KCkpOwotICAgIH0KKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2Vs
bCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUzNzc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAog
I2RlZmluZSBTdHJ1Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKIApAQCAtMTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpnZXRDb25jCiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZp
Y1ZhbHVlSWdub3JlZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdI
ZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJv
cGVydGllcyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IGlmICghaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJy
YXlCdWZmZXJWaWV3Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisK
IGlubGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9i
amVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFw
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlBZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBUeXBlZEFycmF5QWRhcHRvcnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAor
ICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1Zp
ZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRl
Z3JhbFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0
eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBK
U1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0
eXBlVmFsdWVBcmc7CisKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRf
dD4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0
dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50
b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1
ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0
eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4K
K3N0cnVjdCBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlw
ZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3
VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBl
VmFsdWUgPSB0eXBlVmFsdWVBcmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91
YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4ganNOdW1iZXIoUU5hTik7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRh
cHRvcjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsK
K3N0cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxv
YXQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVk
ZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRB
cnJheTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBK
U0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9y
PiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50
OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNG
bG9hdDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFk
YXB0b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3Ry
dWN0IEludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50
MTZBcnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0
b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50
MzJBcnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVV
aW50OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yPHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9
Oworc3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQz
Ml90LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0
IEZsb2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFy
cmF5LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRh
cHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxv
YXQ2NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRv
ciB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRB
cnJheSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlw
ZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4
Q2xhbXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAg
IHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUo
dmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0
aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigp
KTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBz
dGF0aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUp
CisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gVHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
eXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNv
bnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxl
cjo6flR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBU
eXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBB
cnJheUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFz
cyBKU0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJy
YXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAg
ICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCosIEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURl
c2NyaXB0b3JfaAotI2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1zdHJ1Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBU
eXBlZEFycmF5Tm9uZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYs
Ci0gICAgVHlwZWRBcnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFy
cmF5VWludDhDbGFtcGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVp
bnQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsK
LQotc3RydWN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRv
cigpCi0gICAgICAgIDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQo
MCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRB
cnJheURlc2NyaXB0b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdl
T2Zmc2V0LCBzaXplX3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNz
SW5mbykKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAg
LCBtX2xlbmd0aE9mZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBD
bGFzc0luZm8qIG1fY2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAg
c2l6ZV90IG1fbGVuZ3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7
Ci0gICAgU2lnbmVkVHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVt
IFR5cGVkQXJyYXlSb3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJv
dW5kaW5nCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5
VHlwZS5oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9y
VHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoK
KyAgICAgICAgcmV0dXJuICZKU0ludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4
OgorICAgICAgICByZXR1cm4gJkpTVWludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVp
bnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87
CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2lu
Zm87CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6
OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJy
YXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50
MzJBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAm
SlNGbG9hdDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBy
ZXR1cm4gJkpTRmxvYXQ2NEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6Cisg
ICAgICAgIHJldHVybiAmSlNEYXRhVmlldzo6c19pbmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnBy
aW50KCJOb3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4
OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQz
MiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5w
cmludCgiVHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50
MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9h
dDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0lu
Zm87CisKK2VudW0gVHlwZWRBcnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlw
ZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUlu
dDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisg
ICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9Owor
CisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5s
aW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBl
ZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisK
K2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWlu
dDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gMTsKKyAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAy
OworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5
cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAg
ICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5
cGVkQXJyYXlUeXBlIHR5cGUpOworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2Fz
ZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUlu
dDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2ln
bmVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAg
ICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzQ2xhbXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IFR5cGVVaW50OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpU
eXBlZEFycmF5VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRB
cnJheVR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19o
CisjZGVmaW5lIFR5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4
Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFw
dG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDhBcnJheV9oCi0jZGVmaW5lIFVpbnQ4QXJyYXlf
aAorI2lmbmRlZiAiVWludDhBcnJheV9oIgorI2RlZmluZSAiVWludDhBcnJheV9oIgogCi0jaW5j
bHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xh
c3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBr
bm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1
cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBm
aXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlVW5p
bml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8
dWludDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+
OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAgICB9Ci0KLXBy
b3RlY3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0
cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJh
eUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxV
aW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBV
aW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1V
aW50OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6VWludDhBcnJheTsKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFt
cGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyMyBAQAogICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgVWludDhDbGFtcGVkQXJyYXlfaAotI2RlZmluZSBVaW50OENsYW1wZWRBcnJheV9oCisj
aWZuZGVmICJVaW50OENsYW1wZWRBcnJheV9oIgorI2RlZmluZSAiVWludDhDbGFtcGVkQXJyYXlf
aCIKIAotI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVWludDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMg
VWludDhBcnJheSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQg
d2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAg
IC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhv
dXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8v
IEl0J3Mgb25seSBuZWVkZWQgdG8gcG90ZW50aWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUg
YXJyYXkKLSAgICAvLyB3YXMgY3JlYXRlZCB1bmluaXRpYWxpemVkIC0tIHRoZSBkZWZhdWx0IGlu
aXRpYWxpemF0aW9uIHBhdGhzCi0gICAgLy8gemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAg
ICBpbmxpbmUgdm9pZCB6ZXJvRmlsbCgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWlu
dDhfdD46OnNldDsKLSAgICBpbmxpbmUgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2
YWx1ZSk7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Vmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4
Q2xhbXBlZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgot
ICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVp
bnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVh
dGU8VWludDhDbGFtcGVkQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBl
ZEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQg
VWludDhDbGFtcGVkQXJyYXk6Onplcm9GaWxsKCkKLXsKLSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3Ro
KCkpOwotfQotCi12b2lkIFVpbnQ4Q2xhbXBlZEFycmF5OjpzZXQodW5zaWduZWQgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkKLXsKLSAgICBpZiAoaW5kZXggPj0gbV9sZW5ndGgpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQotICAgICAgICB2YWx1
ZSA9IDA7Ci0gICAgZWxzZSBpZiAodmFsdWUgPiAyNTUpCi0gICAgICAgIHZhbHVlID0gMjU1Owot
ICAgIGRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOwot
fQotCi1VaW50OENsYW1wZWRBcnJheTo6VWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06
IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxV
aW50OENsYW1wZWRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci11c2luZyBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgi
CiAKICNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCAr
MTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkg
KzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQxNkFycmF5X2gK
LSNkZWZpbmUgVWludDE2QXJyYXlfaAorI2lmbmRlZiAiVWludDE2QXJyYXlfaCIKKyNkZWZpbmUg
IlVpbnQxNkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDE2QXJy
YXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4gewotcHVibGljOgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVh
dGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBi
ZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRv
IEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBUeXBlVWludDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWlu
dDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PjsKLX07Ci0K
LVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50
MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJy
YXk6OmNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGFy
cmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZf
dD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDE2
QXJyYXk6OlVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTx1aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50MTZBcnJheT4oc3RhcnQsIGVu
ZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQxNkFycmF5Owor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIFVpbnQzMkFycmF5X2gKLSNkZWZpbmUgVWludDMyQXJyYXlfaAorI2lmbmRlZiAiVWludDMy
QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQzMl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVh
dGU8VWludDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDMyQXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBK
U0M6OlVpbnQzMkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBhcnJheUNvbnN0cnVjdG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3Rv
dHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7
CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFi
bGUgZGF0YVZpZXdUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBI
YXNoVGFibGUgZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAg
ICAsIGFycmF5UHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90
b3R5cGVUYWJsZSkpCiAgICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6Ym9vbGVhblByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAs
IGVycm9yUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5
cGVUYWJsZSkpCkBAIC0yNTgsNiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0g
YWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAv
LyBJbml0aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBW
TSBpbml0aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyKCkpOwogfQogCiBWTTo6flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAg
ICBhcnJheVByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0
b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0
ZVRhYmxlKCk7CisgICAgZGF0YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxl
KCk7CiAgICAgZXJyb3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICsz
MTQsNyBAQCBWTTo6flZNKCkKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGFycmF5UHJvdG90eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4oYm9vbGVhblByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2lu
Y2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2lu
Y2x1ZGUgIldlYWtSYW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KQEAgLTY5LDEzICs2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNo
ZTsKICAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0g
ICAgY2xhc3MgRmxvYXQzMkFycmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFz
cyBIYW5kbGVTdGFjazsKICAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50
OEFycmF5OwotICAgIGNsYXNzIEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAg
ICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFz
cyBKU09iamVjdDsKQEAgLTkzLDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBV
aW50OEFycmF5OwotICAgIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQx
NkFycmF5OwotICAgIGNsYXNzIFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
ZGF0YVZpZXdUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7
CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250
cm9sbGVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVt
cFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hh
c2hDb25zKCkgeyByZXR1cm4gbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51
bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAw
OyB9CiAKLSNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6
ZWRUeXBlKSBcCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25z
dCBjYXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNB
cnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyA9PSBkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VS
VChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRv
cigpIGNvbnN0IHsgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8p
OyByZXR1cm4gbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbihpbnQxNiwgSW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihpbnQzMiwgSW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1
aW50OCwgVWludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENs
YW1wZWQsIFVpbnQ4Q2xhbXBlZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KHVpbnQxNiwgVWludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWlu
dDMyLCBVaW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMy
LCBGbG9hdDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwg
RmxvYXQ2NCk7Ci0jdW5kZWYgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihU
eXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAg
ICAgICAgIHJldHVybiAmaW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRv
cigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAg
ICAgICAgIHJldHVybiAmdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNs
dXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAg
IE93blB0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1f
aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWlu
dDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3Vp
bnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50
MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQz
MkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yOwogICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNTM5MjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBB
ZGRlZCB0aGUgbm90aW9uIG9mIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRoYXQgY2FuIGJl
IG1hcmtlZCBEZWZlcnJlZCwKKyAgICAgICAgICB3aGljaCBpcyBsaWtlIGEgc3BlY2lhbC1wdXJw
b3NlIHVwcmVmLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBhIGNvbW1vbiBieXRlIGZsaXBw
ZXIuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2U6OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
Ojppc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZDo6c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVk
OjpEZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3Vu
dGVkOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMuaDog
QWRkZWQuCisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToKKyAg
ICAgICAgKFdURjo6ZmxpcEJ5dGVzKToKKwogMjAxMy0wOC0wOSAgQ2hyaXN0b3BoZSBEdW1leiAg
PGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgTWFrZSBhdG9iKCkgdGhyb3cg
YW4gSW52YWxpZENoYXJhY3RlckVycm9yIG9uIGV4Y2VzcyBwYWRkaW5nIGNoYXJhY3RlcnMKSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUz
Nzc0KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CisJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBC
MEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07
CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBG
MDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAx
MDMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuY3BwICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2lu
IFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAg
LyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25U
aHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEw
MDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0
MTIzRkYgLyogRGVjaW1hbE51bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNG
RiAvKiBEZWNvZGVyLmggKi8sCisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVy
cmFibGVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERl
cXVlLmggKi8sCiAJCQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUu
aCAqLywKIAkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5o
ICovLApAQCAtNjQ4LDYgKzY1Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5oICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBG
aXhlZEFycmF5LmggKi8sCisJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRl
cy5oICovLAogCQkJCUE4QTQ3MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJ
CQkJQThBNDcyQTcxNTFBODI1QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFE
OEI5RDE3MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5
NCw2ICsxMDAwLDcgQEAKIAkJCQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1Jh
bmRvbVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZG
IC8qIE93bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBB
N0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
M0ZDMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
M0ZEMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0ZFMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTA1Nyw2ICsxMDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYg
LyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVC
MDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93
dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAor
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFz
ZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Ly8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5n
IHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5l
ZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0
aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3Bl
Y2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdn
aW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFs
aXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
b3JtYWxJbmNyZW1lbnQgPSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7
CisgICAgICAgIG1fcmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAg
ICBib29sIGhhc09uZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQo
KSA9PSAxOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
IShtX3JlZkNvdW50ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1h
bEluY3JlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsK
KyAgICAgICAgbV9yZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAh
bV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQg
fD0gZGVmZXJyZWRGbGFnOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3Jl
ZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6
IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisg
ICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAg
ICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0
SXNEZWZlcnJlZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRl
bGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5E
ZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVm
Q291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dU
Ri93dGYvRmxpcEJ5dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0
ZXNfaAorI2RlZmluZSBGbGlwQnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbihib29sIGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1
cm4gbGl0dGxlRW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRp
ZgorfQorCitpbmxpbmUgdWludDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAg
IHJldHVybiAoKHZhbHVlICYgMHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZm
MDApID4+IDgpOworfQorCitpbmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVl
KQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4MDAwMGZmMDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAw
MDApID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKwor
aW5saW5lIHVpbnQ2NF90IGZsaXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
KCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1
ZSAmIDB4MDAwMDAwMDAwMDAwZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
MDAwMDAwMDAwMGZmMDAwMGxsdSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAw
MDBmZjAwMDAwMGxsdSkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAw
MDAwbGx1KSA+PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUp
ID4+IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQw
KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQorewor
ICAgIGlmIChzaXplb2YodmFsdWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBp
ZiAoc2l6ZW9mKHZhbHVlKSA9PSAyKSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQg
b3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MTZfdCB3b3JkOworICAgICAgICB9IHU7CisgICAg
ICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29y
ZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZh
bHVlKSA9PSA0KSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7Cisg
ICAgICAgICAgICB1aW50MzJfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2lu
YWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAg
IHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KSB7
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1
aW50NjRfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsK
KyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9y
aWdpbmFsOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBUKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0Zs
aXBCeXRlc0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7CisKKyNlbmRpZiAv
LyBGbGlwQnl0ZXNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcu
Y3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRh
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZh
bHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYg
KCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVj
a2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQg
KyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBj
aGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpCi0gICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9i
eXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRl
cyhib29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4g
bGl0dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgot
fQotCi1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFy
IHRlbXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZv
aWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAx
KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAg
c3dhcEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQot
c3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVz
KHAsIHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMo
cCArIDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxp
dHRsZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAg
ICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0
OgotICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3Ojpn
ZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsK
LSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBp
dCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZh
bHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRl
T2Zmc2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBz
aXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3
YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVz
IGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9y
ZXMuCi0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7
Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRs
ZUVuZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSAr
IGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERh
dGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0K
LQotdWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci11aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1
aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0
YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1k
b3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJs
ZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNl
dEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1
ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0K
LSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKLQotY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0
aDsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNs
aWNlKGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50
OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJ
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0
SW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWlu
dDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxv
YXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0
RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWlu
dDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
IH0KLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0
VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAg
ICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0Rmxv
YXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2
NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlv
bmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49
IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNl
dCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVu
c2lnbmVkIG1fYnl0ZUxlbmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRGF0YVZpZXdfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208485</attachid>
            <date>2013-08-10 18:52:18 -0700</date>
            <delta_ts>2013-08-12 13:42:33 -0700</delta_ts>
            <desc>jsc works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>495382</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxMSBA
QAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFBlcmZvcm1hbmNlIG5vdCB5ZXQgbWVhc3VyZWQuIFdvcmsgaW4gcHJv
Z3Jlc3MuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEpTQ1R5
cGVkQXJyYXlTdHVicy5oOiBSZW1vdmVkLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnlWYWxJbmZvLmg6Cisg
ICAgICAgIChKU0M6Omhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8pOgorICAgICAg
ICAoSlNDOjpqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8pOgorICAgICAgICAoSlNDOjp0eXBlZEFy
cmF5VHlwZUZvckpJVEFycmF5TW9kZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAg
ICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRvVHlwZWRBcnJh
eVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBcnJheU1vZGU6OnR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToK
KyAgICAgICAgKiBoZWFwL0NvcHlUb2tlbi5oOgorICAgICAgICAqIGhlYXAvRGVmZXJHQy5oOgor
ICAgICAgICAoSlNDOjpEZWZlckdDRm9yQVdoaWxlOjpEZWZlckdDRm9yQVdoaWxlKToKKyAgICAg
ICAgKEpTQzo6RGVmZXJHQ0ZvckFXaGlsZTo6fkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpHQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjp+R0NJbmNvbWluZ1JlZkNvdW50ZWQpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAg
ICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6aW5jb21pbmdSZWZlcmVuY2VBdCk6Cisg
ICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpzaW5nbGV0b25GbGFnKToKKyAgICAg
ICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc1ZlY3Rvck9mQ2VsbHMpOgorICAgICAg
ICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzQW55SW5jb21pbmcpOgorICAgICAgICAo
SlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzU2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6
R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5jb21p
bmdSZWZDb3VudGVkOjp2ZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjphZGRJbmNvbWluZ1Jl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6Ojo6ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKToKKyAg
ICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpHQ0luY29taW5nUmVmQ291bnRlZFNldDo6c2l6ZSk6CisgICAgICAgICogaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZFNldElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQpOgorICAgICAgICAoSlNDOjo6On5HQ0luY29taW5nUmVmQ291
bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6YWRkUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6
Ojpzd2VlcCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3ZlQWxsKToKKyAgICAgICAgKEpTQzo6Ojpy
ZW1vdmVEZWFkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjpIZWFwOjpleHRyYVNpemUpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y2FwYWNpdHkpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVw
dGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBpbnRl
cnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpkYXRhVmlld1Rh
YmxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwOgorICAgICAg
ICAoSlNDOjpBcnJheUJ1ZmZlcjo6dHJhbnNmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0ZWQpOgorICAg
ICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXI6OnBpbik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp1bnBpbik6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6QXJy
YXlCdWZmZXJWaWV3KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZm
ZXJWaWV3KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKToK
KyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlclZpZXc6OmlzTmV1dGVyZWQpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6
OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YmFzZUFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQpOgorICAgICAgICAoSlND
OjpBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlKToKKyAgICAgICAgKEpTQzo6QXJyYXlC
dWZmZXJWaWV3OjpjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAuCisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmJ5
dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0VHlwZSk6CisgICAgICAgICog
cnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0NjRBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmRhdGEpOgorICAgICAgICAoSlNDOjpH
ZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6
Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6bGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppdGVtKToKKyAgICAgICAgKEpTQzo6
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91bmREYXRhKToKKyAgICAgICAgKEpTQzo6
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlND
Ojo6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnN1YmFycmF5KToKKyAg
ICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVyLmg6CisgICAgICAgIChKU0M6OkluZGV4aW5n
SGVhZGVyOjphcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRB
cnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGltZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9JbnQzMkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlcjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVm
aW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjppbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0QXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OmZpbmFsaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6c2l6ZU9mKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om9w
ZXJhdG9yISk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25D
b250ZXh0OjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojptb2RlKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OmJ1dHRlcmZseSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojptb2RlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKToKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzo6aW1wbCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpu
ZXV0ZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6Cisg
ICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNsb3dE
b3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFR5cGVkQXJyYXlJ
bXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNE
YXRhVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpKU0RhdGFWaWV3
KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6
OnNldCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCk6Cisg
ICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgIChKU0M6OkpTRGF0
YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3Lmg6
IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3UHJvdG90eXBl
KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6Z2V0RGF0YSk6CisgICAgICAgIChKU0M6OnNldERhdGEpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY0dldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY0dldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jR2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9h
dDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZp
ZXdQcm90b0Z1bmNTZXRJbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0
SW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
U2V0RmxvYXQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCk6
CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9K
U0Zsb2F0NjRBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzo6Ynl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojpi
eXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp0eXBlZFZl
Y3Rvcik6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5HZXRJbmRl
eFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuU2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6Omdl
dEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9Eb3Vi
bGUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkFjY2Vzc1Jh
bmdlUXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
dyk6CisgICAgICAgIChKU0M6Ojo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6Ojo6
Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnZhbGlkYXRlUmFuZ2UpOgorICAgICAgICAoSlND
Ojo6OnNldFdpdGhTcGVjaWZpY1R5cGUpOgorICAgICAgICAoSlNDOjo6OnNldCk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6Ojo6
ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpTQzo6
OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgpOgor
ICAgICAgICAoSlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6Ojo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6Ojo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6Ojo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ojo6Z2V0VHlwZWRBcnJheUlt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY1N1YmFycmF5KToKKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZSk6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
Ojo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnJlc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0Ojp0eXBlZEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1l
L0pTSW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50MzJBcnJheS5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAg
ICogcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDE2QXJyYXkuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9KU1VpbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNVaW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OENsYW1w
ZWRBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNJ
bmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkludGVncmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZl
KToKKyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAg
ICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChK
U0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZs
b2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFt
cGVkQWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9y
Ojp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0RvdWJs
ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OmNsYW1wKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OlR5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChK
U0M6OlR5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUv
VHlwZWRBcnJheVR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y2xhc3NJbmZvRm9yVHlw
ZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OnRvSW5kZXgpOgorICAgICAgICAo
SlNDOjppc1R5cGVkVmlldyk6CisgICAgICAgIChKU0M6OmVsZW1lbnRTaXplKToKKyAgICAgICAg
KEpTQzo6aXNJbnQpOgorICAgICAgICAoSlNDOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6aXNT
aWduZWQpOgorICAgICAgICAoSlNDOjppc0NsYW1wZWQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9VaW50MTZBcnJheS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvVWludDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQ4QXJy
YXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZN
Ojp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0wOCAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVzdG9yaW5nIHVzZSBvZiBTdGFja0l0
ZXJhdG9yIGluc3RlYWQgb2YgSW50ZXJwcmV0ZXI6OmdldFN0YWNrdHJhY2UoKS4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTM3NzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5o
IFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlwZS5sdXQuaCBc
CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBc
CiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAuaCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAx
NTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKU0NUeXBlZEFycmF5U3R1YnNfaAotI2RlZmlu
ZSBKU0NUeXBlZEFycmF5U3R1YnNfaAotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5j
bHVkZSAiRmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MTZBcnJheS5oIgotI2luY2x1ZGUg
IkludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU0Rlc3Ry
dWN0aWJsZU9iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQz
MkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQ4Q2xhbXBl
ZEFycmF5LmgiCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LSAgICAKLSNkZWZpbmUgVFlQRURfQVJSQVkobmFtZSwgdHlwZSkgXAotY2xhc3MgSlMjI25hbWUj
I0FycmF5IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsgXAotcHVibGljOiBcCi0gICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCi0gICAgc3RhdGljIEpTIyNuYW1l
IyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKLSAgICB7IFwK
LSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFt
ZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAotICAgICAgICByZXR1cm4gcHRy
OyBcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1wKLSAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAg
c3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qm
KTtcCi0gICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvO1wKLVwKLSAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKLSAgICB7XAotICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pO1wKLSAgICB9XAotXAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMp
O1wKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1wKLVwKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBl
ZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OlR5cGVkQXJyYXkjI25hbWU7
XAotICAgIHVpbnQzMl90IG1fc3RvcmFnZUxlbmd0aDtcCi0gICAgdHlwZSogbV9zdG9yYWdlO1wK
LSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1wbDtcCi1wcm90ZWN0ZWQ6XAotICAgIEpTIyNu
YW1lIyNBcnJheShKU0M6OlN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxu
YW1lIyNBcnJheT4pO1wKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsgXAotICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1wKLSAgICB2b2lkIGluZGV4U2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XAotfTtcCi1cCi1j
b25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNuYW1lICJBcnJheSIg
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyNuYW1lIyNBcnJh
eSkgfTtcCi1cCi1KUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNB
cnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKVwK
LSAgICAsIG1faW1wbChpbXBsKVwKLXtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSlcCi17XAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtc
Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlMjI25hbWUjI0FycmF5Ojpz
X2luZm8sIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZSksIE9CSkVD
VF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpO1wKLSAgICB2bS5y
ZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRvcik7XAot
ICAgIG1fc3RvcmFnZSA9IG1faW1wbC0+ZGF0YSgpO1wKLSAgICBtX3N0b3JhZ2VMZW5ndGggPSBt
X2ltcGwtPmxlbmd0aCgpO1wKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOyBcCi0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTtcCi19XAotXAotYm9v
bCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMj
bmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5h
c0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkg
e1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAot
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgp
KTtcCi0gICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1wKLX1cCi1c
Ci1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVk
IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09i
amVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0
aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgRG9udERlbGV0ZSk7XAotICAgICAg
ICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcCi19XAot
XAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpz
Q2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICBpZiAocHJvcGVydHlOYW1lIDwgdGhp
c09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XAotICAgICAgICByZXR1cm4g
dHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXgg
IT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7XAotICAgICAgICB0aGlzT2JqZWN0LT5pbmRl
eFNldHRlcihleGVjLCBpbmRleCwgdmFsdWUpO1wKLSAgICAgICAgcmV0dXJuO1wKLSAgICB9XAot
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKSBcCi17XAotICAg
IG1faW1wbC0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XAotfVwKLVwKLXZvaWQg
SlMjI25hbWUjI0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXAote1wKLSAgICBK
UyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4oY2Vs
bCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7
XAotICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUp
O1wKLSAgICByZXR1cm47XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVwKLXtcCi0gICAgSlMj
I25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVj
dCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7
XAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5n
dGg7ICsraSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpO1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpTIyNuYW1lIyNBcnJheTo6
Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17XAotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7XAotICAgIHR5cGUgcmVzdWx0ID0gbV9p
bXBsLT5pdGVtKGluZGV4KTtcCi0gICAgaWYgKHN0ZDo6aXNuYW4oKGRvdWJsZSlyZXN1bHQpKVwK
LSAgICAgICAgcmV0dXJuIGpzTmFOKCk7XAotICAgIHJldHVybiBKU1ZhbHVlKHJlc3VsdCk7XAot
fVwKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTIyNuYW1l
IyNBcnJheShFeGVjU3RhdGUqIGNhbGxGcmFtZSkgeyBcCi0gICAgaWYgKGNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkgXAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOyBcCi0gICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LnRvSW50MzIoY2FsbEZyYW1lKTsgXAotICAgIGlmIChsZW5ndGggPCAwKSBcCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNhbGxGcmFtZS0+dm0o
KSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSk7IFwKLSAgICBSZWZQdHI8bmFtZSMjQXJy
YXk+IGJ1ZmZlciA9IG5hbWUjI0FycmF5OjpjcmVhdGUobGVuZ3RoKTsgXAotICAgIGlmICghYnVm
ZmVyKSBcCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVSYW5n
ZUVycm9yKGNhbGxGcmFtZSwgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdo
IHBvc2l0aXZlIGludGVnZXIuIikpOyBcCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyMj
bmFtZSMjQXJyYXk6OmNyZWF0ZShzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLCBidWZmZXIucmVsZWFzZSgpKSk7IFwKLX0KLQotVFlQRURfQVJSQVkoVWludDgsIHVp
bnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDhDbGFtcGVkLCB1aW50OF90KTsKLVRZUEVEX0FSUkFZ
KFVpbnQxNiwgdWludDE2X3QpOwotVFlQRURfQVJSQVkoVWludDMyLCB1aW50MzJfdCk7Ci1UWVBF
RF9BUlJBWShJbnQ4LCBpbnQ4X3QpOwotVFlQRURfQVJSQVkoSW50MTYsIGludDE2X3QpOwotVFlQ
RURfQVJSQVkoSW50MzIsIGludDMyX3QpOwotVFlQRURfQVJSQVkoRmxvYXQzMiwgZmxvYXQpOwot
VFlQRURfQVJSQVkoRmxvYXQ2NCwgZG91YmxlKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkluaXRp
YWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKLSNpbmNsdWRlICJKU0NUeXBlZEFycmF5U3R1YnMuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5oIgpAQCAt
MjM4LDE2ICsyMzcsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiY2xl
YXJTYW1wbGluZ0ZsYWdzIiwgZnVuY3Rpb25DbGVhclNhbXBsaW5nRmxhZ3MsIDEpOwogI2VuZGlm
CiAgICAgICAgIAotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OEFy
cmF5IiwgY29uc3RydWN0SlNVaW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJs
ZUZ1bmN0aW9uKHZtLCAiVWludDhDbGFtcGVkQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4Q2xhbXBl
ZEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDE2
QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKHZtLCAiVWludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50OEFycmF5IiwgY29u
c3RydWN0SlNJbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24o
dm0sICJJbnQxNkFycmF5IiwgY29uc3RydWN0SlNJbnQxNkFycmF5LCAxKTsKLSAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MzJBcnJheSIsIGNvbnN0cnVjdEpTSW50MzJB
cnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkZsb2F0MzJB
cnJheSIsIGNvbnN0cnVjdEpTRmxvYXQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0
YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQ2NEFycmF5IiwgY29uc3RydWN0SlNGbG9hdDY0QXJyYXks
IDEpOwotCiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9i
YWxFeGVjKCksIDApOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChnbG9iYWxFeGVj
KCksIGksIGpzU3RyaW5nKGdsb2JhbEV4ZWMoKSwgYXJndW1lbnRzW2ldKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdG
IC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQ
cmVwYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRB
NTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQw
MDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBB
QTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUMx
N0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
QTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRjE3QjZCNTQ1
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQjE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi87IH07CisJ
CTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8q
IERhdGFWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjIx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUxMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZCNUFCMDBBN0FFM0YgLyog
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsK
KwkJMEYyQjY2RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY2
RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5j
cHAgKi87IH07CisJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmll
dy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJE
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RUMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFRTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXdQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMx
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY0MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY4
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNFMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLzsgfTsKKwkJMEYyQjY2
RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNGMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovOyB9
OworCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBl
ZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ0MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA1MTdCNkI1QUIwMEE3
QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA3MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJCNjcwODE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REIxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi87IH07CisJ
CTBGMkI2NzBCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REQxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwogCQkwRjJC
REMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1
MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0OSw3ICszOTksNiBAQAogCQkwRkVBMEEz
MjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0NvbW1vbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUIzRUNEMTYy
MzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8q
IFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBG
RUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE3MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsgfTsKIAkJ
MEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNCw4ICs4NzMsNiBAQAog
CQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQg
LyogSW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJDMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJE
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyRjE3QURCNUYzMDA1
QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFG
MzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThB
RjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVp
bnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTEyMDcsNiArMTI1NCw1NiBAQAogCQkwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyog
REZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JT
bG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QUIx
N0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFWaWV3LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERh
dGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFWaWV3Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1QUIwMEE3QUUzRiAvKiBH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
YXRhVmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zs
b2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJ
bnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MzJBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNV
aW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQzMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAv
KiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
eXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRE
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4
OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU0OCw2IEBACiAJCTBGRUEwQTJFMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJ
VENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZH
SklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3
MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8q
IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5NzgsNiBAQAogCQlBNzU3MDZERDExOEEyQkNG
MDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVy
Q3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhl
YWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3
QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlND
VHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5
cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDEx
ODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0
SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFj
dEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjIsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFG
MkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRB
cnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWlu
dDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYz
MDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMjYwLDcgKzIzNTMsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4
NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcu
aCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVm
aXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0
dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2Vz
Lm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywK
QEAgLTI1NTYsNiArMjY0OCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBE
RkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZH
Q29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2Vy
dGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1
MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNB
IC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODI4LDYgKzI5MjQsNTIgQEAKIAkJ
N0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBE
YXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmggKi8sCisJCQkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlldy5oICovLAorCQkJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXIuY3BwICovLAorCQkJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyLmggKi8sCisJCQkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJMEYyQjY2QjcxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oICovLAorCQkJCTBGMkI2NkI4MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJCNjZCOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovLAorCQkJCTBGMkI2NkJB
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2
QkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi8sCisJCQkJMEYyQjY2
QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovLAorCQkJ
CTBGMkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKKwkJCQkwRjJC
NjZCRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oICovLAorCQkJCTBGMkI2NkJGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJCNjZD
MDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovLAorCQkJCTBGMkI2
NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkMy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAorCQkJCTBGMkI2NkMzMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovLAorCQkJCTBGMkI2
NkM0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmggKi8sCisJCQkJMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovLAorCQkJCTBGMkI2NkM3
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICov
LAorCQkJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNJbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQx
NkFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJh
eS5oICovLAorCQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZENzE3QjZCNUFCMDBBN0FF
M0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZE
QTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjJC
NjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAogCQkJCUJDRjYwNTExMEUyMDNF
RjgwMEI5QTY0RCAvKiBBcmdMaXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2
NEQgLyogQXJnTGlzdC5oICovLAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1
bWVudHMuY3BwICovLApAQCAtMjkyMCw3ICszMDYyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDhBcnJheS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4
ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMzA3OCw4ICszMjE5LDYgQEAKIAkJ
CQkxNEEzOTZBNjBDRDI5MzMxMDBCNUI0RkYgLyogU3ltYm9sVGFibGUuaCAqLywKIAkJCQk1RDUz
NzI2RDBFMUM1NDZCMDAyMUU1NDkgLyogVHJhY2luZy5kICovLAogCQkJCTVENTM3MjZFMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8sCi0JCQkJQTdBOEFGMkYxN0FEQjVGMzAwNUFCMTc0
IC8qIFR5cGVkQXJyYXlCYXNlLmggKi8sCi0JCQkJMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8q
IFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi8sCiAJCQkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVp
bnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50MzJBcnJheS5oICovLApAQCAtMzUzOCwxMiArMzY3NywxNSBAQAogCQkJCUJDMThDNTI0MEUx
NkZDOEEwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjdGMzk2MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJheVN0b3JhZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk2ODhDQjE1MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcg
LyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4NEEyNjExMUQxNjYyMjAwNTc3NkFDIC8qIEFTVEJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXpl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0lu
dGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODE2RTFDMTU0Q0M1NkMwMEI4MDU0QyAvKiBC
bG9ja0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0
NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzBCMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM1NTUsNiArMzY5Nyw3IEBACiAJCQkJQTdDMUVBRUYxNzk4N0FC
NjAwMjk5REIyIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1RTNC
QzA1MEUxQUU2ODIwMEIyRDFDMSAvKiBDYWxsSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5
NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTY2LDYgKzM3MDksNyBAQAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5
OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0
QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQTcxNEJDRjUwNzAwODg1QjRGIC8q
IENvZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0NjAg
LyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVGMTVGMTRCN0E3
M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzU3Niw2
ICszNzIwLDcgQEAKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJ
VExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBj
b25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBD
b25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNjBFMTZGNUNEMDBCMzQ0NjAgLyogQ29uc3RydWN0RGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUQyRkMxNEYwMjQ5ODAwQTRCMTU5IC8qIENvcGll
ZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDOEQwMzAxNEEzQ0VGQzAwNTc4RTY1
IC8qIENvcGllZEJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MDQsNiArMzc0OSw3IEBACiAJ
CQkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Mzc4MTBDMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdBbmFseXNp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTQ2MTUz
NENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxNyw2ICsz
NzYzLDcgQEAKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAvKiBE
RkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMyOERGODIw
MDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
RTMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0
aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIx
IC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEExNEMzQ0Qy
OTAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjUwLDYg
KzM3OTcsNyBAQAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkExN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Zs
dXNoTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNkM0RDEz
NkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkFFNkM0RTEzNkExMUU0MDA5NjMwMTIgLyogREZHR1BSSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4g
SGVhZGVycyAqLywKQEAgLTM2NTgsNiArMzgwNiw3IEBACiAJCQkJMEZFQTBBMzQxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5RENDMTMyOERG
ODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3
NzkxNzk3MzhCODAwOURGNzQ0IC8qIERGR0pJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzNBNTM1QjE3OTlDRDVEMDAxNzBDMTkgLyogREZHTGF6eUpTVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdM
aXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzY3MSw2ICszODIwLDcg
QEAKIAkJCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQTU4MUJCMTUwRTk1MzAwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQTU4MUJDMTUw
RTk1MzAwMEI5QTJEOSAvKiBERkdOb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlE
RDAxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2ODQsNiArMzgzNCw4IEBACiAJCQkJMEYyMzVCRUUx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGRkM5NUMxNEVGOTBBRjAwQzcyNTMyIC8qIERGR1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzhBOTc3QjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RjcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NTE2QzFEQjBCMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZG
Qzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3Rl
ckJhbmsuaCBpbiBIZWFkZXJzICovLApAQCAtMzY5Myw2ICszODQ1LDcgQEAKIAkJCQlBNzQxMDE3
RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdT
Y29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0NjE1QjM3MDFGMDA4RjM2M0Ug
LyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURCIC8q
IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMzEzMjhE
RjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCBpbiBIZWFkZXJzICovLApAQCAtMzcy
Niw2ICszODc5LDcgQEAKIAkJCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9u
SGFybmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8q
IEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYg
LyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0
ZWRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzQ2LDYgKzM5MDAsNyBAQAogCQkJCTBGRUEw
QTJDMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDgxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEw
RTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4
QTk3ODExNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZUTExpbmsuaCBpbiBIZWFkZXJzICov
LApAQCAtMzc5NCw3ICszOTQ5LDYgQEAKIAkJCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyog
SW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNBMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QThBRjNEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
Nzg4NTNGQTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODEzLDYgKzM5NjcsNyBAQAogCQkJCTBGNzY2
RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNEM1MjQyQjBGNTM1NUU5MDBCQTNEMDQgLyogSklUU3R1YnMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RTE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1
YnNBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVGMTc0MzQzQ0MwMEEzMkUyNSAvKiBK
SVRTdHVic0FSTXY3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E0QUUwRDE3OTczQjREMDA1NjEy
QjEgLyogSklUU3R1YnNNSVBTLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NDAsNiArMzk5NSw3IEBA
CiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVk
QXJyYXlBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUUwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQ29udGV4dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkw
MjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzg1NSw2ICs0MDExLDcgQEAKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMg
LyogSlNNYW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0MTVFQkRFNEEw
MDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdFJlZi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2OTU3IC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zODY2LDYgKzQwMjMsNyBAQAogCQkJCTE0ODc0QUU2MTVFQkRFNEEw
MDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAy
MDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkx
OUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUUw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzFFQUYw
MTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4ODQsNiArNDA0Miw3IEBACiAJCQkJODZFM0M2MTUxNjdCQUJENzAwNkQ3NjBBIC8qIEpTVmly
dHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYw
QSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
RTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY3MDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09i
amVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQw
MDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdC
QUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTE0LDYg
KzQwNzMsNyBAQAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9j
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2Nh
bFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNzBF
MTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDRDE0
QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRCNzIzQjgxMkQ3REE2RjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zOTI2LDYgKzQwODYsNyBAQAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4
NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQx
NkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyog
TWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYwOTEzNTM5QTI4MDBC
MDJFODYgLyogTWFya2VkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTQ0OENCMTNBMTc2
RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTM0LDE0
ICs0MDk1LDE3IEBACiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBN
YXRjaFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0MwRTE2RjVDRDAwQjM0NDYw
IC8qIE1hdGhPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUy
QTBFMTZGQ0MyMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkwMjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZGOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI1NDY3QjE0RjVDN0UxMDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTIxMUEyMTNFRTAw
MDdGN0YwIC8qIE1JUFNBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUJGMzAwMTU2
MEYwNkEwMDhFOTIyMiAvKiBOYW1lQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RUJGMzAyMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RUJGMzA0MTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjkyOTcg
LyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZE
MDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
RUZGMDA2NDBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAt
Mzk3MSw2ICs0MTM1LDcgQEAKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNDE0
RTFCNjAwMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0Iy
QjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNE
MDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZE
RDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzk5OSw5
ICs0MTY0LDExIEBACiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYyMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xv
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVj
ZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3
MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtNDAyNCw2ICs0MTkxLDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
RUMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDM2LDcgKzQyMDQsOSBAQAogCQkJ
CTE0REYwNERBMTZCMzk5NkQwMDE2QTUxMyAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNENBOTU4QjE2QUI1MERFMDA5MzhBMDYgLyogU3RhdGljUHJvcGVy
dHlBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczMEI2MTIxMjUwMDY4RjAwOUQyNUIx
IC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDY2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJp
bmdPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTI2MEUxNkZDQTcw
MEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNDgs
NiArNDIxOCw4IEBACiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJh
cmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FFQTIgLyog
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNTE0
Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENs
YW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzkxNUFFNEExRjAwOEYzNjNF
IC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQ0YwRDA4MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1Y3R1cmVTdHViSW5mby5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM5MDQxNDgwRUI5MjUwOTAwRkUyNkZBIC8qIFN0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDU3LDkgKzQyMjksMTAgQEAKIAkJCQkwRjU3
MkQ0RjE2ODc5RkREMDBFNTdGQkQgLyogVGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Mzg2NTU2MTE4Njk3QjQwMDU0MDI3OSAvKiBUaHVua0dlbmVyYXRvcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVENTM3MjZGMEUx
QzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRTE3
QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RUIzRUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1
ZGlzODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1
ZGlzODZfZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDg5LDYgKzQ2NjIsNyBA
QAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJB
Y3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUz
RiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJz
dHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY4OCw3IEBACiAJCQkJ
QTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NT
RVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3
MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hh
aW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MTgs
NyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JF
eGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBE
RkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Miw3IEBACiAJ
CQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0
dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYw
QTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcx
MzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2
OCwxMSArNDg0NSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAv
KiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBF
NTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpT
UHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIw
MEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4NjksNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcw
MDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAx
M0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0
MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTIsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUw
MDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERB
MDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDc2MiwxNyArNDk0MywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYy
RjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENB
N0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4
cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAx
M0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2
RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdC
MiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAy
RkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNt
YWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJC
OUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0OTkwLDcgQEAKIAkJCQlFMThFM0E1OTBE
RjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJE
MkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgx
NTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01h
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjks
NyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBi
b29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBl
ICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJ
VEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRB
cnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAg
c3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlw
ZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhB
cnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAg
ICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Cisg
ICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNh
c2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4g
SklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7
Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAg
ICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAg
ICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJl
dHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRB
cnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFy
cmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJu
IFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
SW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4
OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWlu
dDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWlu
dDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0
MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2
NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlw
ZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9y
U3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxl
SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlw
ZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFz
c09mKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwog
ICAgIAotICAgIGlmIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFy
cmF5Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VU
eXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAgICByZXR1cm4g
U3BlY0ludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAg
ICByZXR1cm4gU3BlY0ludDE2QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgot
ICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKLSAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OENs
YW1wZWRBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAg
cmV0dXJuIFNwZWNVaW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgot
ICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFy
cmF5RmxvYXQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OwotICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0
QXJyYXk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNl
IFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFycmF5OworICAgIGNhc2UgVHlwZUludDMy
OgorICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDg6Cisg
ICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2FzZSBUeXBlVWlu
dDE2OgorICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OworICAgIGNhc2UgVHlwZVVpbnQz
MjoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZK
U09iamVjdDo6c19pbmZvKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBj
b25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJhCiAgICAgfQogfQogCitUeXBl
ZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUludDg7CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVJbnQxNjsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZUludDMyOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDg7CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAg
ICAgcmV0dXJuIFR5cGVVaW50MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAg
ICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiB2b2lkIEFycmF5TW9kZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCh0eXBlKCksIGFycmF5Q2xhc3MoKSwg
c3BlY3VsYXRpb24oKSwgY29udmVyc2lvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4
IEBAIGNvbnN0IGNoYXIqIGFycmF5Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIq
IGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOwogY29uc3QgY2hh
ciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOwogCitUeXBlZEFy
cmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpUeXBlKTsKKwogY2xhc3MgQXJyYXlNb2Rl
IHsKIHB1YmxpYzoKICAgICBBcnJheU1vZGUoKQpAQCAtMzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6OlN0cmluZzsKICAgICB9CiAgICAgCisg
ICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvVHlwZWRBcnJheVR5cGUodHlwZSgpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjY3LDM3ICsyNjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURl
c2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50
OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAg
ICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODczLDQ2ICsyODQ5LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91
bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAg
ICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAg
fSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTgwLDM3ICsyNTgwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAg
ICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAg
ICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yODcxLDQ2ICsyODQ3LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGlu
dDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFy
cmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogCiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgzLDMyICs1ODMsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgfQogfQogICAgIAotY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihB
cnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewot
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5p
bnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2Fz
ZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53
YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5TW9kZSBhcnJheU1vZGUsIEluZGV4
aW5nVHlwZSBzaGFwZSkKIHsKICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsK
QEAgLTY5NCw4ICs2NjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUq
IG5vCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJh
eU1vZGUoKSk7Ci0gICAgCiAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2Vk
KG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7
CiAgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC03
MjcsMjIgKzY5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5v
CiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9
ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVp
bnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2Ug
QXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVz
dWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8g
PSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRD
bGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0
LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI1OTQsOCArMjU1NywxMCBA
QCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5
cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjEyLDE2ICsy
NTc3LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBz
cGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwK
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
ZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlw
ZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVk
QXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0Lmxv
YWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0g
U2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAg
ICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28p
LCByZXN1bHRSZWcpOwpAQCAtMjYzMiwxMiArMjU5OCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAg
ICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVk
QXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUp
KSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRu
ZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUp
ID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIo
cmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAg
LTI2NTIsOCArMjYxOCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNp
Z25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBw
cm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQo
aXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3MCw4ICsyNjM4LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAo
cm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRT
aXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBB
U1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3Vi
bGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CkBAIC0yNjg2LDggKzI2NTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1f
aml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91
bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50
U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAg
Y29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI2OTYsOCArMjY2NCw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAo
cm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVt
ZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQ
UlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0yNzE3LDcgKzI2ODUsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90
TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3Mg
PT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkp
CiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91Ymxl
VG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQp
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9q
aXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6
OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0Miw5ICsyNzEwLDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBz
dG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAg
ICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewor
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1f
aml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMjc2Miw4ICsyNzMwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAg
IAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7
CkBAIC0yNzc5LDggKzI3NDksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChl
bGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRG
bG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDEsOCArMjc3MiwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90
IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAog
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAg
IApAQCAtMjgxNywxMCArMjc5MCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5h
bHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVz
ZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBp
ZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlm
IChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2Fz
ZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwog
ICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7
CkBAIC00MDI2LDggKzQwMDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5k
ZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkp
OwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsK
QEAgLTQwNDEsOCArNDAxNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5k
ZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJl
Zyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIApAQCAtNDE0Myw4ICs0MTE5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgo
Tm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRv
ciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE4NCwxNiArNDE1OCwxNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVu
dHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
YmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3Ip
OwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
ZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhN
b2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9k
ZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVf
dCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwg
VHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBi
b29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5v
ZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRB
cnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBq
dW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJl
ZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBq
dW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJl
ZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3
ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRl
cmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVj
dG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAg
cHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoK
KyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXAp
CisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0K
KyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVj
cmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hl
YXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRl
ZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdS
ZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8
d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQg
b2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUg
dG8gaW5jb21pbmcgcmVmZXJlbmNlcyBmcm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBp
bgorLy8gcmV2ZXJzZTogdGhlIG9iamVjdCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4g
U3VjaCBvYmplY3RzIGFsc28KKy8vIGhhdmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3Qg
aGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxl
UmVmQ291bnRlZDxUPiB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAg
ICAgICA6IG1fZW5jb2RlZFBvaW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0lu
Y29taW5nUmVmQ291bnRlZCgpCisgICAgeworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygp
KQorICAgICAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAg
c2l6ZV90IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghaGFzQW55SW5jb21pbmcoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBp
ZiAoaGFzU2luZ2xldG9uKCkpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJu
IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29t
aW5nUmVmZXJlbmNlQXQoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc0FueUluY29taW5nKCkpOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgLy8gSXQncyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwg
dGhpcyBkaXJlY3RseSwgc2luY2UgaWYgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3Jl
IHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENh
bGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAg
Ym9vbCBhZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRl
ciBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZwor
ICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZhbHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUg
dGhlIG9iamVjdCwKKyAgICAvLyBhbmQgaWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUu
IEluIGdlbmVyYWwsIHlvdSBkb24ndCB3YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZp
bHRlciBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3Jl
IGFsc28gd2Fsa2luZyB0aGUgR0MncyBsaXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRl
ckZ1bmN0aW9uVHlwZT4KKyAgICBib29sIGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJG
dW5jdGlvblR5cGUmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5n
bGV0b25GbGFnKCkgeyByZXR1cm4gMTsgfQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxs
cygpIGNvbnN0IHsgcmV0dXJuICEobV9lbmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7
IH0KKyAgICBib29sIGhhc0FueUluY29taW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQ
b2ludGVyOyB9CisgICAgYm9vbCBoYXNTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJ
bmNvbWluZygpICYmICFoYXNWZWN0b3JPZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNp
bmdsZXRvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+
c2luZ2xldG9uRmxhZygpKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0
b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxz
KCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPio+KG1fZW5j
b2RlZFBvaW50ZXIpOworICAgIH0KKyAgICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6
IHRoaXMgaXMgYSBKU0NlbGwqLgorICAgIC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMg
aXMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29k
ZWRQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29t
aW5nUmVmQ291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAi
R0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxU
Pjo6YWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55
SW5jb21pbmcoKSkgeworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMtPnNldElzRGVm
ZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1Jl
ZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2lu
Z2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9y
PEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAg
ICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZD
ZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JP
ZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29s
IEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVy
RnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIWhhc0FueUluY29taW5n
KCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NF
UlQodGhpcy0+cmVmQ291bnQoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAorICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAKKyAgICBpZiAo
aGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNpbmdsZXRvbigp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2Vu
Y29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAg
ICAgICAgcmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkg
PSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1v
dmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXpl
KCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVjdG9y
T2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsK
KyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5j
b21pbmcoKSk7CisgICAgICAgIHJldHVybiB0aGlzLT5zZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAg
ICB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxzKCktPmF0KDAp
OworICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFnKCk7CisgICAg
QVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVm
Q291bnRlZFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNl
dF9oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworLy8gVCA9IHNvbWUgc3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwgbXVzdCBz
dXBwb3J0IGEgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6CisgICAg
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQo
KTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3
IHRvIHRoaXMgc2V0LgorICAgIGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAK
KyAgICB2b2lkIHN3ZWVwKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVzOyB9OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVBbGwo
SlNDZWxsKik7CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAgICAKKyAg
ICBWZWN0b3I8VCo+IG1fdmVjdG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVm
aW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5j
b21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTsp
CisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxs
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAo
IW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX3ZlY3Rvci5hcHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9IG9iamVjdC0+
Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAg
ICAgICBUKiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmpl
Y3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVjdC0+ZmlsdGVy
SW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIG1fYnl0ZXMgLT0gc2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9y
Lmxhc3QoKTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92
ZUFsbChKU0NlbGwqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxs
KiBjZWxsKQoreworICAgIHJldHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwUm9v
dFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluY3Jl
bWVudGFsU3dlZXBlci5oIgpAQCAtMzU4LDYgKzM1OSwxNCBAQCB2b2lkIEhlYXA6OmpldHRpc29u
REZHQ29kZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVC
bG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlC
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNl
bGwsIGJ1ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAg
ICAgICBkaWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpKTsKKyAgICB9
Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBo
ZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwxNCArNjMwLDE5IEBAIHNpemVfdCBIZWFw
OjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsK
IH0KIAorc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7CisgICAgcmV0dXJuIG1fZXh0cmFNZW1v
cnlVc2FnZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsKK30KKwogc2l6ZV90IEhlYXA6OnNpemUo
KQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNp
emUoKSArIG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXpl
KCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhl
YXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsg
bV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBh
Y2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBz
aXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1LDYgKzc1OSwx
MSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgfQogCiAg
ICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAgCisgICAgeworICAgICAgICBHQ1BI
QVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAo
KTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmpl
Y3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAtOTI0LDEyICs5NDMsMTYgQEAgdm9p
ZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsK
IH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2
b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAg
ICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgp
Cit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNp
b24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9o
CiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgi
CiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNo
YXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFj
ay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisg
ICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUg
b2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0
eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAg
LTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzUGFnZWRP
dXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0
aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1
ZmZlciogYnVmZmVyKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2Rl
QmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAgICAgZnJpZW5k
IGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9yQVdoaWxlOwog
ICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmll
bmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7
CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2Nh
dG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwog
ICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAg
ICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKICAg
ICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVkU3BhY2UgbV9z
dG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVy
PiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKIAog
I2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
IHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90eXBlVGFibGU7
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYm9vbGVhblBy
b3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3
VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRh
Vmlld1RhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsg
fQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1
Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90
eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5l
cnJvclByb3RvdHlwZVRhYmxlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExp
c3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENv
bnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlz
dCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgICAgICBKdW1w
TGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRU
eXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBU
eXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdU
MCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KICAgICAg
ICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBp
bnQtY2hlY2tlZCBhbmQKQEAgLTUwMyw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1No
YXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFn
ZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAg
IEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7Ci0gICAg
ICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90
IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsK
KyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAg
ICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSwzNSArMTU0OSwxMyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRB
cnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0
b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
SW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIDIsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCA0LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50
OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwg
MSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50
OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9h
dFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmUgPSBq
dW1wKCk7CkBAIC0xNjE4LDM1ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBU
cnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2ln
bmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNj
cmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRl
Um91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCks
IDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJy
YXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0
MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7
CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFy
cmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsxNjIzLDEwIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxf
Z2VuZXJpYykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICAvLyBU
aGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5m
by4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVnaXN0
ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5LgogCkBA
IC0xNjg5LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eUdldEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gs
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0Zv
clR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVu
Z3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkg
eworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAg
IGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25l
ZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0
eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09
IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAg
ICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVz
dWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgo
YmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2
NzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQog
ICAgIAogICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRu
ZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAgIGlmICh0eXBlID09IFR5cGVVaW50MzIp
IHsKICAgICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
cmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAgCiAgICAgICAgIGNvbnZl
cnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3
LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICByZXR1
cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVy
SUQgYmFzZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKQEAgLTE3
NTgsMTEgKzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlH
ZQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3Ry
dWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlw
ZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7Cisg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgbG9h
ZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAg
ICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4
ICsxNzQ4LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAg
ICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlw
ZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQo
dHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4LDggKzE3NjksOCBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhi
YXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFi
bGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNs
YXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
ZWFybHlTY3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcg
dGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAg
ICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVzcyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7
CisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOwogICAgICAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0
ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRo
YW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9yMzIoZWFy
bHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3LDcgQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgICAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNo
IChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAgICAgc3RvcmU4KGVhcmx5
U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsK
KyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAg
LTE4NzIsOCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHUKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1f
Y2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Cisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNj
cmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNz
SW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5OCw5ICsxODYxLDkgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdl
IHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0
IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9i
YmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zm
c2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAg
IGNhc2UgNDoKICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7
CiAgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwx
MCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxNCArMjYs
MTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogCi0j
aW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmll
dy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBBcnJheUJ1
ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRy
PEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRy
YW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkgQEAgYm9vbCBBcnJheUJ1
ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAgIGZvciAoQXJy
YXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0g
ICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxWaWV3c0FyZU5l
dXRlcmFibGUgPSBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc05ldXRlcmFibGUgPSAhbV9waW5D
b3VudDsKIAotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCisgICAgaWYgKGlzTmV1dGVy
YWJsZSkKICAgICAgICAgbV9jb250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwogICAgIGVsc2Ugewog
ICAgICAgICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYsMzYgKzUxLDEzIEBAIGJv
b2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJy
YXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXco
Y3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+
aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAg
bmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IG51bWJl
ck9mSW5jb21pbmdSZWZlcmVuY2VzKCk7IGktLTspIHsKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZl
cmVuY2VBdChpKSk7CisgICAgICAgIGlmICh2aWV3KQorICAgICAgICAgICAgdmlldy0+bmV1dGVy
KCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyOjphZGRW
aWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7
Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmly
c3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJl
dlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1
ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRo
aXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAg
ICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBp
ZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0Vmll
dyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAg
ICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3
ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjYsMTUgKzI2LDE3IEBACiAjaWZuZGVmIEFycmF5QnVmZmVyX2gK
ICNkZWZpbmUgQXJyYXlCdWZmZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3Owor
Y2xhc3MgSlNBcnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygp
OwotCisgICAgCiAgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2ln
bmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiAr
ODgsMTMgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xh
c3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3Mg
QXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciop
OwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25z
dCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVz
ZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC05OSwxNCArMTAy
LDE2IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlubGluZSBjb25z
dCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdDsKKyAgICAKKyAgICBpbmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNv
bnN0OwogCiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdp
biwgaW50IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNs
aWNlKGludCBiZWdpbikgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHZvaWQgcGluKCk7CisgICAg
aW5saW5lIHZvaWQgdW5waW4oKTsKIAotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcq
KTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBib29sIGlz
TmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5BcnJheUJ1
ZmZlcigpIHsgfQpAQCAtMTE5LDggKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNp
Z25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7CiAgICAgc3RhdGljIGlubGluZSBpbnQg
Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7CiAKKyAgICB1bnNpZ25lZCBt
X3BpbkNvdW50OwogICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsKLSAgICBBcnJh
eUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5QnVm
ZmVyPiBtX3dyYXBwZXI7CiB9OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgs
IGludCBsZWZ0LCBpbnQgcmlnaHQpCkBAIC0xNTksNiArMTY3LDEyIEBAIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5
QnVmZmVyKGNvbnRlbnRzKSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgp
Cit7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZvaWQqPihk
YXRhKSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0
dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjpEb250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAg
IDogbV9waW5Db3VudCgwKQogewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwog
fQpAQCAtMTk0LDYgKzIwOCwxMSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0KIAorc2l6ZV90
IEFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHJldHVy
biBzaXplb2YoQXJyYXlCdWZmZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlTGVuZ3RoKCkp
OworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJl
Z2luLCBpbnQgZW5kKSBjb25zdAogewogICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChi
ZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywyMyBAQCB1bnNpZ25lZCBB
cnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5k
ZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpwaW4oKQorewor
ICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAg
IG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0
ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29u
dGVudHMmIHJlc3VsdCkKIHsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9m
IHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxv
YyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxs
IGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUg
YQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8K
KyAgICAvLyBEbyBub3QgYWxsb3cgMzEtYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgog
ICAgIGlmIChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1F
bGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVs
ZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICBpZiAodG90YWxTaXplIC8gbnVt
RWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplCisgICAgICAgICAgICB8fCB0b3RhbFNpemUgPiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
KSB7CiAgICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjUzLDcgKzI4MCw1IEBAIEFycmF5QnVmZmVyQ29udGVudHM6On5BcnJh
eUJ1ZmZlckNvbnRlbnQKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJyYXlC
dWZmZXI7Ci11c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVudHM7Ci0KICNlbmRpZiAvLyBBcnJh
eUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MjggKzMwLDM2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BcnJheUJ1ZmZlclZpZXc6OkFycmF5
QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQpCi0gICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1faXNOZXV0ZXJh
YmxlKHRydWUpCi0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX3ByZXZWaWV3KDApCi0g
ICAgLCBtX25leHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldygKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCkKKyAgICAgICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2lzTmV1
dGVyYWJsZSh0cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VB
ZGRyZXNzID0gbV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkp
ICsgbV9ieXRlT2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZm
ZXItPmFkZFZpZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmll
dygpCiB7Ci0gICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0
aGlzKTsKKyAgICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4o
KTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit2b2lkIEFycmF5QnVmZmVy
Vmlldzo6c2V0TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0gICAgbV9idWZmZXIgPSAwOwotICAg
IG1fYnl0ZU9mZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0gbV9pc05ldXRlcmFibGUpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7CisgICAgCisgICAg
aWYgKCFtX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmbGFnKQorICAg
ICAgICBtX2J1ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5waW4o
KTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKIAogI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1
ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgpAQCAtMzcsNjAgKzM3LDUwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJy
YXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBl
VWludDgsCi0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAg
ICAgICAgVHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMy
LAotICAgICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5
cGVEYXRhVmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3Qg
PSAwOworICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29u
c3QgPSAwOwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhbV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAg
IGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJu
IG1fYnVmZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7
CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmly
dHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0
ZXJhYmxlKGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICB2b2lkIHNl
dE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVh
bCB+QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgQXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5z
aWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6
ZV90IHJhbmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRl
T2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1
bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8vIEhlbHBlciB0byB2
ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwogICAgIC8v
IHdpdGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9v
bCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRpYyBib29sIHZlcmlm
eVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAgICAgICAgaWYgKCFi
dWZmZXIpCisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNp
emVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMiwxMCArOTIsMjUgQEAg
cHJvdGVjdGVkOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgcHJvdGVjdGVkOgor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChB
cnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29s
IHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1
bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOworCiAgICAgLy8gSW5wdXQg
b2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3Owog
ICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVy
bHlpbmcgYnVmZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0
aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNp
Z25lZCAqbnVtRWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVt
ZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51bUVsZW1l
bnRzKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFYIC0gYXJy
YXlCeXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBtYXhPZmZz
ZXQpIHsKQEAgLTExOSwxOSArMTI0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1l
bnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQog
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8v
IFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0
aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVuc2lnbmVk
IG1fYnl0ZU9mZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwogCi1wcml2
YXRlOgorICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9wcmV2Vmll
dzsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFycmF5QnVm
ZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zm
c2V0KQpAQCAtMTc2LDcgKzE3Nyw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJ
bXBsKHVuc2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNh
bGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5
U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJyYXlCdWZm
ZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNp
Z25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAgaWYgKHN0
YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpAQCAtMTk2LDYgKzE5OCw0IEBA
IHZvaWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmQKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJWaWV3OwotCiAjZW5kaWYgLy8gQXJyYXlC
dWZmZXJWaWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5m
by5oCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owogc3RydWN0
IEhhc2hUYWJsZTsKIAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3LDEyIEBAIHN0
cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIEdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0
aW9uUHRyIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQg
KCpTbG93RG93bkFuZFdhc3RlTWVtb3J5KShKU0FycmF5QnVmZmVyVmlldyopOworICAgIFNsb3dE
b3duQW5kV2FzdGVNZW1vcnkgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeTsKKyAgICAKKyAgICB0eXBl
ZGVmIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0Fy
cmF5QnVmZmVyVmlldyopOworICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBs
OwogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzks
NiArMTQ2LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0
RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRUeXBlZEFycmF5SW1wbCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRB
cnJheVN0b3JhZ2VUeXBlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGluZyB0aGUgbGlzdC4KICNk
ZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwK
ICAgICBtYWNybyhBcnJheSkgXAorICAgIG1hY3JvKEFycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8o
Qm9vbGVhbikgXAogICAgIG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUs
NiArNTYsOSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAg
ICAgbWFjcm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5n
dGgpIFwKKyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAg
ICBtYWNybyhieXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIs
NiArMTE2LDcgQEAKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51bWVyYWJsZSkgXAogICAgIG1hY3Jv
KHByb3RvdHlwZSkgXAogICAgIG1hY3JvKHNldCkgXAorICAgIG1hY3JvKHNsaWNlKSBcCiAgICAg
bWFjcm8oc291cmNlKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHN0YWNr
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShy
ZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3
LmNwcDoxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKworbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9uIFZhbHVlIHsK
KyAgICBUIGRhdGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKworfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAgaWYgKCFidWZm
ZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAw
LCBsZW5ndGgpOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBDaGVja2VkPHVp
bnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVj
a2VkTGVuZ3RoOworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2Vk
TWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBi
eXRlTGVuZ3RoKSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisg
ICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVu
Z3RoKGJ5dGVMZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29s
IGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxl
RW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitp
bmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBjaGFyIHRlbXAg
PSAqcDsKKyAgICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGljIHZvaWQgZmxp
cEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKK30K
Kworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5
dGVzKHAsIHAgKyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30KKworc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAg
KyA3KTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0ZXMocCArIDIs
IHAgKyA1KTsKKyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3RhdGljIHZvaWQg
ZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVu
ZGlhbikKK3sKKyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIC8v
IE5vdGhpbmcgdG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmxp
cEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAg
ICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IDg6CisgICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3OjpnZXREYXRh
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKK3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAg
ICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Ly8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3Vs
ZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1
bmFsaWduZWQgbG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5KHZhbHVlLmJ5
dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0
LCBzaXplb2YoVCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2Yo
VCksIGxpdHRsZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBp
ZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpF
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRv
IHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9y
IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCisg
ICAgVmFsdWU8VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7CisgICAg
ZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlh
bik7CisgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVP
ZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90IERhdGFWaWV3
OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKK30KKwordWlu
dDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsKK30KKworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBn
ZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1aW50
MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZf
dD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3QgRGF0YVZpZXc6
OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwg
ZWMpOworfQorCitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdl
dERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCitkb3VibGUg
RGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0
ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisK
K3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0
bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVu
ZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
K30KKwordm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZlclZpZXc6Om5l
dXRlcigpOworICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDM5ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2Yo
VCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZp
ZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50
OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3
PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNl
dCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVu
Z3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9
IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092
ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXco
YnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAog
RGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmll
dyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFWaWV3OjpEYXRh
VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxp
cEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJl
dHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2Vu
ZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAg
IGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0
aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwg
cCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsK
LSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwot
fQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2Fw
Qnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBC
eXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1z
dGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJv
b2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlh
bikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToK
LSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgot
ICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZp
ZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0
KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNp
bmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24n
dCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1j
cHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSAr
IGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0
ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQg
Ynl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9
IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8g
bm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2Ug
YSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVk
IHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2
YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwg
bGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJl
c3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4
X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OwotfQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkK
IHsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJu
IGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1p
bnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJf
dD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3
OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERh
dGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVp
bnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3
OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRV
aW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zm
c2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldElu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwg
dmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIs
IGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkK
LXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7
Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlIDxy
dW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xh
c3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZp
cnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsg
fQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50
KSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MTZfdCBn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2X3QgZ2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAg
IGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBm
YWxzZSwgZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQgZ2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0Rmxv
YXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBkb3Vi
bGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0
SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lk
IHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJf
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
KyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zm
c2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7CisKKyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgbmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNp
Z25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0
aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2lnbmVkIG1fYnl0
ZUxlbmd0aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0
YVZpZXdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gKICNkZWZpbmUg
RGF0YVZpZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNs
dWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3By
b3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAg
IHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
TGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2Uo
aW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQx
NihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVp
bnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZf
dCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVP
ZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBn
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9h
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQot
ICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQot
ICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0
VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2Us
IGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0
RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZv
aWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQg
Ynl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0
KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Ynl0ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CiAgICAgfQog
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2YXRlOgotICAg
IERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5s
aW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4g
Ynl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1f
Ynl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZpZXdfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKQEAgLTI0LDg0ICsyMywxMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAot
I2lmbmRlZiBGbG9hdDMyQXJyYXlfaAotI2RlZmluZSBGbG9hdDMyQXJyYXlfaAorI2lmbmRlZiAi
RmxvYXQzMkFycmF5X2giCisjZGVmaW5lICJGbG9hdDMyQXJyYXlfaCIKIAotI2luY2x1ZGUgIlR5
cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9h
dD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxG
bG9hdDMyQXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRp
cmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1
bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0
OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtp
bmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQ
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0
byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19
OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxG
bG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9h
dDMyQXJyYXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5Pihh
cnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJh
eTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9h
dD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0K
LQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0
MzJBcnJheTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8
ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZs
b2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8Rmxv
YXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkZsb2F0MzJBcnJheTsKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlz
aW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDk4ICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRmxvYXQ2NEFycmF5X2gK
LSNkZWZpbmUgRmxvYXQ2NEFycmF5X2gKKyNpZm5kZWYgIkZsb2F0NjRBcnJheV9oIgorI2RlZmlu
ZSAiRmxvYXQ2NEFycmF5X2giCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDY0
QXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKGNv
bnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9u
bHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxs
ZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFT
Y3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZvaWQgc2V0KHVu
c2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0g
VHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAg
dmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
eXBlRmxvYXQ2NDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0NjRBcnJheShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICAKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFz
cy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6
OmNyZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGFycmF5LCBs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNy
ZWF0ZTxGbG9hdDY0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDY0QXJy
YXk6OkZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGRvdWJs
ZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2
NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0
QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAot
ewotICAgIHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwgZW5kKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLXVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5OworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJh
eVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwor
I2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6
CisgICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBj
cmVhdGUoY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUqPihiYXNlQWRkcmVzcygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0
KEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YodHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldFJhbmdlKGNv
bnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCB1bnNp
Z25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0UmFuZ2VJbXBsKAorICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksCisgICAgICAgICAgICBk
YXRhTGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICAgICAg
b2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHplcm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpLCBsZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBk
YXRhKClbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRl
eF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hl
Y2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1
cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5n
dGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQg
KyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlw
ZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7
CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKEFkYXB0
b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVy
aWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJl
c3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRC
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1
YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5l
cmljVHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNp
emVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj4gPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCks
ICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRv
cjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJ
KHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBAQCBw
dWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhzLnB1
YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQp
IHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJheUJ1
ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CisgICAg
dm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUudHlwZWRBcnJheS5i
dWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20o
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVh
bmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxs
IEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5n
dGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8v
IFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBz
aXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAg
ICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJy
YXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCShyZXZpc2lv
biAxNTM3NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgpAQCAtMjQsODAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVm
IEludDhBcnJheV9oCi0jZGVmaW5lIEludDhBcnJheV9oCisjaWZuZGVmICJJbnQ4QXJyYXlfaCIK
KyNkZWZpbmUgIkludDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIElu
dDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4gewotcHVibGlj
OgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0
ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBv
bmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmls
bGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZh
U2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8SW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxU
eXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8
SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBl
SW50ODsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDhBcnJheShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVu
ZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQ4QXJy
YXk+IEludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6
Y3JlYXRlPEludDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFy
cmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUlu
dDhBcnJheTo6SW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTxpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVm
UHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OkludDhBcnJheTsKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgogCiAjZW5kaWYgLy8gSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCAr
MTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjMsODAg
KzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEludDE2QXJyYXlfaAot
I2RlZmluZSBJbnQxNkFycmF5X2gKKyNpZm5kZWYgIkludDE2QXJyYXlfaCIKKyNkZWZpbmUgIklu
dDE2QXJyYXlfaCIKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0
IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBi
ZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4g
RG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlw
dCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBl
SW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJp
ZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQx
NkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2
X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQx
NkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJh
eT4obGVuZ3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2
QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotdXNpbmcgSlND
OjpJbnQxNkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBJbnQx
NkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJy
YXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNCw3NyArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSW50MzJBcnJheV9oCi0jZGVmaW5lIEludDMyQXJyYXlfaAorI2lmbmRl
ZiAiSW50MzJBcnJheV9oIgorI2RlZmluZSAiSW50MzJBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50
ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJB
cnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNv
bnN0IGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50
MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNp
bmcgVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3
VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTxpbnQ+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFy
cmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJh
eT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJh
eTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+
OjpjcmVhdGU8SW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVV
bmluaXRpYWxpemVkPEludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4g
SW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMy
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXlJbXBsPEludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotdXNpbmcgSlNDOjpJbnQzMkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgi
CiAKICNlbmRpZiAvLyBJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgor
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAg
ICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZl
cikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5n
ZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJl
bmNlKHRoaXMsIG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAg
IEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJy
YXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsK
K30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0
VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9v
bCBKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAg
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhp
c09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAg
ICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUg
dG8gYSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBi
dWZmZXIgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpT
QXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOwor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZl
cl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJh
eUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVm
ZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1
ZmZlciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOwor
ICAgIAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9Cisg
ICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBB
cnJheUJ1ZmZlciogbV9pbXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAg
ICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90
eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZSogcHJvdG90eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkp
CisgICAgICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVz
IGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZShsZW5ndGgsIDEpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkt
PmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBj
b25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29u
c3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitD
YWxsVHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNk
ZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVu
Y3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVy
UHJvdG90eXBlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJv
dG90eXBlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3Ry
dWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBz
dGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAg
ICAKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5
QnVmZmVyKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2Vp
dmVyIG9mIHNsaWNlIG11c3QgYmUgYW4gYXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5k
OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBl
eGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVM
ZW5ndGgoKTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNP
YmplY3QtPmltcGwoKS0+c2xpY2UoYmVnaW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihj
YWxsZWUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAor
ICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52
bSgpLCBzdHJ1Y3R1cmUsIG5ld0J1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZTo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisK
K0pTQXJyYXlCdWZmZXJQcm90b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICAKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90
b0Z1bmNTbGljZSwgRG9udEVudW0sIDIpOworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBK
U0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlw
ZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90
b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1
Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0
KTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3By
b3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitw
dWJsaWM6CisgICAgc3RhdGljIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZl
clZpZXc6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJy
YXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAor
ICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMy
X3QgZWxlbWVudFNpemUsCisgICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0
cnVjdHVyZSgwKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkK
K3sKKyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1w
dCBHQyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVt
cDsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0
X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAg
ICAgICAgICAgICAgIGFzV29yZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBE
b24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChs
ZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAg
IGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3Rv
cikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlG
YXN0TWFsbG9jKGxlbmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAK
KyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVk
QXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25z
dHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1f
dmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVP
ZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBl
ZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4
aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRl
ciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0s
IENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0
cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52
ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUo
Y29udGV4dC5tb2RlKCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dp
dGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxp
emVyKHRoaXMsIGZpbmFsaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxU
eXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHko
KS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1i
ZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
dWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCku
bV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBK
U0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zm
c2V0KCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAg
IGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAg
ICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkp
LAorICAgICAgICAgICAgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVj
dChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFk
LW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBh
cnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
eworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0
IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAg
fQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFs
aXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBX
YXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVm
ZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVz
IHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5k
CisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMg
dGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAor
Ly8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBv
ZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0
eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVy
ZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBs
aW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90
CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9z
dCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0
IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGgg
V2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZl
cyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBu
b3QgaW5zdGFudGlhYmxlLCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8v
IHByb3RvdHlwZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMg
ZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhh
cyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZm
ZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlw
ZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVu
dXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNw
YWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJy
YXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRz
IG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0
byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRl
ciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAg
ICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWlu
ZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcg
d2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5
LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5
IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBh
IHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZl
IHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRv
IGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9
IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZl
Y3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNl
cyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBu
YXRpdmUKKy8vIEFycmF5QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMg
c2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0
aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3
CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJs
ZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVl
ZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRv
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBK
U0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBz
aXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
IC0gMSkKKyAgICAgICAgICAgICYgfihzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAg
ICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERv
bnRJbml0aWFsaXplIH07CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZN
JiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5p
dGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0
aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
bV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAg
ICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAg
ICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1
ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJv
dyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9u
IG5hdGl2ZSBidWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8g
bW92ZXMgdGhlIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNs
b3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVm
ZmVyKCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lk
IG5ldXRlcigpOworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9
CisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBD
bGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0
b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9y
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlC
dWZmZXJWaWV3LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxp
emUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3Rv
cjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0
aG9kVGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFy
cmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFu
ZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4
aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRo
b2RUYWJsZSgpLT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxp
bmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmICht
X21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0g
RmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBz
dGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1
ZmZlcigpLT5kYXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihkZWx0YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVz
dWx0KSA9PSBkZWx0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwu
aCIKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMs
NCArMjI0LDE1IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5
KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5
SW1wbChKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDcgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgor
I2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4K
QEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwog
Y2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3Ry
dWN0aWJsZU9iamVjdDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVu
dmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQo
KTsgfQogI2VuZGlmCiAgICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBU
eXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHBy
b3RlY3RlZDoKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5
QnVmZmVyVmlldyopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRh
Vmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZp
ZXcuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7Cisg
ICAgIkRhdGFWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0RhdGFWaWV3KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rp
b25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNE
YXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZm
ZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVM
ZW5ndGgpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9m
IGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1
ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAg
IEpTRGF0YVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTRGF0YVZpZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFW
aWV3KiBKU0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJl
dHVybiAwOworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgdW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRh
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAg
ICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9v
bCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9udEVudW0g
fCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3Ojpn
ZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTRGF0
YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0
dXJuIERhdGFWaWV3OjpjcmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlz
T2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKworU3RydWN0
dXJlKiBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25B
cnJheSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6
IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5
QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9
IDE7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNv
bnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAor
ICAgICAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAg
CisgICAgLy8gRHVtbXkgbWV0aG9kcywgd2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2Ug
YXJlIGp1c3QgaW4gcGxhY2UgdG8KKyAgICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lh
bGl6YXRpb24gd2UgZG8gZWxzZXdoZXJlLgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVV
bmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBl
ZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdh
c3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworICAg
IAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19F
WFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUg
IkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBC
eXRlcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQ
cm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19p
bmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0RhdGFWaWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJv
dG90eXBlLmx1dC5oCitAYmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY0dldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRG
bG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jR2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBzZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQz
MiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1Nl
dEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0
YVZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1By
b3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNE
YXRhVmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNEYXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZp
ZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworYm9vbCBKU0RhdGFW
aWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisg
ICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0
YVZpZXdQcm90b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
fQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJl
dHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVj
LCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90
eXBlKj4ob2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxK
U0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNl
aXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50
ICh0aGUgYnl0ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewor
ICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRl
T2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsK
KyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmll
dy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRl
c0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVz
KHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNW
YWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpT
VmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZp
ZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAg
aWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0
YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVl
ZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOwor
ICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQz
MihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEp
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBm
YWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5h
cmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVz
SWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXMo
dmFsdWUpOworICAgIAorICAgICpyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZz
ZXQpID0gdmFsdWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJ
bnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBnZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVj
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxG
bG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIHNldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldElu
dDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY1NldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0
YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9h
dDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIHNldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgiCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQ
cm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpT
T2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBl
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5
cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
SlNEYXRhVmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmICJKU0Zsb2F0MzJBcnJheV9oIgorI2RlZmluZSAiSlNGbG9hdDMyQXJyYXlfaCIKKwor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJh
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9h
dDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTRmxvYXQ2NEFycmF5
X2giCisjZGVmaW5lICJKU0Zsb2F0NjRBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0
eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9i
amVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZh
ciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2
ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8v
ICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlw
ZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8g
VGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMu
IEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5
IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZv
cgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRo
ZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5h
Z2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhv
c2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBm
b3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9t
IHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUg
dmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZp
ZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6
ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBo
b3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVy
ZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3Ig
eworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkg
Vmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAg
IHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRv
TmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7Cisv
LyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGlj
IEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJW
aWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGlj
OgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVh
dGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1l
IEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIGNyZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZiht
X2xlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNv
bnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4o
bV92ZWN0b3IpOworICAgIH0KKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3Rv
cigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFu
dCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBz
dXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0
aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7
CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBl
ZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNE
b3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJs
ZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNW
YWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBB
ZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBp
LCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkg
PCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFk
YXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRl
eFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSwgSlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zm
c2V0IDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5n
dGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQg
KyBsZW5ndGggPj0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNr
bHksIGV4Y2VwdDogaWYgaXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAv
LyBhcHByb3ByaWF0ZSBleGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93
IG9uIGVycm9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNl
dFdpdGhTcGVjaWZpY1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNz
ZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVu
IGl0IHdpbGwgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25BcnJheSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdl
VHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5Vmlz
aXRvciYsIENvcHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZl
IGJ1ZmZlciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAgICAvLyBuZWNlc3Nh
cnkuIE5vdGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBpbiB0aGUgR0MgaGVhcC4KKyAgICBz
dGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChK
U0FycmF5QnVmZmVyVmlldyopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2Rl
ZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIklu
dGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1
bmN0aW9uIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvciog
Y3JlYXRlKAorICAgICAgICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBw
cm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhl
YXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5
cGUsIG5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
ZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxW
aWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkRhdGFWaWV3IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0
IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PQorICAgICAgICBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZSgKKyAgICAgICAgICAgIFZpZXdDbGFzczo6VHlwZWRB
cnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJheUJ1ZmZlcioganNCdWZmZXIg
PSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAg
ICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1wbCgpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikgeworICAgICAgICAgICAgbGVuZ3RoID0gZXhl
Yy0+YXJndW1lbnQoMikudG9VSW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoYnVmZmVyLT5i
eXRlTGVuZ3RoKCkgLSBvZmZzZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgZWxlbWVudCBzaXplLiIpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IChidWZmZXIt
PmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhl
Yywgc3RydWN0dXJlLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAg
IGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJF
eHBlY3RlZCBBcnJheUJ1ZmZlciBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAg
ICAvLyBGb3IgZXZlcnl0aGluZyBidXQgRGF0YVZpZXcsIHdlIGFsbG93IGNvbnN0cnVjdGlvbiB3
aXRoIGFueSBvZjoKKyAgICAvLyAtIEFub3RoZXIgYXJyYXkuIFRoaXMgY3JlYXRlcyBhIGNvcHkg
b2YgdGhlIG9mIHRoYXQgYXJyYXkuCisgICAgLy8gLSBBbiBpbnRlZ2VyLiBUaGlzIGNyZWF0ZXMg
YSBuZXcgdHlwZWQgYXJyYXkgb2YgdGhhdCBsZW5ndGggYW5kIHplcm8taW5pdGlhbGl6ZXMgaXQu
CisgICAgCisgICAgaWYgKEpTT2JqZWN0KiBvYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgICAgICBvZmZzZXQg
PSBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9mZnNldCA9IDA7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0
LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmll
d0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3Ry
dWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVjdCwgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxl
bmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGxlbmd0aCA8
IDApCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShK
U0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdD
bGFzcz47CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+CitDYWxsVHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPFZpZXdDbGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
K3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRB
cnJheVZpZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGVmZXJH
Qy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgor
I2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiUmVqZWN0Lmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBj
b250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25D
b250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3Jl
YXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCgKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KAorICAgICAgICBleGVjLT52bSgpLCBzdHJ1
Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICBD
b25zdHJ1Y3Rpb25Db250ZXh0OjpEb250SW5pdGlhbGl6ZSk7CisgICAgaWYgKCFjb250ZXh0KSB7
CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1
cmUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7Cisg
ICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkgeworICAgICAgICB0aHJvd0Vycm9y
KAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQg
YW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVj
dHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KGV4ZWMtPnZtKCkuaGVh
cCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGV4ZWMtPnZtKCksIGNvbnRleHQp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRl
KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8dHlwZW5hbWUg
QWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBpbXBsLT5idWZmZXIoKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0s
IHN0cnVjdHVyZSwgYnVmZmVyLCBpbXBsLT5ieXRlT2Zmc2V0KCksIGltcGwtPmxlbmd0aCgpKTsK
KyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3Vs
dCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Pih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcodm0sIGNv
bnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwK
KyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAg
IHJldHVybiBjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUsIGltcGwpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6dmFsaWRhdGVSYW5nZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmIChjYW5BY2Nlc3NSYW5nZVF1aWNr
bHkob2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJhbmdlIGNvbnNpc3Rpbmcgb2Yg
b2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMiKSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordGVtcGxhdGU8dHlwZW5hbWUgT3Ro
ZXJUeXBlPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0V2l0aFNw
ZWNpZmljVHlwZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIE90aGVyVHlwZSogb3RoZXIsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIC8vIEhhbmRsZSB0aGUgaGlsYXJp
b3VzIGNhc2U6IHRoZSBhY3Qgb2YgZ2V0dGluZyB0aGUgbGVuZ3RoIGNvdWxkIGhhdmUgcmVzdWx0
ZWQKKyAgICAvLyBpbiBuZXV0ZXJpbmcuIFdlbGwsIG5vLiBUaGF0J2xsIG5ldmVyIGhhcHBlbiBi
ZWNhdXNlIHRoZXJlIGNhbm5vdCBiZQorICAgIC8vIHNpZGUtZWZmZWN0cyBvbiBnZXR0aW5nIHRo
ZSBsZW5ndGggb2YgYSB0eXBlZCBhcnJheS4gQnV0IHByZWRpY3Rpbmcgd2hlcmUgdGhlcmUKKyAg
ICAvLyBhcmUsIG9yIGFyZW4ndCwgc2lkZS1lZmZlY3RzIGlzIGEgZm9vbCdzIGdhbWUgc28gd2Ug
cmVzb3J0IHRvIHRoaXMgY2hlYXAKKyAgICAvLyBjaGVjay4gV29yc3QgY2FzZSwgaWYgd2UncmUg
d3JvbmcsIHBlb3BsZSBzdGFydCBzZWVpbmcgbGVzcyB0aGluZ3MgZ2V0IGNvcGllZAorICAgIC8v
IGJ1dCB3ZSB3b24ndCBoYXZlIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KKyAgICBsZW5ndGgg
PSBzdGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgCisgICAgaWYgKCF2YWxp
ZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChvdGhlci0+bGVuZ3RoKCkgIT0gbGVuZ3RoKSB7CisgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiTGVuZ3RoIG9mIGluY29taW5nIGFy
cmF5IGNoYW5nZWQgdW5leHBlY3RlZGx5LiIpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZW5ndGg7IGktLTspCisgICAgICAgIHNl
dEluZGV4UXVpY2tseShvZmZzZXQgKyBpLCBvdGhlci0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jv
b2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldCgKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIGNvbnN0IENsYXNzSW5mbyogY2kgPSBvYmplY3QtPmNsYXNzSW5mbygpOworICAg
IGlmIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IEFkYXB0b3I6OnR5cGVWYWx1ZSkgewor
ICAgICAgICAvLyBUaGUgc3VwZXIgZmFzdCBjYXNlOiB3ZSBjYW4ganVzdCBtZW1jcHkgc2luY2Ug
d2UncmUgdGhlIHNhbWUgdHlwZS4KKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIG90
aGVyID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAgICAg
bGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1lbWNweSh0eXBlZFZlY3Rvcigp
ICsgb2Zmc2V0LCBvdGhlci0+dHlwZWRWZWN0b3IoKSwgb3RoZXItPmJ5dGVMZW5ndGgoKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNpLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gc2V0
V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBzZXRXaXRo
U3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQs
IGxlbmd0aCk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxl
bmd0aCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KG9iamVjdCksIG9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBzZXRX
aXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zm
c2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdp
dGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDMyQXJyYXkqPihvYmplY3QpLCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdp
dGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zm
c2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBzZXRX
aXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+KG9iamVjdCksIG9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0
YVZpZXc6IHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVJhbmdlKGV4ZWMsIG9mZnNldCwgbGVuZ3Ro
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2UgY291bGQgb3B0aW1p
emUgdGhpcyBjYXNlLiBCdXQgcmlnaHQgbm93LCB3ZSBkb24ndC4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXNldEluZGV4
UXVpY2tseShleGVjLCBvZmZzZXQgKyBpLCBvYmplY3QtPmdldChleGVjLCBpKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0gfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgp
OworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVj
dC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxl
bmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsK
KyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3Qt
PmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
QmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXQoCisgICAgSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsCisgICAgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7CisgICAgICAgIC8vIEZpcmVmb3ggYXBwZWFycyB0byBzaW1wbHkgaWdub3JlIGF0
dGVtcHRzIHRvIHN0b3JlIHRvIHRoZSBsZW5ndGggcHJvcGVydHkuCisgICAgICAgIC8vIEV2ZW4g
aW4gc3RyaWN0IG1vZGUuIEkgd2lsbCBkbyB0aGUgc2FtZS4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7Cisg
ICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkgeworICAgICAgICBwdXRC
eUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVm
aW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gVGhpcyBpcyBtYXRjaGluZyBGaXJlZm94IGJlaGF2aW9yLiBJbiBwYXJ0aWN1
bGFyLCBpdCByZWplY3RzIGFsbCBhdHRlbXB0cyB0bworICAgIC8vIGRlZmluZU93blByb3BlcnR5
IGZvciBpbmRleGVkIHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLCBldmVuIGlmIHRoZXkncmUg
b3V0CisgICAgLy8gb2YgYm91bmRzLgorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBz
aG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgdHlwZWQgYXJy
YXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHkoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gdGhp
c09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KAorICAgICAgICAgICAg
dGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCBz
bG90KTsKKyAgICB9CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNr
bHkocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0QnlJbmRleCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisg
ICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChzaG91bGRUaHJvdyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPnB1dCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZy
b20oZXhlYywgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmICghdGhpc09iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5KHByb3Bl
cnR5TmFtZSkpIHsKKyAgICAgICAgLy8gWWVzLCByZWFsbHkuIEZpcmVmb3ggcmV0dXJucyB3aXRo
b3V0IHRocm93aW5nIGFueXRoaW5nIGlmIHlvdSBzdG9yZSBiZXlvbmQKKyAgICAgICAgLy8gdGhl
IGJvdW5kcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0aGlzT2JqZWN0LT5z
ZXRJbmRleFF1aWNrbHkoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFY
X0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiBjZWxsLT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSgKKyAgICAgICAgICAgIGNlbGwsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhl
YywgcHJvcGVydHlOYW1lKSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIGFycmF5LmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2xlbmd0aDsgKytpKQorICAgICAgICBhcnJheS5h
ZGQoSWRlbnRpZmllcihleGVjLCBTdHJpbmc6Om51bWJlcihpKSkpOworICAgIAorICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgc3dpdGNoICh0
aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OiB7CisgICAgICAg
IHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4s
IHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheTogewor
ICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VXNhZ2UodGhpc09iamVjdC0+Ynl0ZVNp
emUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1
bFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y29weUJhY2tp
bmdTdG9yZSgKKyAgICBKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9r
ZW4gdG9rZW4pCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAodG9r
ZW4gPT0gVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbgorICAgICAgICAmJiB2aXNpdG9yLmNoZWNr
SWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fdmVjdG9yKSkgeworICAgICAgICB2b2lkKiBvbGRW
ZWN0b3IgPSB0aGlzT2JqZWN0LT5tX3ZlY3RvcjsKKyAgICAgICAgdm9pZCogbmV3VmVjdG9yID0g
dmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAg
ICBtZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwor
ICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IG5ld1ZlY3RvcjsKKyAgICAgICAgdmlzaXRv
ci5kaWRDb3B5KG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgfQorICAg
IAorICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUodGhpc09iamVjdCwgdmlzaXRvciwgdG9rZW4p
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmll
dyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBX
ZSBwbGF5IHRoaXMgZ2FtZSBiZWNhdXNlIHdlIHdhbnQgdGhpcyB0byBiZSBjYWxsYWJsZSBldmVu
IGZyb20gcGxhY2VzIHRoYXQKKyAgICAvLyBkb24ndCBoYXZlIGFjY2VzcyB0byBFeGVjU3RhdGUq
IG9yIHRoZSBWTSwgYW5kIHdlIG9ubHkgYWxsb2NhdGUgc28gbGl0dGxlCisgICAgLy8gbWVtb3J5
IGhlcmUgdGhhdCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gdHJpZ2dlciBhIEdDIC0ganVzdCBhY2Nv
dW50aW5nIHdoYXQKKyAgICAvLyB3ZSBoYXZlIGRvbmUgaXMgZ29vZCBlbm91Z2guIFRoZSBzb3J0
IG9mIGJpemFycm8gZXhjZXB0aW9uIHRvIHRoZSAiYWxsb2NhdGluZworICAgIC8vIGxpdHRsZSBt
ZW1vcnkiIGlzIHdoZW4gd2UgdHJhbnNmZXIgYSBiYWNraW5nIGJ1ZmZlciBpbnRvIHRoZSBDIGhl
YXA7IHRoaXMKKyAgICAvLyB3aWxsIHRlbXBvcmFyaWx5IGdldCBjb3VudGVkIHRvd2FyZHMgaGVh
cCBmb290cHJpbnQgKGluY29ycmVjdGx5LCBpbiB0aGUgY2FzZQorICAgIC8vIG9mIGFkb3B0aW5n
IGFuIG92ZXJzaXplIHR5cGVkIGFycmF5KSBidXQgd2UgZG9uJ3QgR0MgaGVyZSBhbnl3YXkuIFRo
YXQncworICAgIC8vIGFsbW9zdCBjZXJ0YWlubHkgZmluZS4gVGhlIHdvcnN0IGNhc2UgaXMgaWYg
eW91IGNyZWF0ZWQgYSB0b24gb2YgZmFzdCB0eXBlZAorICAgIC8vIGFycmF5cywgYW5kIGRpZCBu
b3RoaW5nIGJ1dCBjYXVzZWQgYWxsIG9mIHRoZW0gdG8gc2xvdyBkb3duIGFuZCB3YXN0ZSBtZW1v
cnkuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB5b3VyIG1lbW9yeSBmb290cHJpbnQgd2lsbCBkb3Vi
bGUgYmVmb3JlIHRoZSBHQyByZWFsaXplcyB3aGF0J3MKKyAgICAvLyB1cC4gQnV0IGlmIHlvdSBk
byAqYW55dGhpbmcqIHRvIHRyaWdnZXIgYSBHQyB3YXRlcm1hcmsgY2hlY2ssIGl0IHdpbGwga25v
dworICAgIC8vIHRoYXQgeW91ICpoYWQqIGRvbmUgdGhvc2UgYWxsb2NhdGlvbnMgYW5kIGl0IHdp
bGwgR0MgYXBwcm9wcmlhdGVseS4KKyAgICBIZWFwKiBoZWFwID0gSGVhcDo6aGVhcCh0aGlzT2Jq
ZWN0KTsKKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKmhlYXApOworICAgIAorICAgIEFT
U0VSVCghdGhpc09iamVjdC0+aGFzSW5kZXhpbmdIZWFkZXIoKSk7CisKKyAgICBzaXplX3Qgc2l6
ZSA9IHRoaXNPYmplY3QtPmJ5dGVTaXplKCk7CisgICAgCisgICAgLy8gRklYTUU6IHRoaXMgc2hv
dWxkIHJlY29yZCwgaW4gdGhlIGJ1dHRlcmZseSwgd2hhdCBvdXIgb2Zmc2V0IGlzLgorICAgIAor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYg
IXRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkgeworICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxs
IHBvc3NpYmxlLgorICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0
dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSwgKmhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLAorICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAg
IGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAg
ICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIg
ZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMg
Y2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAg
ICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3Ro
KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJy
YXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigp
LT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
ID0gYnVmZmVyLT5kYXRhKCk7CisgICAgdGhpc09iamVjdC0+bV9tb2RlID0gV2FzdGVmdWxUeXBl
ZEFycmF5OworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUlt
cGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoCisgICAgICAgIHRoaXNP
YmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCksIHRoaXNPYmplY3QtPmxl
bmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVk
OgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBj
cmVhdGUoCisgICAgICAgIEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7
CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVk
ZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1Nl
dChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisg
ICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJn
dW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJheSA9IGpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFzb3VyY2VBcnJheSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikpOworICAgIAorICAgIHVuc2ln
bmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAg
ICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldCA9IDA7CisgICAg
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChleGVjLCBleGVjLT52bSgp
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0
LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhl
Yy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1p
Y0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVj
dCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9J
bnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAg
IAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFzc2VydCB0aGF0IHRoZSBsZW5n
dGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+
bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXM6IC14ID0+IGxl
bmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdpbiA9IHRoaXNMZW5ndGgg
LSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5kID0gdGhpc0xlbmd0aCAtIGVu
ZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0aGUgYm91bmRzIG9mIHRoZSBh
cnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAg
ICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3Ro
KSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVu
Z3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6
bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0gYmVnaW4pOworICAgIHVu
c2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2lu
OworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0
LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0gdGhpc09iamVjdC0+bGVu
Z3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgY2FsbGVl
LT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJy
YXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6
OmNyZWF0ZSgKKyAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1ZmZlciwKKyAgICAgICAg
dGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0NsYXNzOjplbGVtZW50U2l6
ZSwKKyAgICAgICAgbGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50U2l6ZSk7CisgICAgCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdD
bGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNf
aW5mbykpOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
c2V0LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmlld0NsYXNzPiwgRG9udEVu
dW0sIDIpOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBn
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3Q2xhc3M+LCBEb250RW51
bSwgMik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KGV4
ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihl
eGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTUgKzQ5LDI2IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FQSVdy
YXBwZXJPYmplY3QuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTQ2Fs
bGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMb2Nr
LmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheUNvbnN0cnVj
dG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJK
U1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiTG9v
a3VwLmgiCkBAIC0yMTQsNiArMjI1LDMwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpT
VmFsdWUgcHJvdG8KICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9T
ZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNj
ZXNzb3IgfCBEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCkt
PnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
SW50OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50MTZB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIp
XS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDhBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJv
dG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFt
cGVkKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBl
LnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhl
YywgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1Vp
bnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50MzJBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3Rv
dHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0Zsb2F0NjRB
cnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0
UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZp
ZXcpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXdQcm90b3R5cGU6
OmNyZWF0ZShleGVjLT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgCisgICAg
bV9hcnJheUJ1ZmZlclN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlCdWZmZXJQcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBl
LmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlw
ZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQx
NkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNV
aW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0Zsb2F0MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNGbG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0uc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5nZXQo
KSkpOwogCiAgICAgbV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
TmFtZVNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsK
ICAgICBtX2FjdGl2YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQWN0aXZh
dGlvbjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CkBAIC0z
MTgsNiArMzUzLDI3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8K
IAogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5KU09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSksIERvbnRFbnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIE1hdGhPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yKiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0gSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpjcmVhdGUodGhpcywgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJy
YXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJyYXk8SW50ZXJuYWxGdW5jdGlv
biosIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gdHlwZWRBcnJheUNvbnN0cnVjdG9yczsK
KyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDgpXSA9IEpTSW50OEFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSwgIkludDhB
cnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MTYpXSA9
IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQxNkFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5n
ZXQoKSwgIkludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgo
VHlwZUludDMyKV0gPSBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50
MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIp
XS5wcm90b3R5cGUuZ2V0KCksICJJbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0b0luZGV4KFR5cGVVaW50OCldID0gSlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZSh0aGlzLCBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhBcnJheSIpOworICAgIHR5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0gPSBKU1VpbnQ4Q2xh
bXBlZEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5w
cm90b3R5cGUuZ2V0KCksICJVaW50OENsYW1wZWRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZSh0aGlzLCBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50MTZBcnJheSIpOwor
ICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDMyKV0gPSBKU1VpbnQz
MkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCks
ICJVaW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
RmxvYXQzMildID0gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxv
YXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDY0QXJy
YXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0g
PSBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0RhdGFWaWV3Q29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBl
LmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5n
ZXQoKSwgIkRhdGFWaWV3Iik7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS0+cHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LkFycmF5QnVmZmVyLCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlf
VFlQRVM7IHR5cGVkQXJyYXlJbmRleC0tOykgeworICAgICAgICBtX3R5cGVkQXJyYXlzW3R5cGVk
QXJyYXlJbmRleF0ucHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52
bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdHlwZWRBcnJheUluZGV4XS0+bmFtZShleGVjKSksIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdHlwZWRBcnJheUluZGV4XSwgRG9udEVudW0pOworICAgIH0KIAogICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byhleGVjLT5wcm9wZXJ0eU5hbWVzKCkuTmFOLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2lu
Y2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RN
YXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMTY2LDYg
KzE2NywxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdF
eHBTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJpbmdPYmplY3RT
dHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbnRlcm5hbEZ1bmN0aW9u
U3RydWN0dXJlOworICAgIAorICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyUHJvdG90eXBl
PiBtX2FycmF5QnVmZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1f
YXJyYXlCdWZmZXJTdHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0IFR5cGVkQXJyYXlEYXRhIHsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9OworICAgIAorICAgIEZpeGVkQXJy
YXk8VHlwZWRBcnJheURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gbV90eXBlZEFy
cmF5czsKICAgICAgICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6VGFi
bGVTaXplXTsgLy8gU3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRoZSBMTEludCBhbmQgSklULgog
CkBAIC0zMzAsNiArMzQxLDE0IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNo
ZXNBcnJheVN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3JlZ0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogc3RyaW5n
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCk7IH0KKyAgICAKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBhcnJheUJ1ZmZlclBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCk7IH0K
KyAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9h
cnJheUJ1ZmZlclN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHlwZWRB
cnJheVN0cnVjdHVyZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdHlwZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3RydWN0dXJlLmdldCgpOworICAg
IH0KIAogICAgIHZvaWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lhbDo6UG9pbnRlciBwb2ludGVy
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50
OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmICJKU0ludDhBcnJheV9oIgor
I2RlZmluZSAiSlNJbnQ4QXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKwor
I2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgIkpTSW50MTZBcnJheV9oIgorI2RlZmluZSAiSlNJbnQxNkFycmF5X2giCisKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDE2QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNJbnQzMkFycmF5X2giCisjZGVmaW5lICJKU0lu
dDMyQXJyYXlfaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpT
SW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZK
UyMjdHlwZSMjQ29uc3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0Vf
U19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9T
X0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1Nf
SU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNf
aAorCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDMy
QXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OENsYW1w
ZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlD
b25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxK
U1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5
Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmlldz4gSlNEYXRhVmlld0NvbnN0
cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRB
cnJheVByb3RvdHlwZXMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTIyN0eXBlIyNQcm90b3R5cGU6OnNfaW5mbyA9IHsjdHlwZSAiUHJvdG90eXBl
IiwgJkpTIyN0eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMj
I3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5G
TyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9h
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorI2RlZmluZSBKU1R5cGVkQXJy
YXlQcm90b3R5cGVzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDhBcnJheT4gSlNJ
bnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheVByb3Rv
dHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OEFy
cmF5PiBKU1VpbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlQcm90
b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDE2
QXJyYXk+IEpTVWludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlQcm90b3R5cGU7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQzMkFycmF5PiBK
U0Zsb2F0MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIK
KyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVt
cGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUg
IkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTIyN0eXBlIyNBcnJheSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9T
X0lORk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOwor
TUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1Nf
SU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0
KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTVHlwZWRBcnJheXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0
b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50
MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4g
SlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFk
YXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxG
bG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmICJKU1VpbnQ4QXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhBcnJheV9oIgorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgIkpTVWludDhD
bGFtcGVkQXJyYXlfaCIKKyNkZWZpbmUgIkpTVWludDhDbGFtcGVkQXJyYXlfaCIKKworI2luY2x1
ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiAiSlNVaW50MTZBcnJheV9oIgor
I2RlZmluZSAiSlNVaW50MTZBcnJheV9oIgorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmICJKU1VpbnQzMkFycmF5X2giCisjZGVmaW5lICJKU1VpbnQzMkFycmF5X2giCisK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw5IEBACiAjZGVmaW5lIE9wZXJhdGlvbnNf
aAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQ
YXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZm
ZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sK
KyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0
ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBnbG9iYWxPYmpl
Y3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBw
ZXIgPSBQYXNzV2VhazxKU0FycmF5QnVmZmVyPihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gK
KworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVyIHVzZWQgZm9y
IG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVmZmVycyBhbmQg
dGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAorLy8gV2Vi
Q29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3RhbmRhbG9u
ZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBKU0FycmF5QnVm
ZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8KKy8vIC0g
SWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFmdGVyIG9uZSBo
YWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRoZW4geW91
IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTUzNzc0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRl
eGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAgIHJldHVybiBoYXNJbmRleGVk
UHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzVHlwZWRWaWV3KG1f
Y2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKLSAgICBib29s
IGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOwotICAgIH0KKyAgICBi
b29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3Q7CiAgICAgCiAg
ICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2RlZmluZSBTdHJ1Y3R1cmVJ
bmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIApAQCAtMTA0LDYg
KzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jCiAgICAg
ICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CiB9
CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxs
KiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghaXNUeXBlZFZpZXco
bV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2Vs
bCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGluZSBib29sIFN0cnVj
dHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFk
YXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5QWRhcHRv
cnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVB
cmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5
cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJn
IFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisKKyAg
ICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50
MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5
cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBl
QXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBGbG9hdFR5cGVk
QXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZp
ZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBl
OworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVB
cmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoUU5hTik7
CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7
CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50
OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVjdCBVaW50MTZBZGFw
dG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1
Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdl
bmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhB
ZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFk
YXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFk
YXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENs
YW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRv
cj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0
cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50OF90LCBJbnQ4
QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IEludDE2QWRhcHRvciA6
IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJheSwgSlNJbnQxNkFy
cmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVk
QXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJheSwgVHlwZUludDMy
PiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1
aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4geyB9Oworc3RydWN0
IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQxNl90LCBVaW50
MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3RydWN0IFVpbnQzMkFk
YXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBVaW50MzJBcnJheSwg
SlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0MzJBZGFwdG9yIDog
RmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJh
eSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6IEZsb2F0VHlwZWRB
cnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxv
YXQ2ND4geyB9OworCitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvciB7CisgICAgdHlwZWRlZiB1
aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBWaWV3VHlwZTsKKyAg
ICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29u
c3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAg
ICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1
ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisg
ICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJu
IHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
anNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91Ymxl
KHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFt
cChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1
cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0
b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJy
YXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJyYXlDb250
cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29udHJvbGxl
cl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsK
KworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlZEFy
cmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250cm9sbGVyKCk7Cisg
ICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCosIEFycmF5
QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotI2RlZmlu
ZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xh
c3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFycmF5Tm9uZSwKLSAg
ICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAgVHlwZWRBcnJheUlu
dDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWludDhDbGFtcGVkLAot
ICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwKLSAgICBUeXBlZEFy
cmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3RydWN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0gICAgICAgIDogbV9j
bGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAgICAgICAgLCBtX2xl
bmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVu
Z3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKLSAgICAgICAgLCBt
X3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldChs
ZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJ
bmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zm
c2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRB
cnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGlu
ZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5nCi19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuICZK
U0ludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4g
JkpTVWludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgcmV0dXJuICZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgIHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBl
VWludDE2OgorICAgICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNl
IFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBj
YXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50MzJBcnJheTo6c19pbmZvOwor
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAmSlNGbG9hdDMyQXJyYXk6OnNf
aW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gJkpTRmxvYXQ2NEFy
cmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAmSlNE
YXRhVmlldzo6c19pbmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJOb3RUeXBlZEFycmF5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICBvdXQucHJp
bnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIG91
dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDMy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9h
dDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRGF0YVZpZXci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVf
aAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRB
cnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVp
bnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50
MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisg
ICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9P
Rl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5k
ZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6
CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxl
bWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6
CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNh
c2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUlu
dDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUp
OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAg
Y2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlw
ZVVpbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZs
b2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQ2xh
bXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5cGVVaW50
OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlwZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19oCisjZGVmaW5lIFR5cGVkQXJy
YXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2
NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNCw3OSArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNp
Zm5kZWYgVWludDhBcnJheV9oCi0jZGVmaW5lIFVpbnQ4QXJyYXlfaAorI2lmbmRlZiAiVWludDhB
cnJheV9oIgorI2RlZmluZSAiVWludDhBcnJheV9oIgogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0K
LWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQot
ICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFy
cmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBk
aXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAg
ICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbmxp
bmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8g
c3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19
OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWlu
dDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5
OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVh
dGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5p
bml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1VaW50OEFycmF5OjpVaW50OEFy
cmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVp
bnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFy
cmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1
YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLXVzaW5nIEpTQzo6VWludDhBcnJheTsKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgog
CiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyMyBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAog
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgVWludDhDbGFtcGVk
QXJyYXlfaAotI2RlZmluZSBVaW50OENsYW1wZWRBcnJheV9oCisjaWZuZGVmICJVaW50OENsYW1w
ZWRBcnJheV9oIgorI2RlZmluZSAiVWludDhDbGFtcGVkQXJyYXlfaCIKIAotI2luY2x1ZGUgIlVp
bnQ4QXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgVWludDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0
aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhl
c2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4K
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQg
dG8gcG90ZW50aWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMg
Y3JlYXRlZCB1bmluaXRpYWxpemVkIC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhz
Ci0gICAgLy8gemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJv
RmlsbCgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBp
bmxpbmUgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRB
cnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJy
YXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6
Onplcm9GaWxsKCkKLXsKLSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVp
bnQ4Q2xhbXBlZEFycmF5OjpzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAg
ICBpZiAoaW5kZXggPj0gbV9sZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjpp
c25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBp
ZiAodmFsdWUgPiAyNTUpCi0gICAgICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0g
PSBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRB
cnJheTo6VWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4o
c3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50
OENsYW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Vp
bnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDE2QXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
ICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkgKzIzLDEwIEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQxNkFycmF5X2gKLSNkZWZpbmUgVWludDE2QXJy
YXlfaAorI2lmbmRlZiAiVWludDE2QXJyYXlfaCIKKyNkZWZpbmUgIlVpbnQxNkFycmF5X2giCiAK
LSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdy
YWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgdWludDE2X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlw
ZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTx1aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWlu
dDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDE2QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5k
IGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDE2
QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1
aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZB
cnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFs
aXplZDxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDE2QXJyYXk6OlVpbnQxNkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1
YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVp
bnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxVaW50MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQxNkFycmF5OworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCiAKICNlbmRpZiAvLyBVaW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCAr
MTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjQsNzkg
KzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFVpbnQzMkFycmF5X2gK
LSNkZWZpbmUgVWludDMyQXJyYXlfaAorI2lmbmRlZiAiVWludDMyQXJyYXlfaCIKKyNkZWZpbmUg
IlVpbnQzMkFycmF5X2giCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWludDMyQXJy
YXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4gewotcHVibGljOgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVh
dGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBi
ZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRv
IEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0gICAgdXNpbmcg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWlu
dDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PjsKLX07Ci0K
LVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50
MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJy
YXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGFy
cmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJf
dD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDMy
QXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50MzJBcnJheT4oc3RhcnQsIGVu
ZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi11c2luZyBKU0M6OlVpbnQzMkFycmF5Owor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKICNlbmRpZiAvLyBVaW50MzJBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1Mzc3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnRXhw
Q2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUuaCIKICNp
bmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheUNvbnN0cnVj
dG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3RvdHlwZVRhYmxlOwogZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFz
aFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0YVZpZXdUYWJsZTsK
IGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJs
ZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZXJyb3JQcm90
b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNo
VGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGFycmF5UHJvdG90eXBl
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90b3R5cGVUYWJsZSkpCiAgICAg
LCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6Ym9vbGVhblBy
b3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpT
Qzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRh
YmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGVycm9yUHJvdG90eXBlVGFi
bGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5cGVUYWJsZSkpCkBAIC0yNTgs
NiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQdHIobmV3IERGRzo6
TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIHRoaXMg
bGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBpbml0aWFsaXphdGlvbiBp
dHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVkQXJyYXlDb250cm9sbGVy
ID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQogCiBWTTo6
flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAgICBhcnJheVByb3RvdHlwZVRh
YmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAgZGF0
YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZXJyb3JQcm90
b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICszMTQsNyBAQCBWTTo6flZNKCkK
ICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlDb25zdHJ1Y3RvclRh
YmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5UHJvdG90
eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYm9vbGVh
blByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
ZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVD
b25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgot
I2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtSYW5kb20u
aCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY5LDEzICs2OSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNoZTsKICAgICBjbGFzcyBDb21t
b25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgRmxvYXQzMkFy
cmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFzcyBIYW5kbGVTdGFjazsKICAg
ICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50OEFycmF5OwotICAgIGNsYXNz
IEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAgICBjbGFzcyBJbnRlcnByZXRl
cjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU09iamVjdDsKQEAgLTkz
LDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
ICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBVaW50OEFycmF5OwotICAgIGNs
YXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQxNkFycmF5OwotICAgIGNsYXNz
IFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogICAgIGNsYXNzIFVu
bGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
YXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBib29sZWFuUHJv
dG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJsZTsKICAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJs
ZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQ
cm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93blB0cjxQ
cm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAgUmVmUHRy
PFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOwogICAgICAgICBS
ZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVtcFBvaW50ZXJBbGxvY2F0b3Ig
bV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCkgeyByZXR1cm4g
bV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51bWJlck9mTmV3U3RyaW5nc1Rv
SGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAwOyB9CiAKLSNkZWZpbmUgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6ZWRUeXBlKSBcCi0gICAgICAg
IHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBjYXBpdGFsaXplZFR5cGUj
I0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIFwKLSAgICAg
ICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9j
bGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyA9PSBkZXNj
cmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8jI3R5cGUjI0FycmF5RGVzY3Jp
cHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VSVChtXyMjdHlwZSMjQXJyYXlE
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwKLSAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRvcigpIGNvbnN0IHsgQVNTRVJU
KG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyByZXR1cm4gbV8jI3R5cGUj
I0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQxNiwg
SW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQzMiwgSW50MzIp
OwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OCwgVWludDgpOwotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENsYW1wZWQsIFVpbnQ4Q2xhbXBl
ZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQxNiwgVWludDE2KTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDMyLCBVaW50MzIpOwotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMyLCBGbG9hdDMyKTsKLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwgRmxvYXQ2NCk7Ci0jdW5kZWYg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihUeXBlZEFycmF5VHlwZSB0eXBl
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50
OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQzMkFy
cmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDg6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAg
Y2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5
RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1fYXBpTG9j
ay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNsdXNpdmVUaHJlYWQgPT0gY3Vy
cmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAgIE93blB0cjxDb2RlQ2FjaGU+
IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4gbV9leGNl
cHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhBcnJheURl
c2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJheURlc2Ny
aXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURlc2NyaXB0
b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2NyaXB0b3I7
Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVzY3JpcHRv
cjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MzJBcnJheURlc2NyaXB0b3I7
Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3JpcHRvcjsK
LSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlwdG9yOwog
ICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTM5
MjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMz
IEBACisyMDEzLTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCB0aGUgbm90aW9uIG9m
IGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRoYXQgY2FuIGJlIG1hcmtlZCBEZWZlcnJlZCwK
KyAgICAgICAgICB3aGljaCBpcyBsaWtlIGEgc3BlY2lhbC1wdXJwb3NlIHVwcmVmLgorICAgICAg
ICAKKyAgICAgICAgLSBBZGRlZCBhIGNvbW1vbiBieXRlIGZsaXBwZXIuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFz
ZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpoYXNPbmVS
ZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OnJlZkNvdW50KToK
KyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjppc0RlZmVycmVkKToKKyAg
ICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6On5EZWZlcnJh
YmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJh
c2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6
c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6
ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6c2V0SXNEZWZlcnJl
ZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjpEZWZlcnJhYmxlUmVmQ291
bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjp+RGVmZXJyYWJsZVJl
ZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMuaDogQWRkZWQuCisgICAgICAgIChX
VEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToKKyAgICAgICAgKFdURjo6ZmxpcEJ5
dGVzKToKKwogMjAxMy0wOC0wOSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgTWFrZSBhdG9iKCkgdGhyb3cgYW4gSW52YWxpZENoYXJhY3Rl
ckVycm9yIG9uIGV4Y2VzcyBwYWRkaW5nIGNoYXJhY3RlcnMKSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3
MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87
IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQx
N0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CisJCTBGMkI2
NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlw
Qnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOEYyQjkxMTcyRTAw
RkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBp
bGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3Bw
ICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZB
NDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
bGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0Yx
OTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3
MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51
bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNvZGVyLmggKi8s
CisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmgg
Ki8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8sCiAJCQkJQThB
NDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQlBOEE0NzI4
MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oICovLApAQCAtNjQ4LDYgKzY1
Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5j
cHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5o
ICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBGaXhlZEFycmF5LmggKi8sCisJ
CQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovLAogCQkJCUE4QTQ3
MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJCQkJQThBNDcyQTcxNTFBODI1
QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFEOEI5RDE3MzE4Nzk4MDAxNDFE
QTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5NCw2ICsxMDAwLDcgQEAKIAkJ
CQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZGIC8qIE93bkFycmF5UHRyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZDMTUxQTgyNUIwMDQxMjNG
RiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZEMTUxQTgyNUIwMDQxMjNG
RiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1Nyw2ICsx
MDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNzE3
QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0
OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1By
aW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3Vu
dGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJl
ZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAor
Ly8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBv
ZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2Vw
dCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVk
IC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRp
bWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJl
ZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbnQgPSAy
OworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291
bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0Rl
ZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVm
ZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3Vu
dCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9
CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQg
Jj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxl
UmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZD
b3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJl
ZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJy
ZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZEJhc2UodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nh
c3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNv
dW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNkZWZpbmUg
RmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9vbCBsaXR0
bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVuZGlh
bjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5saW5l
IHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1
ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4KTsKK30K
KworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAw
MDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4KQorICAg
ICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1aW50NjRf
dCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAw
MDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAw
MDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDBmZjAw
MDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAwMDBsbHUp
IDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkgPj4gOCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAgICAgfCAo
KHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1Nik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAoc2l6ZW9m
KHZhbHVlKSA9PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVvZih2YWx1
ZSkgPT0gMikgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAg
ICAgICAgICAgdWludDE2X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFs
ID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICBy
ZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkgewor
ICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWlu
dDMyX3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7Cisg
ICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmln
aW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkgeworICAgICAgICB1bmlv
biB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDY0X3Qgd29yZDsK
KyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29y
ZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbjsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTM3NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODIsOCArMzgyLDYgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvaHRtbC9UaW1l
UmFuZ2VzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZhbGlkaXR5U3RhdGUuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvVm9pZENhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXJWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsIFwKQEAgLTM5Mywy
MCArMzkxLDExIEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L0RPTVBhdGguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJz
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwg
XAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9JbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQ4
QXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVp
bnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5pZGwgXAog
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvVWludDhBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDhDbGFt
cGVkQXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5m
by5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaWRsIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjI2LDcgKzIyNiw4
IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICB9IGVsc2lmICgkaXNDYWxsYmFjayAmJiAk
Y29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgkdHlwZSkpIHsKICAgICAgICAgJGluY2x1ZGVz
UmVmLT57IkpTJHt0eXBlfS5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAkaW5jbHVkZXNSZWYtPnsiPHJ1bnRp
bWUvJHt0eXBlfS5oPiJ9ID0gMTsKKyAgICAgICAgJGluY2x1ZGVzUmVmLT57IjxydW50aW1lL1R5
cGVkQXJyYXlzLmg+In0gPSAxOworICAgICAgICAkaW5jbHVkZXNSZWYtPnsiPHJ1bnRpbWUvSlNU
eXBlZEFycmF5cy5oPiJ9ID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICAjIGRlZmF1bHQsIGlu
Y2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiJHt0eXBl
fS5oIn0gPSAxOwpAQCAtNjgzLDcgKzY4NCw4IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogCiAgICAg
aWYgKCRoYXNQYXJlbnQgJiYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTR2Vu
ZXJhdGVUb05hdGl2ZU9iamVjdCJ9KSB7CiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNU
eXBlZEFycmF5VHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNs
dWRlc3siPHJ1bnRpbWUvJGludGVyZmFjZU5hbWUuaD4ifSA9IDE7CisgICAgICAgICAgICAkaGVh
ZGVySW5jbHVkZXN7IjxydW50aW1lL1R5cGVkQXJyYXlzLmg+In0gPSAxOworICAgICAgICAgICAg
JGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+In0gPSAxOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5o
In0gPSAxOwogICAgICAgICB9CkBAIC05NjIsMjIgKzk2NCw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cbiIpOwogICAgIH0KIAotICAg
IGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGlt
cGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZm
ZXIiKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBK
U0M6OlR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6Iik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50OCIpIGlmICRpbXBsVHlwZSBl
cSAiSW50OEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJ
bnQxNiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MTZBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJUeXBlZEFycmF5SW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIkludDMyQXJyYXki
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQ4IikgaWYgJGlt
cGxUeXBlIGVxICJVaW50OEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5
cGVkQXJyYXlVaW50OENsYW1wZWQiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFycmF5
IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50MTYiKSBpZiAk
aW1wbFR5cGUgZXEgIlVpbnQxNkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlR5cGVkQXJyYXlVaW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQzMkFycmF5IjsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDMyIikgaWYgJGltcGxUeXBl
IGVxICJGbG9hdDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheUZsb2F0NjQiKSBpZiAkaW1wbFR5cGUgZXEgIkZsb2F0NjRBcnJheSI7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICI7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBpbnRwdHJfdCBtX3N0b3JhZ2VMZW5ndGg7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIiAgICB2b2lkKiBtX3N0b3JhZ2U7XG4iKTsKLSAgICB9Ci0KICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtMTg2NiwxMiArMTg1Miw2IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
dm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcbiIpOwogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5
QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlciIpKSB7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlw
dG9yKCYke2NsYXNzTmFtZX06OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwg
bV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdlTGVuZ3Ro
KSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxlbmd0aCA9
IGltcGwoKS0+bGVuZ3RoKCk7XG4iKTsKLSAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CkBAIC0yNTIzLDEzICsyNTAzLDYgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAu
ICIoZXhlYykpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIGVxICJzZXQiIGFuZCAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBteSAkdmlld1R5cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVHlwZWRBcnJheSJ9OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXRXZWJHTEFycmF5SGVscGVyPCRpbXBs
VHlwZSwgJHZpZXdUeXBlPihleGVjLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9IHN0YXRp
Y19jYXN0PCRpbXBsVHlwZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbXBsLT5pc1JlYWRPbmx5KCkpIHtcbiIpOwpA
QCAtMzYwOCw3ICszNTgxLDEwIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgIyBEZWZh
dWx0LCBpbmNsdWRlIGhlYWRlciB3aXRoIHNhbWUgbmFtZS4KICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIkpTJHR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8cnVudGltZS8kdHlwZS5oPiIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2Vu
ZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CisgICAgICAgICAgICBpZiAobm90ICRj
b2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4iLCAkY29uZGl0aW9u
YWwpOworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1R5cGVk
QXJyYXlzLmg+IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIHsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFs
KSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKICAgICAg
ICAgfQpAQCAtNDA5MywzMCArNDA2OSw2IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNp
ZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlw
ZWRBcnJheSIpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0FycmF5QnVmZmVyVmll
d0hlbHBlci5oIn0gPSAxOwotICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRpbnRlcmZhY2VO
YW1lPiBhcnJheSA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwgJHZp
ZXdUeXBlPihleGVjKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmICghYXJyYXkuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLlxuIik7Ci0gICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9y
LT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCAke2ludGVyZmFjZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1lfT4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjppbmRleFNldHRlcihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlcbiIp
OwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpbXBsKCktPnNldChpbmRleCwgdmFsdWUu
dG9OdW1iZXIoZXhlYykpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNv
bnN0cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7
CiAgICAgICAgICAgICBteSAkb3ZlcmxvYWRlZEluZGV4U3RyaW5nID0gIiI7CiAgICAgICAgICAg
ICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9h
ZGVkSW5kZXh9ID4gMCkgewpAQCAtNDE5NSw3ICs0MTQ3LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3Ry
dWN0b3JIZWxwZXJNZXRob2RzCiAKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2Vu
ZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIg
OiAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRsZWFzdENvbnN0cnVjdG9yTGVu
Z3RoID0gMDsKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgk
aW50ZXJmYWNlLCAiRXZlbnQiKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBs
YXRlKCRpbnRlcmZhY2UsICJUeXBlZEFycmF5IikpIHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewogICAgICAgICAk
bGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDE7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgbXkgQGNvbnN0cnVj
dG9ycyA9IEB7JGludGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKLSAg
ICBDdXN0b21Db25zdHJ1Y3Rvcih1bnNpZ25lZCBsb25nIGxlbmd0aCksCi0gICAgSlNOb1N0YXRp
Y1RhYmxlcywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MsCi0gICAgSW1wbGVtZW50
YXRpb25MYWNrc1ZUYWJsZQotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXIgewotICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci0gICAgQXJyYXlCdWZmZXIgc2xp
Y2UobG9uZyBiZWdpbiwgb3B0aW9uYWwgbG9uZyBlbmQpOwotfTsKLQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCShyZXZpc2lvbiAxNTM3
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgQ3VzdG9tVG9K
U09iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNw
YWNlPUpTQwotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXJWaWV3IHsKLSAgICByZWFkb25seSBhdHRy
aWJ1dGUgQXJyYXlCdWZmZXIgYnVmZmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGJ5dGVPZmZzZXQ7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
Ynl0ZUxlbmd0aDsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcu
Y3BwCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRh
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZh
bHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYg
KCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQz
Ml90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVj
a2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQg
KyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBj
aGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBieXRlTGVuZ3RoKSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpCi0gICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9i
eXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRl
cyhib29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4g
bGl0dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgot
fQotCi1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFy
IHRlbXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZv
aWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAx
KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAg
c3dhcEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQot
c3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVz
KHAsIHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMo
cCArIDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxp
dHRsZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAg
ICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0
OgotICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3Ojpn
ZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsK
LSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBp
dCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZh
bHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRl
T2Zmc2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBz
aXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3
YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVz
IGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9y
ZXMuCi0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7
Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRs
ZUVuZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSAr
IGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERh
dGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0K
LQotdWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci11aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1
aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0
YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1k
b3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJs
ZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNl
dEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1
ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0K
LSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKLQotY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0
aDsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNs
aWNlKGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50
OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJ
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0
SW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWlu
dDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxv
YXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0
RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWlu
dDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
IH0KLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0
VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAg
ICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0Rmxv
YXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2
NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlv
bmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49
IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNl
dCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVu
c2lnbmVkIG1fYnl0ZUxlbmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxv
YXQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9G
bG9hdDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZX
b3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0g
ICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0g
ICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hl
Y2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1mbG9hdCwKLSAgICBJbXBsZW1lbnRhdGlvbk5h
bWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZsb2F0MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgRmxvYXQzMkFycmF5
IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBm
bG9hdCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDMyQXJy
YXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNl
dChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxv
YXQ2NEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9G
bG9hdDY0QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM3NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3Bl
LAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVk
U2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFi
bGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAg
ICBUeXBlZEFycmF5PWRvdWJsZSwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0g
aW50ZXJmYWNlIEZsb2F0NjRBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5z
aWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDg7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgRmxvYXQ2NEFycmF5IHN1YmFycmF5KFtEZWZh
dWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBkb3VibGUgKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoRmxvYXQ2NEFycmF5IGFycmF5LCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9u
Zz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgp
OwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAkocmV2
aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5Lmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAg
R2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0
b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNH
ZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9t
VG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9c2ln
bmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJ
bnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllU
RVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgbGVuZ3RoOwotICAgIEludDhBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25n
IGVuZCk7Ci0KLSAgICBnZXR0ZXIgYnl0ZSAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAv
LyB2b2lkIHNldChJbnQ4QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4
dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1U
eXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwK
LSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9c2hvcnQsCi0gICAgSW1w
bGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQxNkFycmF5IDogQXJyYXlC
dWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0g
MjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJ
bnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBn
ZXR0ZXIgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50
MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZv
aWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbnQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbnQzMkFycmF5LmlkbAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21J
bmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50
cywKLSAgICBUeXBlZEFycmF5PWludCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MK
LV0gaW50ZXJmYWNlIEludDMyQXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVu
c2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1
bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBsb25nICh1bnNpZ25lZCBsb25n
IGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJh
eSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwJKHJldmlzaW9u
IDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25l
ZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWlu
dDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRF
U19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7Ci0gICAgVWludDhBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBvY3Rl
dCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50OEFycmF5IGFy
cmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2Vx
dWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2
b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xh
bXBlZEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50OENsYW1wZWRBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzc3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZX
b3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0g
ICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0g
ICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hl
Y2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVu
dGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDhDbGFtcGVkQXJyYXkgOiBVaW50
OEFycmF5IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsK
LQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50
OENsYW1wZWRBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
c3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0KLSAgICAvLyBGSVhNRTogTWlzc2luZyBvdGhlciBzZXR0ZXJzIQotICAg
IC8vIHZvaWQgc2V0KFVpbnQ4Q2xhbXBlZEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBs
b25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzc3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29u
dGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0
ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRv
TmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVj
dCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgc2hv
cnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50MTZB
cnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19Q
RVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7Ci0gICAgVWludDE2QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5zaWdu
ZWQgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDE2
QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lk
IHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQp
OwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
VWludDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1VpbnQzMkFycmF5LmlkbAkocmV2aXNpb24gMTUzNzc0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvVWludDMyQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9i
YWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9t
SW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0
YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFu
dHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBpbnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0g
ICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDMyQXJyYXkgc3Vi
YXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBs
b25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5zaWduZWQgbG9uZyAodW5zaWduZWQgbG9uZyBpbmRl
eCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBv
cHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208557</attachid>
            <date>2013-08-12 13:42:33 -0700</date>
            <delta_ts>2013-08-12 17:46:33 -0700</delta_ts>
            <desc>WebCore is starting to build</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>577842</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxMiBA
QAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQg
YWxsb2NhdGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nngg
c3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSlNDVHlwZWRBcnJh
eVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAg
KEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBl
Rm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZn
L0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAg
IChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlND
OjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6
OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNv
dW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNl
KToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURl
YWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGlu
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAg
ICogcnVudGltZS9EYXRhVmlldy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmNwcC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Ynl0ZUxlbmd0
aCk6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1l
L0Zsb2F0MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvRmxvYXQ2NEFycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6ZGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpzZXRSYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb1Jh
bmdlKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpsZW5ndGgpOgorICAg
ICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Oml0ZW0pOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmNoZWNrSW5ib3VuZERhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmdldFR5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHZW5lcmljVHlwZWRB
cnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6Ojo6c3ViYXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OmFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKiBydW50aW1lL0ludDE2QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0ludDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0ludDhBcnJheS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyOjpKU0FycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXI6OmltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RB
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgor
ICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY1NldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jU2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2
NEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRl
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXpl
KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2ts
eSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAg
ICAgICAgKEpTQzo6OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6OjpnZXRDYWxs
RGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAg
ICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgIChKU0M6Ojo6dmFsaWRhdGVSYW5nZSk6CisgICAgICAgIChKU0M6Ojo6c2V0
V2l0aFNwZWNpZmljVHlwZSk6CisgICAgICAgIChKU0M6Ojo6c2V0KToKKyAgICAgICAgKEpTQzo6
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6OjpkZWZpbmVP
d25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAo
SlNDOjo6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjo6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKEpTQzo6Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6OjpzbG93RG93
bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6OjpnZXRUeXBlZEFycmF5SW1wbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jU2V0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3Vi
YXJyYXkpOgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVz
ZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnR5cGVkQXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQx
NkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTVWludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjp0b0pTKToKKyAgICAgICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5n
SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAg
ICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6Rmxv
YXRUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBl
ZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNW
YWx1ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRB
cnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5
cGVkQXJyYXlEZXNjcmlwdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9Gb3JUeXBlKToKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6Omlz
VHlwZWRWaWV3KToKKyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpp
c0ludCk6CisgICAgICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlNDOjppc1NpZ25lZCk6
CisgICAgICAgIChKU0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9VaW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhBcnJheS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTA4ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0b3JpbmcgdXNlIG9mIFN0YWNrSXRlcmF0b3Ig
aW5zdGVhZCBvZiBJbnRlcnByZXRlcjo6Z2V0U3RhY2t0cmFjZSgpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBEYXRlQ29uc3RydWN0b3IubHV0LmggXAogICAg
IERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBK
U0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBK
U0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0jZGVmaW5lIEpTQ1R5
cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJG
bG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJheS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhDbGFtcGVkQXJyYXku
aCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIAot
I2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0eXBlKSBcCi1jbGFzcyBKUyMjbmFtZSMjQXJyYXkg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeyBcCi1wdWJsaWM6IFwKLSAgICB0eXBlZGVm
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7IFwKLSAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5
KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4gaW1wbCkgXAotICAgIHsgXAotICAgICAg
ICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJh
eShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOyBcCi0gICAgICAgIHJldHVybiBwdHI7IFwKLSAg
ICB9XAotXAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKLSAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XAotICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAotXAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtcCi0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XAot
ICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XAotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJyYXlU
eXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJheSMjbmFtZTtcCi0gICAg
dWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0b3JhZ2U7XAotICAgIFJl
ZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0gICAgSlMjI25hbWUjI0Fy
cmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPG5hbWUjI0Fy
cmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1wKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19O1wKLVwKLWNvbnN0IENs
YXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUgIkFycmF5IiAsICZCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25hbWUjI0FycmF5KSB9O1wK
LVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5PiBp
bXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpXAotICAgICwg
bV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1wKLSAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbywg
T0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNF
VE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAotICAgIHZtLnJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlwdG9yKTtcCi0gICAgbV9z
dG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxlbmd0aCA9IG1faW1wbC0+
bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKLX1cCi1cCi1ib29sIEpTIyNu
YW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVwK
LXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNB
cnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAg
ICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wKLSAg
ICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJvb2wg
SlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmpl
Y3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCi0gICAgICAgIHJldHVy
biB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
IyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPCB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+
Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAgIHJldHVybiB0cnVlO1wK
LSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVy
KGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAotICAgIH1cCi0gICAgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1c
Ci1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwKLXtcCi0gICAgbV9pbXBs
LT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAotXAotdm9pZCBKUyMjbmFt
ZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7XAotICAg
IHJldHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aDsgKytp
KVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUjI0FycmF5OjpnZXRCeUlu
ZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTtcCi0gICAgdHlwZSByZXN1bHQgPSBtX2ltcGwtPml0
ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJlc3VsdCkpXAotICAgICAg
ICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVzdWx0KTtcCi19XAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMjI25hbWUjI0FycmF5
KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnQz
MihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gYnVm
ZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAgaWYgKCFidWZmZXIpIFwK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3Io
Y2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRp
dmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIyNuYW1lIyNB
cnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShVaW50OCwgdWludDhfdCk7
Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDE2
LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90KTsKLVRZUEVEX0FSUkFZ
KEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZfdCk7Ci1UWVBFRF9BUlJB
WShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBmbG9hdCk7Ci1UWVBFRF9B
UlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkBAIC0yMzgsMTYg
KzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjbGVhclNhbXBs
aW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7CiAjZW5kaWYKICAgICAg
ICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4QXJyYXkiLCBj
b25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXks
IDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MTZBcnJheSIs
IGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMyQXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RK
U0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIklu
dDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQzMkFycmF5Iiwg
Y29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7Ci0K
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMo
KSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsg
KytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwg
anNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3QjZCNTNG
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2
REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZp
ZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8q
IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OworCQkwRjJC
NjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
ICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFNzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsg
fTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmll
d1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3Bw
ICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07CisJCTBG
MkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8q
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUx
QzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgw
MENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ5LDcgKzM5OSw2IEBACiAJCTBGRUEwQTMyMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAw
QUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0Ux
NjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUEx
NjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlB
QjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI0LDggKzg3Myw2IEBACiAJCUE3QThB
RjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxU
eXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4
QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAv
KiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURC
NUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENs
YW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTIwNyw2ICsxMjU0LDU2IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NS
RXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291
bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3
UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
c2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQ1MSw3ICsxNTQ4LDYgQEAKIAkJMEZFQTBBMkUxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ29tbW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR0NvbW1vbkRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENv
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5j
cHA7IHBhdGggPSBkZmcvREZHSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdB
RCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlZEFycmF5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5
QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4ODIsNyArMTk3OCw2IEBACiAJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4
RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQ
cmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdB
MEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3NjdGRjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFy
cmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJh
eVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQw
MDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZG
NTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzdBNDIzNjE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0SGVhcC5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE5MjcsOCArMjAyMiw2IEBACiAJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50OEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDE2
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMkQxN0FEQjVGMzAw
NUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRTE3QURC
NUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5QmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVaW50OEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjMxMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OENsYW1wZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4
QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVWludDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyNjAsNyArMjM1Myw2IEBACiAJCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpz
Yy5jcHAgKi8sCiAJCQkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovLAog
CQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICov
LAotCQkJCUE3NjdGRjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAq
LywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAq
LywKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRv
ci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLApAQCAtMjU1
Niw2ICsyNjQ4LDEwIEBACiAJCQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuY3BwICovLAogCQkJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxv
Y2tzLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5o
ICovLAorCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oICovLAorCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCAqLywKKwkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaCAqLywKKwkJCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1
RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NU
aHJlYWRTaGFyZWREYXRhLmNwcCAqLywKQEAgLTI4MjgsNiArMjkyNCw1MiBAQAogCQk3RUY2RTBC
QjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmNwcCAqLywKKwkJCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLywK
KwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
Ki8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCAqLywKKwkJCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlci5jcHAgKi8sCisJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuaCAqLywKKwkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcCAqLywKKwkJCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkI5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QkExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKKwkJCQkwRjJCNjZCQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2
QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJFMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywK
KwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJ
MEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlSW5saW5lcy5oICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhB
cnJheS5oICovLAorCQkJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXku
aCAqLywKKwkJCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi8s
CisJCQkJMEYyQjY2Q0MxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAgKi8sCisJCQkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oICovLAorCQkJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcCAqLywKKwkJCQkwRjJCNjZDRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovLAorCQkJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAqLywKKwkJCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
OENsYW1wZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1Vp
bnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMy
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENjE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLywKKwkJCQkwRjJCNjZEOTE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkRBMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2NkRCMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkRDMTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2REQxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAwQjlB
NjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAvKiBB
cmdMaXN0LmggKi8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5j
cHAgKi8sCkBAIC0yOTIwLDcgKzMwNjIsNiBAQAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5
LmggKi8sCi0JCQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCAqLywKIAkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5jcHAgKi8sCiAJCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUgLyog
SW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCkBAIC0zMDc4LDggKzMyMTksNiBAQAogCQkJCTE0QTM5
NkE2MENEMjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUx
QzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFF
NTQ5IC8qIFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlw
ZWRBcnJheUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLywKIAkJCQlBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDE2QXJyYXkuaCAqLywKIAkJCQk4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0
aEZyYWN0aW9uLmggKi8sCiAJCQkJQTdBOEFGMzMxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFy
cmF5LmggKi8sCkBAIC0zNTM4LDEyICszNjc3LDE1IEBACiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAw
QjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY4OENCMTUwRUQxMkI0RTAwMUQ2NDlGIC8qIEFzc2VtYmxlckJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3Nl
bWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2
MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4MTZFMUMxNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyog
Qm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4
RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1
RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1NSw2ICszNjk3LDcgQEAKIAkJCQlBN0MxRUFFRjE3OTg3QUI2MDAyOTlE
QjIgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVFM0JDMDUwRTFB
RTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBC
ODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjkxNEJDRjk1RjAwODg1
QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAq
LywKQEAgLTM1NjYsNiArMzcwOSw3IEBACiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8q
IENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0Ew
MEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21t
b25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURF
MzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTc2LDYgKzM3MjAs
NyBAQAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDM0Y2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyogQ29w
aWVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMzYwNCw2ICszNzQ5LDcgQEAKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAw
MEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYw
MTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE3LDYgKzM3NjMsNyBA
QAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8qIERGR0JyYW5j
aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNTZD
MzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZH
Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTAsNiArMzc5Nyw3
IEBACiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2QzREMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURD
NjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFkZXJz
ICovLApAQCAtMzY1OCw2ICszODA2LDcgQEAKIAkJCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTcz
OEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3M0E1MzVCMTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjcxLDYgKzM4MjAsNyBAQAogCQkJ
CTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQjE2RDAyRjAxMDA1NUE1REIgLyogREZHTm9kZUFsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZBNTgxQkIxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNTgxQkMxNTBFOTUzMDAw
QjlBMkQ5IC8qIERGR05vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlD
RkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBp
biBIZWFkZXJzICovLApAQCAtMzY4NCw2ICszODM0LDggQEAKIAkJCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVFMTRF
RjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNjkzLDYgKzM4NDUsNyBAQAogCQkJCUE3NDEwMTdGMTc5REFG
ODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBERkdT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUwMTdC
NkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQzMTMyOERGODIwMDJC
MkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzI2LDYgKzM4
NzksNyBAQAogCQkJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3NDYsNiArMzkwMCw3IEBACiAJCQkJMEZFQTBBMkMxNzBC
NjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzhBOTc3RjE3OTczOEQ1MDA5REY3NDQgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEwQTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBFMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc4MTE3
OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
Nzk0LDcgKzM5NDksNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8q
IEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0
IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODg1M0ZB
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM4MTMsNiArMzk2Nyw3IEBACiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0QzUyNDJCMEY1MzU1RTkwMEJBM0QwNCAvKiBKSVRTdHVicy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFRjY4MzVFMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJz
QVJNdjcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QTRBRTBEMTc5NzNCNEQwMDU2MTJCMSAvKiBK
SVRTdHVic01JUFMuaCBpbiBIZWFkZXJzICovLApAQCAtMzg0MCw2ICszOTk1LDcgQEAKIAkJCQlC
QzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYz
QzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4Qjgx
Nzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zODU1LDYgKzQwMTEsNyBAQAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01h
bmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3
IC8qIEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNPYmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4NjYsNiArNDAyMyw3IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3
IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDEx
RCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3
RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjAxNzk4N0FC
NjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMzg4NCw2
ICs0MDQyLDcgQEAKIAkJCQk4NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFj
aGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlC
IC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2
RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTM5MTQsNiArNDA3Myw3
IEBACiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDM3MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBMb29rdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENEMTRCQkIxN0Qw
MEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEI3
MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggaW4gSGVhZGVycyAq
LywKQEAgLTM5MjYsNiArNDA4Niw3IEBACiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAv
KiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVC
QTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTM5MzQsMTQgKzQwOTUs
MTcgQEAKIAkJCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYxMkU0Q0QxNTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVz
dWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0
aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTJBMEUxNkZD
QzIwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTAyMTNF
M0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAg
LyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDAxNTYwRjA2QTAw
OEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDIx
NTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
QkYzMDQxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRp
dmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRkYwMDY0
MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTcxLDYg
KzQxMzUsNyBAQAogCQkJCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM0MTRFMUI2MDAw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyog
UHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1
OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTk5LDkgKzQxNjQs
MTEgQEAKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERp
cmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBF
MTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjEx
QzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIw
MkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MDI0LDYgKzQxOTEsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2
QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMzYsNyArNDIwNCw5IEBACiAJCQkJMTRERjA0
REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYw
RTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmlu
Z1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjYwRTE2RkNBNzAwQjM0NDYw
IC8qIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNDA0OCw2ICs0MjE4
LDggQEAKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQw
MDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFGMTdC
NkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NzAxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBE
MDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcsOSArNDIyOSwxMCBAQAogCQkJCTBGNTcyRDRGMTY4
NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
ODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxNDQ4Q0QxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ1MzcyNkYwRTFDNTQ4ODAw
MjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QThBRjNFMTdBREI1RjMw
MDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQjNFQ0Qx
NjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9k
ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1
ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTQ0ODksNiArNDY2Miw3IEBACiAJCQkJ
MTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MDQxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVF
MEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDUxNCw2ICs0Njg4LDcgQEAKIAkJCQlBN0Q4OUNG
NTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBDNzI1MzIgLyogREZHQ1NFUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0RkYw
MDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTczRTEzMzAxNzk2MjRDRDAwRTRERUE4IC8qIERGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1NDMsNiArNDcxOCw3IEBACiAJ
CQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDMDk3OTExNDZBNkY3MTAwQ0YyNDQyIC8qIERGR09TUkV4aXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRUIxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDYxNiw2ICs0NzkyLDcgQEAKIAkJCQlDMjEx
MjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODU1MTA3RUMwRTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzUxMzRGRjBBNjAwQUZB
REI1IC8qIEhhbmRsZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJFMzEzNzEzNEZGMEE2
MDBBRkFEQjUgLyogSGFuZGxlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCQTdBOTcx
M0FBREZGODAwNUI3QzJDIC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjY4LDExICs0
ODQ1LDEzIEBACiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTMxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFt
ZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAv
KiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxl
clByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3
IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2
REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTQ2OTAsNiArNDg2OSw3IEBACiAJCQkJQTc0ODJCOTQxMTY3MTE0NzAwM0IwNzEy
IC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNl
cyAqLywKKwkJCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAv
KiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzQxNUFFMjUz
ODAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTQ3MTIsNiArNDg5Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5
NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBDMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjA4
MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NzYyLDE3ICs0OTQzLDIxIEBACiAJCQkJMTQ3NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8q
IFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4
NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2
NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjZFQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFNjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODQzMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDQxMDdFQzA5MzAwMTNFN0IyIC8qIFJl
Z0V4cFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU4
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDg4NTBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5RTE3MzA2
QzhEMDA3REJEQTUgLyogU291cmNlQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ5M0FG
QTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTQ5REMxNkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00ODA1LDYgKzQ5OTAsNyBAQAogCQkJCUUxOEUzQTU5MERGOTI3OEMw
MEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTRBMzMxRjE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MTYxNDA1
MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVEOTRGMzAxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAwMDRBNEU3RCAvKiBXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIGlu
bGluZSBib29sIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW4KIAogaW5saW5lIGJvb2wgaGFz
T3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bykKIHsKLSAgICByZXR1cm4gY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUgIT0gVHlw
ZWRBcnJheU5vbmU7CisgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKTsKIH0KIAogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZyhT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTk4LDIzICs5OCwyMyBAQCBpbmxpbmUgSklUQXJyYXlN
b2RlIGppdEFycmF5TW9kZUZvckluZGV4CiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9k
ZUZvckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2gg
KGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBUeXBlZEFycmF5
SW50ODoKKyAgICBjYXNlIFR5cGVJbnQ4OgogICAgICAgICByZXR1cm4gSklUSW50OEFycmF5Owot
ICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgorICAgIGNhc2UgVHlwZUludDE2OgogICAgICAgICBy
ZXR1cm4gSklUSW50MTZBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKKyAgICBjYXNl
IFR5cGVJbnQzMjoKICAgICAgICAgcmV0dXJuIEpJVEludDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6CisgICAgY2FzZSBUeXBlVWludDg6CiAgICAgICAgIHJldHVybiBKSVRVaW50
OEFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVV
aW50OENsYW1wZWQ6CiAgICAgICAgIHJldHVybiBKSVRVaW50OENsYW1wZWRBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgogICAgICAgICByZXR1
cm4gSklUVWludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgorICAgIGNhc2Ug
VHlwZVVpbnQzMjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQzMkFycmF5OwotICAgIGNhc2UgVHlw
ZWRBcnJheUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKICAgICAgICAgcmV0dXJuIEpJ
VEZsb2F0MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgorICAgIGNhc2UgVHlw
ZUZsb2F0NjQ6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDY0QXJyYXk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQ1JBU0goKTsKQEAgLTEyMiw2ICsxMjIsMzMgQEAgaW5saW5lIEpJVEFycmF5TW9k
ZSBqaXRBcnJheU1vZGVGb3JDbGFzcwogICAgIH0KIH0KIAoraW5saW5lIFR5cGVkQXJyYXlUeXBl
IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUSW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUludDg7CisgICAgY2FzZSBKSVRJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUlu
dDE2OworICAgIGNhc2UgSklUSW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsK
KyAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7CisgICAg
Y2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1w
ZWQ7CisgICAgY2FzZSBKSVRVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7
CisgICAgY2FzZSBKSVRVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Cisg
ICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKKyAg
ICBjYXNlIEpJVEZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OworICAg
IGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5
OworICAgIH0KK30KKwogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGlu
Z1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NiwyOSArMjY2LDI3IEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mbygKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpT
RnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0g
ICAgaWYgKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25l
KSB7Ci0gICAgICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50
OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVy
biBTcGVjSW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4
OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVk
QXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFy
cmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4g
U3BlY1VpbnQxNkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9h
dDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2Ug
VHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dp
dGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUlu
dDg6CisgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2Ogor
ICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAg
ICAgIHJldHVybiBTcGVjSW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAg
cmV0dXJuIFNwZWNVaW50OEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6Cisg
ICAgICAgIHJldHVybiBTcGVjVWludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAg
ICAgIHJldHVybiBTcGVjRmxvYXQ2NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0
OjpzX2luZm8pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDMyIEBAIGNvbnN0IGNo
YXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmEKICAgICB9CiB9CiAKK1R5cGVkQXJyYXlU
eXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50
ODsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDE2
OworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7
CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsK
KyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVV
aW50OENsYW1wZWQ7CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDE2OworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1
cm4gVHlwZVVpbnQzMjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlRmxvYXQzMjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAg
IHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTm90VHlw
ZWRBcnJheTsKKyAgICB9Cit9CisKIHZvaWQgQXJyYXlNb2RlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KHR5cGUoKSwgYXJyYXlDbGFzcygpLCBzcGVjdWxh
dGlvbigpLCBjb252ZXJzaW9uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgY29u
c3QgY2hhciogYXJyYXlDbGFzc1RvU3RyaW5nKEFycmF5OjpDbAogY29uc3QgY2hhciogYXJyYXlT
cGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlvbik7CiBjb25zdCBjaGFyKiBhcnJh
eUNvbnZlcnNpb25Ub1N0cmluZyhBcnJheTo6Q29udmVyc2lvbik7CiAKK1R5cGVkQXJyYXlUeXBl
IHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUpOworCiBjbGFzcyBBcnJheU1vZGUgewogcHVi
bGljOgogICAgIEFycmF5TW9kZSgpCkBAIC0zODAsNiArMzgyLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6U3RyaW5nOwogICAgIH0KICAgICAKKyAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG9UeXBlZEFycmF5VHlwZSh0eXBlKCkpOworICAgIH0KKyAgICAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gb3RoZXIudHlwZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2NjcsMzcgKzI2NjcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgIH0g
fQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzMsNDYgKzI4NDksMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52
bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1ODEsMzcgKzI1ODEsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
ZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0
eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlm
IChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzIsNDYgKzI4NDgsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVk
QXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7Cisg
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBl
KCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0
eXBlKTsKKyAgICAgICAgfSB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMzIgKzU4Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICB9CiB9CiAgICAgCi1jb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9k
ZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7Ci0gICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDhBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgcmV0
dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
CiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dGb3JVbndhbnRlZEFy
cmF5TW9kZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFycmF5TW9kZSwgSW5kZXhpbmdUeXBl
IHNoYXBlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewpAQCAtNjk0
LDggKzY2OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgp
KTsKLSAgICAKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAg
ICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTcyNywyMiAr
Njk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3Vt
ZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSByZXN1bHQtPm1f
Y2xhc3NJbmZvOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9IGNsYXNz
SW5mb0ZvclR5cGUobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChleHBlY3RlZENsYXNzSW5m
byk7CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgbV9qaXQubG9hZFB0
cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMjYwMSw4ICsyNTY0LDEwIEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShKSVQKIAogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
KQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKQEAgLTI2MTksMTYgKzI1ODQsMTcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAg
ICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlw
dG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewog
ICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkK
KyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDhTaWdu
ZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRU
eXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMTZTaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgcmVzdWx0UmVnKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3Vs
dFJlZyk7CkBAIC0yNjM5LDEyICsyNjA1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW4KICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwogICAgIH0KLSAg
ICBpZiAoZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkg
eworICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0g
VW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gNCAm
JiAhaXNTaWduZWQodHlwZSkpOwogICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0
UmVnLCBUcnVzdGVkSW1tMzIoMCkpLCBWYWx1ZVJlY292ZXJ5Ojp1aW50MzJJbkdQUihyZXN1bHRS
ZWcpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjY1OSw4
ICsyNjI1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAg
ICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUq
IG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVz
cywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0
eXBlKSk7CisgICAgCiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgCkBAIC0yNjc3LDggKzI2NDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgZG91YmxlIGQgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0g
MSk7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgIGQgPSBjbGFtcERvdWJsZVRvQnl0
ZShkKTsKICAgICAgICAgfQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAg
LTI2OTMsOCArMjY2MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIGlmIChyb3VuZGluZyA9
PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09
IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgICAgICBjb21waWxl
Q2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwpAQCAtMjcwMyw4ICsyNjcxLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAgICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKQEAgLTI3MjQsNyArMjY5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgICAgICAgICBub3ROYU4ubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWxlZDsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWdu
ZWRUeXBlZEFycmF5KQorICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAg
ICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMy
KGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CkBAIC0yNzQ5LDkgKzI3MTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VS
ZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwogICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CisgICAgICAgIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dp
dGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAgICAgbV9qaXQuc3Rv
cmU4KHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0y
NzY5LDggKzI3MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRB
cnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKQEAgLTI3
ODYsOCArMjc1Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNp
emUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIG1faml0LmxvYWRGbG9hdChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNGb3VyKSwgcmVzdWx0UmVnKTsKICAgICAgICAgbV9qaXQuY29udmVydEZsb2F0VG9E
b3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWcpOwpAQCAtMjgwOCw4ICsyNzc5LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBkb3VibGVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVu
dFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVk
QXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCkBAIC0y
ODI0LDEwICsyNzk3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckYKICAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CisgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gUHV0QnlWYWwpIHsKKyAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6IHsK
ICAgICAgICAgbV9qaXQubW92ZURvdWJsZSh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CiAgICAgICAg
IG1faml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKQEAgLTQw
MzMsOCArNDAwOSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIK
ICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAg
CiAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2VSZWcpOwpAQCAtNDA0
OCw4ICs0MDIyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChk
ZXNjcmlwdG9yKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAg
ICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwK
KyAgICAgICAgICAgIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBA
IC00MTUwLDggKzQxMjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1l
bnRzCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlKiBu
b2RlKQogewotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlw
ZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotCiAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CkBAIC00MTkxLDE2ICs0MTY1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVs
dDogeworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKSkpOwogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsK
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlw
dG9yLT5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIH0gfQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUqIG5vZGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjQsMTAgKzE5NjQsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZUFyaXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImLCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGlu
ZyA9IFRydW5jYXRlUm91bmRpbmcpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlKiwgc2l6ZV90IGVsZW1l
bnRTaXplKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBU
eXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSopOwogICAgIGJvb2wgY29t
cGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwpAQCAtMjEwOSw4ICsyMTA5LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGUoTm9kZSosIEVk
Z2UpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUpOwotICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUsIEluZGV4aW5nVHlwZSk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUpOwogICAgIHZvaWQgY2hlY2tBcnJheShOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDgg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29w
eVRva2VuCisgICAgQnV0dGVyZmx5Q29weVRva2VuLAorICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5
VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwyNCBAQCBwcml2YXRl
OgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKK2NsYXNzIERlZmVyR0NGb3JBV2hpbGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVyR0NGb3JBV2hpbGUpOworcHVibGljOgorICAgIERl
ZmVyR0NGb3JBV2hpbGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7
CisgICAgICAgIG1faGVhcC5pbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorICAgIAor
ICAgIH5EZWZlckdDRm9yQVdoaWxlKCkKKyAgICB7CisgICAgICAgIG1faGVhcC5kZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGVmZXJHQ19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBvYmplY3Qg
dGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0byBpbmNv
bWluZyByZWZlcmVuY2VzIGZyb20gdGhlIGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGluCisvLyBy
ZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dzIGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBTdWNoIG9i
amVjdHMgYWxzbworLy8gaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBoYXZlIHJl
ZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBHQworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3Vu
dGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAgICAgIDog
bV9lbmNvZGVkUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkdDSW5jb21pbmdS
ZWZDb3VudGVkKCkKKyAgICB7CisgICAgICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkpCisgICAg
ICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFo
YXNBbnlJbmNvbWluZygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNT
aW5nbGV0b24oKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdmVjdG9y
T2ZDZWxscygpLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogaW5jb21pbmdSZWZl
cmVuY2VBdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICAvLyBJdCdzIGdlbmVyYWxseSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0aGlzIGRp
cmVjdGx5LCBzaW5jZSBpZiB0aGlzCisgICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUgc3VwcG9z
ZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2FsbCBHQ0lu
Y29taW5nUmVmQ291bnRlZFNldDo6YWRkUmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBib29sIGFk
ZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCopOworICAgIAorICAgIC8vIEEgZmlsdGVyIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisgICAgLy8g
cmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYgd2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0aGUgb2Jq
ZWN0LAorICAgIC8vIGFuZCBpZiBpdCBkb2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4gSW4gZ2Vu
ZXJhbCwgeW91IGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmlsdGVyIGZ1
bmN0aW9uIHRoYXQgY2FuIHJldHVybiBmYWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUgYWxzbyB3
YWxraW5nIHRoZSBHQydzIGxpc3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rp
b25UeXBlPgorICAgIGJvb2wgZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9u
VHlwZSYpOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludHB0cl90IHNpbmdsZXRvbkZs
YWcoKSB7IHJldHVybiAxOyB9CisgICAgCisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxzKCkgY29u
c3QgeyByZXR1cm4gIShtX2VuY29kZWRQb2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsgfQorICAg
IGJvb2wgaGFzQW55SW5jb21pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50ZXI7
IH0KKyAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUluY29taW5n
KCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMoKTsgfQorICAgIAorICAgIEpTQ2VsbCogc2luZ2xldG9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5zaW5nbGV0
b25GbGFnKCkpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rvck9mQ2Vs
bHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmVjdG9yPEpTQ2VsbCo+Kj4obV9lbmNvZGVkUG9p
bnRlcik7CisgICAgfQorICAgIAorICAgIC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDogdGhpcyBp
cyBhIEpTQ2VsbCouCisgICAgLy8gU2luZ2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBpcyBhIHBv
aW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2VsbHMuCisgICAgdWludHB0cl90IG1fZW5jb2RlZFBvaW50
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZD
b3VudGVkX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisj
ZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJ
bmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWlu
ZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0
cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNl
QXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24o
KSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxs
Kj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0
b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMo
KS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNv
bWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlv
blR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgewor
ICAgICAgICBBU1NFUlQoIXRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlz
LT5yZWZDb3VudCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgQVNTRVJUKHRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIAorICAgIGlmIChoYXNTaW5n
bGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24oc2luZ2xldG9uKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIG1fZW5jb2RlZFBv
aW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOworICAgICAgICBy
ZXR1cm4gdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHZlY3Rvck9mQ2VsbHMoKS0+YXQoaSkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaS0tKSA9IHZlY3Rv
ck9mQ2VsbHMoKS0+bGFzdCgpOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPnJlbW92ZUxhc3Qo
KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+PSAy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxz
KCktPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgICAg
ICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygp
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAg
ICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbiA9IHZlY3Rvck9mQ2VsbHMoKS0+YXQoMCk7CisgICAg
ZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oc2luZ2xldG9uKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwq
KTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3Rv
cjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNl
dCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgbV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6
YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0
LT5hZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVF
c3RpbWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQq
IG9iamVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NT
aXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWlu
Z1JlZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bV9ieXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgp
OworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpT
Q2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Ym9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwp
Cit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJERkdX
b3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRv
ci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxT
d2VlcGVyLmgiCkBAIC0zNTgsNiArMzU5LDE0IEBAIHZvaWQgSGVhcDo6amV0dGlzb25ERkdDb2Rl
QmxvY2soUGFzc1JlZlAKICAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsK
IH0KIAordm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciog
YnVmZmVyKQoreworICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwgYnVm
ZmVyKSkgeworICAgICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgICAgIGRp
ZEFsbG9jYXRlKGJ1ZmZlci0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkpOworICAgIH0KK30KKwog
dm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmVuZCgpOwpAQCAtNjIxLDE0ICs2MzAsMTkgQEAgc2l6ZV90IEhlYXA6Om9iamVj
dENvdW50KCkKICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5vYmplY3RDb3VudCgpOwogfQogCitz
aXplX3QgSGVhcDo6ZXh0cmFTaXplKCkKK3sKKyAgICByZXR1cm4gbV9leHRyYU1lbW9yeVVzYWdl
ICsgbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpOworfQorCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
bV9leHRyYU1lbW9yeVVzYWdlOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1f
c3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6Y2Fw
YWNpdHkoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0b3Jh
Z2VTcGFjZS5jYXBhY2l0eSgpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkg
KyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBI
ZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC03NDUsNiArNzU5LDExIEBAIHZv
aWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAKICAgICBKQVZB
U0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKyAgICAKKyAgICB7CisgICAgICAgIEdDUEhBU0UoU3dl
ZXBpbmdBcnJheUJ1ZmZlcnMpOworICAgICAgICBtX2FycmF5QnVmZmVycy5zd2VlcCgpOworICAg
IH0KIAogICAgIHsKICAgICAgICAgbV9ibG9ja1NuYXBzaG90LnJlc2l6ZShtX29iamVjdFNwYWNl
LmJsb2NrcygpLnNldCgpLnNpemUoKSk7CkBAIC05MjQsMTIgKzk0MywxNiBAQCB2b2lkIEhlYXA6
OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQogICAgIG1fZGVmZXJyYWxEZXB0aCsrOwogfQogCi12
b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3ZvaWQgSGVh
cDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kZWZl
cnJhbERlcHRoID49IDEpOwogICAgIAogICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotICAgIAorfQor
Cit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAg
ICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDkgKzIyLDExIEBACiAjaWZuZGVmIEhlYXBfaAogI2RlZmluZSBIZWFwX2gKIAorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmxvY2tBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0
YS5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCkBA
IC0xNDQsNiArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAKKyAgICAgICAg
c2l6ZV90IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdl
cyBhbGxvY2F0ZWQgYnkgdGhlIGhlYXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IHNpemUoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBvYmplY3RDb3VudCgpOwpAQCAtMTc5LDEx
ICsxODIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpOwogICAgICAgICAKICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQm
IGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBi
dWZmZXIpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvcGllZEJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3Mg
RGVmZXJHQzsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBIYW5kbGVTZXQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKQEAgLTIz
MCw2ICsyMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJs
b2NrQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKKyAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAg
IHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwpAQCAtMjQ1LDYgKzI1Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBN
YXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VT
cGFjZTsKKyAgICAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJy
YXlCdWZmZXJzOwogICAgICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5B
QkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5Q29uc3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlQcm90b3R5cGVUYWJsZTsgfQogICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5ib29sZWFuUHJvdG90eXBl
VGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGFWaWV3VGFi
bGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZVRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZUNvbnN0cnVjdG9yVGFi
bGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmVycm9yUHJv
dG90eXBlVGFibGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgyLDggKzQ4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0
RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91
c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRB
cnJheVNpZ25lZG5lc3MpOwotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNl
IGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgogICAgICAgICAvLyBU
aGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVj
a2VkIGFuZApAQCAtNTAzLDggKzUwMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBD
b250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExp
c3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXpl
LCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nKTsKLSAgICAgICAgSnVt
cExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVu
dFNpemUpOworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAg
ICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICBl
bnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDM1ICsxNTQ5LDEzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50
OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAx
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFy
cmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBl
ZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVz
Y3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9k
ZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBl
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
QEAgLTE2MTgsMzUgKzE1OTYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRl
Um91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGlu
Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5z
aWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCkBAIC0xNjY4LDggKzE2MjMsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmlj
KSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5l
c3Mgc2lnbmVkbmVzcykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIC8vIFRoZSBiZXN0
IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBu
ZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAvLyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0
IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVydHkuCiAKQEAgLTE2ODks
MTkgKzE2NDYsMTkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0Qgog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0
eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAg
c3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNp
Z25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUp
KQogICAgICAgICAgICAgbG9hZDhTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1l
c09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkOChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVk
VHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9h
ZDE2U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXls
b2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChiYXNlLCBw
cm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE3MTQsNyArMTY3MSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICB9CiAgICAgCiAg
ICAgSnVtcCBkb25lOwotICAgIGlmIChlbGVtZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0g
VW5zaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKHR5cGUgPT0gVHlwZVVpbnQzMikgewogICAg
ICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRQ
YXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CkBAIC0xNzQwLDggKzE2OTcsMTAgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOworICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwpAQCAtMTc1OCwxMSAr
MTcxNywxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUp
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBsb2FkRmxvYXQo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKICAgICAgICAg
Y29udmVydEZsb2F0VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7CkBAIC0xNzg5LDggKzE3NDgs
MTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIHJldHVy
biBzbG93Q2FzZXM7ICAgIAogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90
IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgcm91bmRpbmcpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7
CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4MDgsOCArMTc2OSw4IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNj
cmF0Y2gpOwpAQCAtMTgyMSwxMSArMTc4MiwxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGlu
dG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBh
dGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5n
KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChzaWduZWRuZXNzLCBzaWduZWRuZXNzID0gVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBp
ZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKKyAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMy
KDB4ZmYpKTsKICAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFy
bHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0
Y2gsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODM2LDcgKzE3OTcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAg
ICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNo
LCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkpOwogICAgICAgICBi
cmVhazsKQEAgLTE4NTMsOCArMTgxNCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5
cGVkQXJyYXlQdXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTg3Miw4
ICsxODM1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9y
VHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODk4LDkgKzE4NjEsOSBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgCiAgICAgLy8gV2Ugd291bGQg
YmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0
aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4K
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBs
YXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0
OgogICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKICAgICAg
ICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE0ICsyNiwxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAKLSNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKLQorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEFycmF5QnVmZmVyOjp0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKQorYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQogewogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
a2VlcEFsaXZlKHRoaXMpOwogCkBAIC00MiwxMyArNDEsOSBAQCBib29sIEFycmF5QnVmZmVyOjp0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZl
clZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAg
aWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJs
ZSA9IGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzTmV1dGVyYWJsZSA9ICFtX3BpbkNvdW50Owog
Ci0gICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSkKKyAgICBpZiAoaXNOZXV0ZXJhYmxlKQog
ICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7CkBAIC01NiwzNiArNTEsMTMgQEAgYm9vbCBBcnJh
eUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIHdoaWxlIChtX2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZl
clZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50
KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRl
cmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJl
ZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZJbmNv
bWluZ1JlZmVyZW5jZXMoKTsgaS0tOykgeworICAgICAgICBKU0FycmF5QnVmZmVyVmlldyogdmll
dyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihpbmNvbWluZ1JlZmVyZW5jZUF0
KGkpKTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5uZXV0ZXIoKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJy
YXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2
aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7
Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9
IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpy
ZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2
aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXct
Pm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3
LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmll
dy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9m
aXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3
LT5tX25leHRWaWV3ID0gMDsKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwogCi19CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCkBAIC0yNiwxNSArMjYsMTcgQEAKICNpZm5kZWYgQXJyYXlCdWZmZXJfaAogI2RlZmlu
ZSBBcnJheUJ1ZmZlcl9oCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CitjbGFzcyBK
U0FycmF5QnVmZmVyOwogCiBjbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKQEAgLTQ1LDcgKzQ3LDcgQEAgcHVi
bGljOgogICAgIHsgfQogCiAgICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0KKyAg
ICAKICAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9CiAKQEAgLTg2LDEyICs4OCwxMyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7CiB9OwogCi1jbGFzcyBBcnJh
eUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CitjbGFzcyBBcnJheUJ1
ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewogcHVibGlj
OgogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7CiAgICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7CisgICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogCiAgICAgLy8gT25seSBmb3IgdXNlIGJ5IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgogICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKQEAgLTk5LDE0ICsxMDIsMTYgQEAg
cHVibGljOgogICAgIGlubGluZSB2b2lkKiBkYXRhKCk7CiAgICAgaW5saW5lIGNvbnN0IHZvaWQq
IGRhdGEoKSBjb25zdDsKICAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0Owor
ICAgIAorICAgIGlubGluZSBzaXplX3QgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3Q7CiAK
ICAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKICAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgdm9pZCBwaW4oKTsKKyAgICBpbmxpbmUg
dm9pZCB1bnBpbigpOwogCi0gICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOwotICAg
IHZvaWQgcmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLQotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJl
ZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQogCiAgICAgfkFycmF5QnVmZmVyKCkg
eyB9CkBAIC0xMTksOCArMTI0LDExIEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGNs
YW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsKICAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZh
bHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKIAorICAgIHVuc2lnbmVkIG1fcGluQ291
bnQ7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVy
VmlldyogbV9maXJzdFZpZXc7CisKK3B1YmxpYzoKKyAgICBXZWFrPEpTQXJyYXlCdWZmZXI+IG1f
d3JhcHBlcjsKIH07CiAKIGludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxl
ZnQsIGludCByaWdodCkKQEAgLTE1OSw2ICsxNjcsMTIgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OmNyZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKIH0KIAorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpLCBi
eXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRlKGNvbnRlbnRzKTsKK30KKwogUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1cm4gY3Jl
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRv
bnRJbml0aWFsaXplKTsKQEAgLTE3NCw3ICsxODgsNyBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlCiB9CiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCisgICAgOiBtX3Bp
bkNvdW50KDApCiB7CiAgICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7CiB9CkBAIC0x
OTQsNiArMjA4LDExIEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QK
ICAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwogfQogCitzaXplX3QgQXJyYXlC
dWZmZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemVv
ZihBcnJheUJ1ZmZlcikgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVMZW5ndGgoKSk7Cit9CisK
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGlu
dCBlbmQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwg
Y2xhbXBJbmRleChlbmQpKTsKQEAgLTIxOCwxNSArMjM3LDIzIEBAIHVuc2lnbmVkIEFycmF5QnVm
ZmVyOjpjbGFtcEluZGV4KGludCBpbmQKICAgICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwg
Y3VycmVudExlbmd0aCk7CiB9CiAKK3ZvaWQgQXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9w
aW5Db3VudCsrOworfQorCit2b2lkIEFycmF5QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5D
b3VudC0tOworfQorCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29u
dGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYg
cmVzdWx0KQogewotICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRv
dGFsIHNpemUuCi0gICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0
aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCi0gICAgLy8gYW5kIHdpbGwgZmFpbCBp
ZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCi0gICAg
Ly8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIC8v
IERvIG5vdCBhbGxvdyAzMS1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCiAgICAgaWYg
KG51bUVsZW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRz
ICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMg
IT0gZWxlbWVudEJ5dGVTaXplKSB7CisgICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50
cyAhPSBlbGVtZW50Qnl0ZVNpemUKKyAgICAgICAgICAgIHx8IHRvdGFsU2l6ZSA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKICAg
ICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0yNTQsNiArMjgxLDYgQEAgQXJyYXlCdWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVy
Q29udGVudAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIHVzaW5nIEpTQzo6QXJyYXlCdWZmZXI7Ci11
c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVudHM7CiAKICNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDM2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0g
ICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUp
Ci0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX3ByZXZWaWV3KDApCi0gICAgLCBtX25l
eHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldygKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKKyAgICAg
ICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0
cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNzID0g
bV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRl
T2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZp
ZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7Ci0g
ICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKKyAg
ICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKIH0KIAot
dm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0
TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9m
ZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0gbV9pc05ldXRlcmFibGUpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7CisgICAgCisgICAgaWYgKCFtX2J1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmbGFnKQorICAgICAgICBtX2J1
ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5waW4oKTsKIH0KIAot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKIAogI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpA
QCAtMzcsNjAgKzM3LDUwIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJyYXlCdWZmZXJW
aWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJsaWM6Ci0gICAg
ZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0g
ICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlw
ZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAg
ICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmll
dwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOworICBw
dWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwog
CisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9i
dWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAgICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05l
dXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
OwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CisgICAgICAg
IGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJu
IG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0
CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmlydHVhbCB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxlKGJv
b2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICB2b2lkIHNldE5ldXRlcmFi
bGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+QXJyYXlC
dWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlC
dWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0
ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdl
Qnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5k
TGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCog
b2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8vIEhlbHBlciB0byB2ZXJpZnkgdGhh
dCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwogICAgIC8vIHdpdGhpbiBy
YW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2ZXJpZnlT
dWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAgICAgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNpemVvZihUKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMSwxMSArOTEsMjYgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CisgICAgCisgIHByb3RlY3RlZDoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJW
aWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAg
IGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNl
dCk7CisKKyAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBi
b29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxl
bmd0aCk7CisKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3Ro
KGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVu
Z3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMgZnJv
bSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJlciBv
ZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZpZXcuCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwg
dW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1lbnRzKQorICAgIHN0YXRpYyB2b2lk
IGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJy
YXlCeXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgKm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkICpudW1FbGVtZW50cykKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG1heE9m
ZnNldCA9IChVSU5UX01BWCAtIGFycmF5Qnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7CiAgICAgICAg
IGlmICgqb2Zmc2V0ID4gbWF4T2Zmc2V0KSB7CkBAIC0xMTksMTkgKzEyNCwxNSBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgICpudW1FbGVtZW50cyA9IHN0ZDo6bWluKHJlbWFpbmluZ0VsZW1lbnRzLCAq
bnVtRWxlbWVudHMpOwogICAgIH0KIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZv
aWQgbmV1dGVyKCk7Ci0KICAgICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBBcnJheUJ1
ZmZlcidzIHN0b3JhZ2UsIHBsdXMgdGhlIGJ5dGUgb2Zmc2V0LgogICAgIHZvaWQqIG1fYmFzZUFk
ZHJlc3M7CiAKICAgICB1bnNpZ25lZCBtX2J5dGVPZmZzZXQgOiAzMTsKICAgICBib29sIG1faXNO
ZXV0ZXJhYmxlIDogMTsKIAotcHJpdmF0ZToKKyAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QXJyYXlCdWZmZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBBcnJh
eUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3
OwogfTsKIAogYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiBh
cnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKQEAgLTE3Niw3ICsxNzcsOCBAQCBib29sIEFycmF5
QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBp
bnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBs
ZW5ndGgpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGlu
dCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCog
bGVuZ3RoKQogewogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZp
c2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owogc3RydWN0IEhhc2hUYWJs
ZTsKIAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3LDEyIEBAIHN0cnVjdCBNZXRo
b2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JG
dW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYpOwogICAgIEdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgKCpTbG93RG93
bkFuZFdhc3RlTWVtb3J5KShKU0FycmF5QnVmZmVyVmlldyopOworICAgIFNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeTsKKyAgICAKKyAgICB0eXBlZGVmIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0FycmF5QnVmZmVy
VmlldyopOworICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBsOwogfTsKIAog
I2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBAIC0xMzksNiArMTQ2LDgg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6cHV0RGlyZWN0Vmly
dHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwKKyAgICAgICAgJkNsYXNz
TmFtZTo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRU
eXBlZEFycmF5SW1wbCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3Jh
Z2VUeXBlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGluZyB0aGUgbGlzdC4KICNkZWZpbmUgSlND
X0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwKICAgICBtYWNy
byhBcnJheSkgXAorICAgIG1hY3JvKEFycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQm9vbGVhbikg
XAogICAgIG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTYsOSBA
QAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8o
YmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAg
ICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhi
eXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsNiArMTE2LDcg
QEAKICAgICBtYWNybyhwcm9wZXJ0eUlzRW51bWVyYWJsZSkgXAogICAgIG1hY3JvKHByb3RvdHlw
ZSkgXAogICAgIG1hY3JvKHNldCkgXAorICAgIG1hY3JvKHNsaWNlKSBcCiAgICAgbWFjcm8oc291
cmNlKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHN0YWNrKSBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAx
NTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcDoxNTM3
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKworbmFt
ZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3VuaW9uIFZhbHVlIHsKKyAgICBUIGRh
dGE7CisgICAgY2hhciBieXRlc1tzaXplb2YoVCldOworfTsKKworfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7CisgICAgaWYgKCFidWZmZXIuZ2V0KCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgp
OworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKK3sKKyAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZE9mZnNldChieXRlT2Zmc2V0KTsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKKyAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3Ro
OworICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2Fm
ZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KSk7Cit9CisKK0RhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCisgICAgOiBBcnJh
eUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVM
ZW5ndGgpCit7Cit9CisKK3N0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVu
ZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwor
I2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9p
ZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKK3sKKyAgICBjaGFyIHRlbXAgPSAqcDsKKyAg
ICAqcCA9ICpxOworICAgICpxID0gdGVtcDsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9y
MTZCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKK30KKworc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAg
KyAzKTsKKyAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKK30KKworc3RhdGljIHZvaWQgZmxp
cEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCit7CisgICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKKyAg
ICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKKyAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsK
KyAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKK30KKworc3RhdGljIHZvaWQgZmxpcEJ5dGVz
SWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKK3sK
KyAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQorICAgICAgICByZXR1cm47
CisKKyAgICBzd2l0Y2ggKHNpemUpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgZmxpcEJ5dGVzRm9y
MTZCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBmbGlw
Qnl0ZXNGb3IzMkJpdHModmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDg6CisgICAg
ICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
K3sKKyAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgZG8g
bm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBh
IGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQg
bG9hZHMuCisgICAgVmFsdWU8VD4gdmFsdWU7CisgICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2Yo
VCkpOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRs
ZUVuZGlhbik7CisgICAgcmV0dXJuIHZhbHVlLmRhdGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+Cit2b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYmV5b25k
UmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKKyAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRo
ZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hp
dGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCisgICAgVmFsdWU8
VD4gdGVtcFZhbHVlOworICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7CisgICAgZmxpcEJ5dGVz
SWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7CisgICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRl
bXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKK30KKworaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBn
ZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKK30KKwordWludDhfdCBEYXRh
Vmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKK30K
KworaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGlu
dDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1aW50MTZfdCBEYXRh
Vmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9m
ZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2ludDMyX3QgRGF0YVZpZXc6OmdldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKwordWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0
dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQor
CitmbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8Zmxv
YXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCitkb3VibGUgRGF0YVZpZXc6
OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXRE
YXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0
YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMp
OworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7
Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxv
YXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBz
ZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisK
K3ZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0
YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9p
ZCBEYXRhVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwor
ICAgIG1fYnl0ZUxlbmd0aCA9IDA7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDM5ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVu
aW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsK
LQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFW
aWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0g
ICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVh
dGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmll
dzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRP
ZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQo
KSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAogRGF0YVZpZXc6
OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIs
IGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM0LDExIEBAIERhdGFWaWV3OjpEYXRhVmlldyhQYXNz
UmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJv
b2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBsaXR0
bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0K
LWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIgdGVt
cCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBm
bGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEpOwot
fQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2Fw
Qnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1zdGF0
aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwg
cCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhwICsg
MiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMgdm9p
ZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxl
RW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBm
bGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0g
ICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6OmdldERh
dGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAg
ICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdv
dWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0
IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUu
Ynl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZz
ZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVv
ZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNl
dCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQg
dG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJy
b3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4K
LSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAg
ICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5k
aWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0
ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0YVZp
ZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi11
aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPERh
dGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKIHsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0K
LQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8
dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERh
dGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9m
ZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
ZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3Vi
bGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1
ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZz
ZXQsIGJ5dGVMZW5ndGgpKTsKIH0KIAotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBB
cnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Cit9IC8v
IG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlIDxydW50aW1lL0Fy
cmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgRGF0YVZp
ZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwgdW5z
aWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25zdCB7
IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwgZmFs
c2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MTZfdCBnZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQx
NihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAg
aW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDMyX3Qg
Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OyB9CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGRvdWJsZSBn
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBkb3VibGUgZ2V0Rmxv
YXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0
SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWlu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lk
IHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0MzIo
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZsb2F0MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJs
ZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1
ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbmV1
dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBieXRl
T2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBieXRl
T2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsK
K307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGF0YVZpZXdfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNzYgKzI2LDMzIEBACiAjaWZuZGVmIERhdGFWaWV3X2gKICNkZWZpbmUgRGF0YVZpZXdf
aAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CituYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoK
KyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50LCBpbnQp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQxNl90IGdl
dFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
Z2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZfdCBnZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAg
aW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGZh
bHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBnZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9h
dDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
ZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGRvdWJs
ZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJ
bnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQg
c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDE2KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQot
ICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0
RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNl
dCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZz
ZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZUxlbmd0
aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CiAgICAgfQogCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiBwcml2YXRlOgotICAgIERhdGFWaWV3
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wg
YmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNl
dCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0
aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQg
Ynl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KICAg
ICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZpZXdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKQEAgLTI3LDgxICsyNiw5IEBACiAjaWZuZGVmIEZsb2F0MzJBcnJheV9oCiAjZGVmaW5lIEZs
b2F0MzJBcnJheV9oCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDMyQXJyYXkg
OiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoY29uc3QgZmxv
YXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVz
ZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwot
ICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdp
dGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQz
MkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2lu
ZyBUeXBlZEFycmF5QmFzZTxmbG9hdD46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlwZWRBcnJh
eUJhc2U8ZmxvYXQ+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZh
bHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3
VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0MzJBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAv
LyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xh
c3MgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IEZsb2F0MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUoY29uc3QgZmxvYXQq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZs
b2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBG
bG9hdDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQz
MkFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDMyQXJyYXk6OkZsb2F0MzJBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGZsb2F0PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxl
bmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6c3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVu
Z3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1w
bDxGbG9hdDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0MzJBcnJheTsKIAogI2Vu
ZGlmIC8vIEZsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSw5OCArMTAsMjUgQEAK
ICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCiAjaWZuZGVmIEZsb2F0NjRBcnJheV9oCiAjZGVmaW5lIEZsb2F0NjRBcnJheV9oCiAKLSNp
bmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDY0QXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJh
eUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZs
b2F0NjRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtu
b3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVy
biB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZp
cnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNl
PGRvdWJsZT46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6
bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAKLSAgICAvLyBNYWtl
IGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9h
dDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShjb25zdCBkb3VibGUqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJs
ZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZs
b2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8RmxvYXQ2
NEFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDY0QXJyYXk6OkZsb2F0NjRBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxl
bmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6c3Vi
YXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUlt
cGw8RmxvYXQ2NEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisj
aW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpGbG9hdDY0QXJyYXk7CiAKICNl
bmRpZiAvLyBGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNk
ZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVi
bGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVy
aWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoY29uc3QgdHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihiYXNl
QWRkcmVzcygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0KEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
ZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIHNldFJhbmdlKGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc2V0UmFuZ2VJbXBsKAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZGF0YSksCisgICAgICAgICAgICBkYXRhTGVuZ3RoICogc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICAgICAgb2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2UodW5zaWdu
ZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHplcm9SYW5n
ZUltcGwob2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLCBsZW5ndGggKiBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHpl
cm9GaWxsKCkgeyB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOyB9CisgICAgCisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxlbmd0aCgpICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIH0KKwor
ICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgdGhp
cy0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gZGF0YSgpW2luZGV4XTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgdGhpcy0+
bGVuZ3RoKCkpOworICAgICAgICBkYXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRpdmUodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3RoCisgICAg
ICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBv
dmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7CisgICAgfQor
ICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJheShpbnQg
c3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgVHlwZWRB
cnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6
dHlwZVZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2VuZXJpY1R5cGVkQXJyYXlWaWV3
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUg
IkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogQXJyYXlCdWZmZXJWaWV3
KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5n
dGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9
IGNyZWF0ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0
aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBw
YXNzZWRCdWZmZXI7CisgICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQor
eworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJyYXlCdWZmZXI6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZl
ciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQ
dHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
UGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKHN0YXJ0LCBlbmQsIHRoaXMtPmxlbmd0aCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKKyAgICBj
bGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlcigpLCBieXRlT2Zm
c2V0KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIG9m
ZnNldCwgbGVuZ3RoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZl
cjsKIGNsYXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNz
IFN0cnVjdHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1Ymxp
Y0xlbmd0aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNl
dFB1YmxpY0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGgg
PSBhdXhXb3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1
cm4gdS50eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlC
dWZmZXIqIGJ1ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAg
ICAgc3RhdGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAg
IHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0
ZXJmbHkpIC0gMTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVp
bnQzMl90IHB1YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRz
IG9uIHRoZSBhcnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMg
YmVpbmcgdGhlIHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAg
ICAgICAgdWludDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVk
IHByb3BlcnR5IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRz
IG9uIHRoaXMsIGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBidWZmZXI7CisgICAgICAg
IH0gdHlwZWRBcnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc3ICsyNiw5IEBACiAj
aWZuZGVmIEludDhBcnJheV9oCiAjZGVmaW5lIEludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1
ZmZlcjsKLQotY2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8
aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDhBcnJheT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAg
ICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLQotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50
OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1Q
YXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29u
c3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4
QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDhBcnJheT4o
bGVuZ3RoKTsKLX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0K
LQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50OEFycmF5PihzdGFy
dCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMu
aCIKIAogdXNpbmcgSlNDOjpJbnQ4QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCkBAIC0yNiw3NyArMjYsOSBAQAogI2lmbmRlZiBJbnQxNkFycmF5X2gKICNkZWZpbmUg
SW50MTZBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50MTZBcnJheSA6
IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShjb25z
dCBpbnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkg
YmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQu
IERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3Jp
cHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1
c2luZyBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8
SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlw
ZUludDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MTZBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZy
aWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50
MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQx
Nl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50
MTZBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDE2QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
bGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0
aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQx
NkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAi
VHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpJbnQxNkFycmF5OwogCiAjZW5kaWYgLy8gSW50
MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFy
cmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
ICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQog
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzQgKzI2LDkgQEAKICNpZm5kZWYgSW50MzJBcnJh
eV9oCiAjZGVmaW5lIEludDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJBcnJheSA6IHB1YmxpYyBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IGludCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJy
YXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBp
cyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCBy
ZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGlu
ZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJh
c2U8aW50Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0
KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGlubGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3Ig
dmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxp
bnQ+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8
SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFy
cmF5OjpjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYXJyYXksIGxlbmd0
aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJB
cnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMy
QXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPElu
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMyQXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVu
Z3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPElu
dDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBJ
bnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29u
c3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIi
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIp
fTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1w
bCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRC
dWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7
CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIo
dm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0
ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsKK30KKworYm9vbCBKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIo
dGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgp
LT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2
b2lkIEpTQXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICByZWplY3QoZXhlYywg
c2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkg
YXJyYXkgYnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQor
eworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHku
Iik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZl
cio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KTsKKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpT
QXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0
dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAorICAgIEFycmF5
QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBBcnJheUJ1ZmZlciogbV9p
bXBsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZv
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5jdGlvbiIsICZC
YXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJv
dG90eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
JnNfaW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBh
cmd1bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQo
MCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOwor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisg
ICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAg
ICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3Ry
dWN0dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29u
c3RydWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQor
eworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZm
ZXI7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZl
cjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25z
dHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUg
Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclBy
b3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUg
PSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5
QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11
c3QgYmUgYW4gYXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAg
CisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxz
ZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+
c2xpY2UoYmVnaW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2Jh
bE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZm
ZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUs
IG5ld0J1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0gewor
ICAgICJBcnJheUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgRG9u
dEVudW0sIDIpOworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5QnVmZmVyUHJv
dG90eXBlOjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhlYXAp
KQorICAgICAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHBy
b3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4g
cHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVf
aAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBK
U0FycmF5QnVmZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3Rh
dGljIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19p
bmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9
IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpD
b25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUs
CisgICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVu
Z3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9u
LgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5n
dGgsIGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFn
ZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9t
b2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBp
ZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBz
dGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFz
V29yZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5
cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlmICghdHJ5RmFzdENh
bGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0
aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19j
YXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0
KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVjdG9yKHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCisgICAgLCBt
X2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAg
IEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFy
cmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pT
QXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNv
bnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250
ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAs
IG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkp
Cit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsK
KyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdmVy
c2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFs
aXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAg
ICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0
T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
b2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+
Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAg
ICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29u
dHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmll
dzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90
eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAorICAgICAgICAgICAg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90Lmlz
U3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJy
YXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6
cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCiti
b29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3
Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJv
dywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4i
KTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wg
SlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVP
ZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
dWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVs
ZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVu
Z3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVm
b3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAg
ICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBh
cnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJh
eS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJh
c2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwg
bW9kZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3Zl
cnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJy
YXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQor
ICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBz
ZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9m
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1w
bGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3Jl
LXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUg
dXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZm
ZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3
LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVz
dCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhh
dmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0
IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YK
Ky8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9m
IG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBu
b3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBt
dWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxl
LCBkZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKwor
Ly8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhv
dyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5n
IHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1z
cGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgewor
ICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMg
dG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZh
c3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5
IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAg
Ly8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0
b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNs
b3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8g
YSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92
ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkK
KyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5h
bGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8v
IEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4
aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0
aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZp
ZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0
b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRB
cnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0
ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZm
ZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5
QnVmZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFu
ZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBC
dXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdh
eXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFz
cydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0
IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmll
dyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNp
emVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3Qg
bGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVu
Z3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAg
ICAgICYgfihzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAg
ICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07
CisgICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0dXJlKiwg
dWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRpb25Nb2Rl
ID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAg
ICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAK
KyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zdHJ1Y3R1cmU7IH0K
KyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9k
ZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0
dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xl
bmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkq
IG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBD
b25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAg
IAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsK
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIs
IG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEg
aW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25z
dCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7CisgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigpOworICAg
IAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX21v
ZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisK
K3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJf
dCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAo
bV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyKiBKU0Fy
cmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZO
ZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFy
cmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNB
cnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgpLT5nZXRU
eXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6
Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWduZWQgSlNB
cnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVm
dWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkg
fHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkp
OworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0
YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2luY2x1ZGUg
IkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1IEBAIGJv
b2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJW
aWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVm
ZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYgKzM3LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhlY1N0YXRl
OworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAt
MTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0
dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCiAg
ICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFn
ZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUg
VHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoKIAogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorCisjaW5j
bHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNsdWRl
ICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3Iiwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisK
K0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250
ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyogSlNEYXRh
Vmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlT
dWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7CisgICAg
ICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29u
c3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZpZXcqIHJl
c3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXc+KHZt
LmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3
OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQor
eworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitK
U0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5z
aWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWdu
ZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3Ojpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9udEVudW0gfCBSZWFkT25seSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0Fy
cmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisK
K1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1w
bChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIERhdGFWaWV3Ojpj
cmVhdGUoCisgICAgICAgIHRoaXNPYmplY3QtPmJ1ZmZlcigpLCB0aGlzT2JqZWN0LT5ieXRlT2Zm
c2V0KCksIHRoaXNPYmplY3QtPm1fbGVuZ3RoKTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3
OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
CisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3
X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5
QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNl
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCisgICAgLy8gRHVtbXkg
bWV0aG9kcywgd2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2UgYXJlIGp1c3QgaW4gcGxh
Y2UgdG8KKyAgICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gd2UgZG8g
ZWxzZXdoZXJlLgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTRGF0
YVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBl
ZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJy
YXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBn
ZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworICAgIAorcHVibGljOgorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0
IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rh
dGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJv
dG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIK
KyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAi
VHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6OnNfaW5m
byA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBFeGVjU3Rh
dGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3UHJv
dG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oCitA
YmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90
b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0
VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMiAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMyICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0Rmxv
YXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDggICAgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50MTYg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
K3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmlld1Byb3RvdHlw
ZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRh
Vmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90b3R5cGUodm0s
IHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0
dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4
ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUq
PihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0
YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNG
dW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRh
dGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwK
KyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmll
dyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFy
Z3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNl
dCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgw
KS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBs
aXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVF
bmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFW
aWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICB0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsg
Ynl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFu
KGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWND
YXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAg
IAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCB0d28g
YXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOworICAgIAorICAgIHVuc2ln
bmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9
IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAo
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50
KCkgPj0gMykgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgyKS50b0Jv
b2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRz
IGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4o
bGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAgIAor
ICAgICpyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpID0gdmFsdWU7Cisg
ICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhl
Yyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPElu
dDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50MTZBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRE
YXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50OEFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERh
dGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhl
Yyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2luY2x1
ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgiCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2Rl
ZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNl
OworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSop
OworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYs
IFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3Rv
dHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9h
dDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRmxvYXQz
MkFycmF5X2gKKyNkZWZpbmUgSlNGbG9hdDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0NjRBcnJheV9oCisjZGVmaW5lIEpTRmxvYXQ2
NEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxv
YXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZp
bmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIg
cmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBK
YXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAw
KTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBT
dHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAv
LyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBM
CisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEg
dG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFr
ZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQg
c29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMu
IFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAor
Ly8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRh
dGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8g
aXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMg
dG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8v
IHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwg
aW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBj
b250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBz
aG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBh
biBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhf
dCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVk
ZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZl
KGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAg
ICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0
YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9E
b3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFz
cyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENv
bnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlVW5pbml0
aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0
YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1w
bCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJl
KiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBl
PiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3Qg
Ynl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAg
fQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nl
c3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xp
Z2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2Fu
U2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1f
bGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGdldEluZGV4
UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
IDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRp
dmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldElu
ZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
ZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgdHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0
eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShp
LCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElu
ZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUganNWYWx1ZSkK
KyAgICB7CisgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0
b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05h
dGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VRdWlja2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAg
ICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVj
ayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAg
ICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVy
bnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9u
LgorICAgIGJvb2wgdmFsaWRhdGVSYW5nZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWws
IGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAgYm9vbCBzZXRXaXRoU3BlY2lmaWNUeXBlKEV4ZWNT
dGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9y
OyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAgLy8gdGhlbiBpdCB3aWxsIGhhdmUgdGhyb3duIGFu
IGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNf
RVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBjb25z
dCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFwdG9yOjp0eXBlVmFs
dWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
KyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSk7CisKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lk
IGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisg
ICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1vdmVzIGRhdGEg
aW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQgdGhpcyBuZXZl
ciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24g
eworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0
ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCog
cHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVj
dFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXNfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19o
CisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
ZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMyksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0
dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgJnNfaW5mbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5
VmlldyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikp
OworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUoCisgICAgICAgICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAg
CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5
QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvVUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMy
KGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAl
IFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWlu
dXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4i
KSk7CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQp
IC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnVmZmVyLCBv
ZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9y
IHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0
IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBB
bm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5Lgor
ICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRo
YXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVj
dCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkg
eworICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPj0gMikgeworICAgICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9V
SW50MzIoZXhlYyk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0Ns
YXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHQtPnNldChleGVjLCBvYmpl
Y3QsIG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGgg
aXMgbmVnYXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpj
cmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPFZpZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYg
Y29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNv
bnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25z
dHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5
cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxs
RGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47Cisg
ICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gK
KyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFy
cmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAor
ICAgIFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0s
IGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZt
KCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwor
ICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAg
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVj
LT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgp
LCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQg
Y29udGV4dCgKKyAgICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dDo6RG9u
dEluaXRpYWxpemUpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJl
c3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4
ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3
Ojp2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdl
IG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlv
bkNvbnRleHQgY29udGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBs
KQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1w
bC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAgUGFzc1JlZlB0cjx0eXBlbmFt
ZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9i
amVjdC0+dm0oKSwgc3RydWN0dXJlLCBpbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFu
Z2UoCisgICAgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBpZiAoY2FuQWNjZXNzUmFuZ2VRdWlja2x5KG9mZnNldCwgbGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBv
dXQgb2YgYm91bmRzIikpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldFdpdGhTcGVjaWZpY1R5cGUoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBPdGhlclR5cGUqIG90aGVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICAvLyBIYW5kbGUgdGhlIGhpbGFyaW91cyBjYXNlOiB0aGUgYWN0IG9mIGdl
dHRpbmcgdGhlIGxlbmd0aCBjb3VsZCBoYXZlIHJlc3VsdGVkCisgICAgLy8gaW4gbmV1dGVyaW5n
LiBXZWxsLCBuby4gVGhhdCdsbCBuZXZlciBoYXBwZW4gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUK
KyAgICAvLyBzaWRlLWVmZmVjdHMgb24gZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgdHlwZWQgYXJy
YXkuIEJ1dCBwcmVkaWN0aW5nIHdoZXJlIHRoZXJlCisgICAgLy8gYXJlLCBvciBhcmVuJ3QsIHNp
ZGUtZWZmZWN0cyBpcyBhIGZvb2wncyBnYW1lIHNvIHdlIHJlc29ydCB0byB0aGlzIGNoZWFwCisg
ICAgLy8gY2hlY2suIFdvcnN0IGNhc2UsIGlmIHdlJ3JlIHdyb25nLCBwZW9wbGUgc3RhcnQgc2Vl
aW5nIGxlc3MgdGhpbmdzIGdldCBjb3BpZWQKKyAgICAvLyBidXQgd2Ugd29uJ3QgaGF2ZSBhIHNl
Y3VyaXR5IHZ1bG5lcmFiaWxpdHkuCisgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhl
ci0+bGVuZ3RoKCkpOworICAgIAorICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQs
IGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXItPmxl
bmd0aCgpICE9IGxlbmd0aCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIkxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRs
eS4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsg
aSwgb3RoZXItPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBDbGFzc0lu
Zm8qIGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZh
c3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisg
ICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0
aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVSYW5n
ZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBtZW1jcHkodHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVk
VmVjdG9yKCksIG90aGVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAg
Y2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywg
anNDYXN0PEpTSW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2Ug
VHlwZUludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nh
c3Q8SlNJbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlw
ZUludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVp
bnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNV
aW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4
Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTVWludDhDbGFtcGVkQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpz
Q2FzdDxKU1VpbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2Ug
VHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpz
Q2FzdDxKU0Zsb2F0MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2Fz
ZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OiB7CisgICAgICAgIGlmICgh
dmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0
IG5vdywgd2UgZG9uJ3QuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmRleFF1aWNrbHkoZXhlYywgb2Zmc2V0ICsg
aSwgb2JqZWN0LT5nZXQoZXhlYywgaSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1i
ZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRl
TGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShp
bmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVy
KHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRJ
bmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBG
aXJlZm94IGFwcGVhcnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUg
bGVuZ3RoIHByb3BlcnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwg
ZG8gdGhlIHNhbWUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBpbmRleCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFRoaXMgaXMgbWF0
Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwgYXR0
ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVz
IG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5kcy4K
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAg
ICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5k
ZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5n
IHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAor
ICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0
ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAg
IHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhf
QVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAg
IGlmICghdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdl
dEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBN
QVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhy
b3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAg
ICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSks
IHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8v
IFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBp
ZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9v
bCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAg
ICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAg
ICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5
TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVj
dC0+bV9sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgU3Ry
aW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KGNlbGwpOworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7Cisg
ICAgY2FzZSBGYXN0VHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlz
T2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3Rvciwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRF
eHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBj
ZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JD
b3B5VG9rZW4KKyAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0
LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92
ZWN0b3I7CisgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFj
ZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xk
VmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV92
ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRo
aXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpjb3B5QmFja2lu
Z1N0b3JlKHRoaXNPYmplY3QsIHZpc2l0b3IsIHRva2VuKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dE
b3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVz
ZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAg
Ly8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5
IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVj
ZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2Ug
aGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0
byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5z
ZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0
ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3Rs
eSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJh
eSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2Vy
dGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZh
c3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBv
ZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2Fz
ZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6
ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2Vy
IGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFk
KiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisg
ICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFX
aGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0lu
ZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpOworICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0
ZXJmbHksIHdoYXQgb3VyIG9mZnNldCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9t
b2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZs
eSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2Ug
YWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhp
c09iamVjdC0+bV9idXR0ZXJmbHkgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdI
ZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdy
b3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFw
LT52bSgpLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwg
MCk7CisgICAgfQorCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAg
c3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5Ogor
ICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9y
LCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBk
b2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAg
ICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0Mg
dG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVy
LgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0
LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2Jq
ZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVy
LmdldCgpKTsKKyAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAg
IHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRS
ZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBv
YmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiBBZGFwdG9y
OjpWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAgICB0aGlzT2JqZWN0LT5idWZmZXIoKSwgdGhpc09i
amVjdC0+Ynl0ZU9mZnNldCgpLCB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAgICBFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaAor
I2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaAorCisjaW5j
bHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhl
Yy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBi
ZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRD
b3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBK
U09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJn
dW1lbnQoMCkpOworICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQg
YmUgYW4gb2JqZWN0LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IH0gZWxzZQorICAgICAgICBvZmZzZXQgPSAwOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHNvdXJjZUFycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0aGlzT2Jq
ZWN0LT5zZXQoZXhlYywgc291cmNlQXJyYXksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1N1YmFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9u
KiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAg
ICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUg
YSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50
MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbmQgPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0
aCBoZXJlOyBsYXRlciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAg
dW5zaWduZWQgdGhpc0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8v
IEhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2lu
IDwgMCkKKyAgICAgICAgYmVnaW4gPSB0aGlzTGVuZ3RoIC0gYmVnaW47CisgICAgaWYgKGVuZCA8
IDApCisgICAgICAgIGVuZCA9IHRoaXNMZW5ndGggLSBlbmQ7CisgICAgCisgICAgLy8gQ2xhbXAg
dGhlIGluZGljZXMgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuCisgICAgQVNTRVJUKGJlZ2lu
ID49IDApOworICAgIEFTU0VSVChlbmQgPj0gMCk7CisgICAgYmVnaW4gPSBzdGQ6Om1pbihiZWdp
biwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc0xlbmd0aCkpOworICAgIGVuZCA9IHN0ZDo6bWlu
KGVuZCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4odGhpc0xlbmd0aCkpOworICAgIAorICAgIC8vIENs
YW1wIGVuZCB0byBiZWdpbi4KKyAgICBlbmQgPSBzdGQ6Om1heChiZWdpbiwgZW5kKTsKKyAgICAK
KyAgICBBU1NFUlQoZW5kID49IGJlZ2luKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBiZWdpbjsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBlbmQgLSBiZWdpbjsKKyAgICAKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGFycmF5QnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQobGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVk
QXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAor
ICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMs
IHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQo
KSArIG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCAqIFZp
ZXdDbGFzczo6ZWxlbWVudFNpemUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbigK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisgICAgCisgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAKKyAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jU2V0PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKKyAgICBKU0NfTkFUSVZF
X0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jU3ViYXJyYXk8Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3
Q2xhc3M+KgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3Jl
YXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPihleGVjLT52bSgpLmhlYXApKQorICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
OworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitT
dHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNy
ZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAg
ICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE1ICs0OSwyNiBAQAogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NhbGxi
YWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1
ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmFtZVNj
b3BlLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpAQCAtMjE0LDYgKzIyNSwz
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHJvdG9B
Y2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0
aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQ
cm90b3R5cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51
bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAg
IG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgCisgICAg
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
SlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0lu
dDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVp
bnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDE2QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnBy
b3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDMy
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0
NjQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNE
YXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTSW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNVaW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0uc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJv
dG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMild
LnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQz
MildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUZsb2F0NjQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVEYXRhVmlldyldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRh
Vmlldzo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbmFtZVNjb3Bl
U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV9hY3RpdmF0aW9uU3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwpAQCAtMzE4LDYgKzM1MywyNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuSlNPTiwgSlNPTk9i
amVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLk1hdGgsIE1hdGhPYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwg
RG9udEVudW0pOworICAgIAorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgp
KTsKKyAgICBGaXhlZEFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1CRVJfT0ZfVFlQRURfQVJS
QVlfVFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKHRoaXMsIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7Cisg
ICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50
MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgp
XSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50OEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlw
ZS5nZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5k
ZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUodGhpcywgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhD
bGFtcGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVp
bnQxNildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50MTZB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0u
cHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0
b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGUodGhpcywgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMyQXJyYXkiKTsKKyAgICB0
eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpTRmxvYXQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSwg
IkZsb2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
RmxvYXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxv
YXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDY0KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVEYXRhVmlldyldID0gSlNEYXRhVmlld0NvbnN0cnVjdG9y
OjpjcmVhdGUodGhpcywgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCksICJEYXRhVmlldyIpOworICAg
IAorICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJheUJ1ZmZlciwgYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIAorICAgIGZvciAodW5zaWduZWQgdHlwZWRB
cnJheUluZGV4ID0gTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0eXBlZEFycmF5SW5kZXgt
LTspIHsKKyAgICAgICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5kZXhdLnByb3RvdHlwZS0+
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0s
IERvbnRFbnVtKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRl
eF0tPm5hbWUoZXhlYykpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0s
IERvbnRFbnVtKTsKKyAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFs
c1tdID0gewogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oZXhlYy0+cHJvcGVydHlOYW1lcygp
Lk5hTiwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNs
dWRlICJOdW1iZXJQcm90b3R5cGUuaCIKQEAgLTE2Niw2ICsxNjcsMTYgQEAgcHJvdGVjdGVkOgog
ICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKKyAgICAKKyAgICBX
cml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3RvdHlw
ZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJlOwor
ICAgIAorICAgIHN0cnVjdCBUeXBlZEFycmF5RGF0YSB7CisgICAgICAgIFdyaXRlQmFycmllcjxK
U09iamVjdD4gcHJvdG90eXBlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1
Y3R1cmU7CisgICAgfTsKKyAgICAKKyAgICBGaXhlZEFycmF5PFR5cGVkQXJyYXlEYXRhLCBOVU1C
RVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IG1fdHlwZWRBcnJheXM7CiAgICAgICAgIAogICAgIHZv
aWQqIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNpYWwgcG9p
bnRlcnMgdXNlZCBieSB0aGUgTExJbnQgYW5kIEpJVC4KIApAQCAtMzMwLDYgKzM0MSwxNCBAQCBw
dWJsaWM6CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSBjb25z
dCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0
cnVjdHVyZSogcmVnRXhwU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBTdHJ1Y3R1
cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZSogYXJyYXlCdWZmZXJQcm90b3R5cGUoKSBjb25zdCB7IHJldHVy
biBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpOyB9CisgICAgU3RydWN0dXJlKiBhcnJheUJ1
ZmZlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuZ2V0
KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZWRBcnJh
eVR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgodHlwZSldLnN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CiAKICAgICB2b2lkKiBhY3R1YWxQ
b2ludGVyRm9yKFNwZWNpYWw6OlBvaW50ZXIgcG9pbnRlcikKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU0ludDhBcnJheV9oCisjZGVmaW5lIEpTSW50OEFycmF5X2gKKwor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUg
SlNJbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8v
IEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50
MzJBcnJheV9oCisjZGVmaW5lIEpTSW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwK
KyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQ29uc3RydWN0b3I6OnNf
aW5mbyA9IHsiRnVuY3Rpb24iLCAmSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpCYXNlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0NvbnN0cnVjdG9yKX0KKworTUFL
RV9TX0lORk8oSW50OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lO
Rk8oSW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVp
bnQ4Q2xhbXBlZEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZP
KFVpbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhG
bG9hdDY0QXJyYXkpOworTUFLRV9TX0lORk8oRGF0YVZpZXcpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0cnVjdG9y
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MTZBcnJh
eT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpT
VWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQx
NkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNvbnN0cnVj
dG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQz
MkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0
YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlQcm90b3R5cGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwK
KyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBlOjpzX2lu
Zm8gPSB7I3R5cGUgIlByb3RvdHlwZSIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJ
bnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFy
cmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVk
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJy
YXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJh
eSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90b3R5cGVz
X2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheVByb3Rv
dHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQzMkFy
cmF5PiBKU0ludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBK
U1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBlOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5PiBKU1Vp
bnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRB
cnJheVByb3RvdHlwZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAi
Q29weVZpc2l0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9T
X0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNB
cnJheTo6c19pbmZvID0geyN0eXBlICJBcnJheSIsICZKUyMjdHlwZSMjQXJyYXk6OkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQXJyYXkpfQorCitNQUtF
X1NfSU5GTyhJbnQ4KTsKK01BS0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsK
K01BS0VfU19JTkZPKFVpbnQ4KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1Nf
SU5GTyhVaW50MTYpOworTUFLRV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIp
OworTUFLRV9TX0lORk8oRmxvYXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNU
eXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0
b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQ4QXJyYXlfaAorI2RlZmluZSBKU1VpbnQ4
QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50
OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENs
YW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNVaW50OENsYW1wZWRBcnJheV9oCisjZGVmaW5lIEpTVWludDhDbGFtcGVkQXJy
YXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OENs
YW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWlu
dDE2QXJyYXlfaAorI2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQzMkFycmF5X2gKKyNkZWZpbmUgSlNVaW50MzJBcnJh
eV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQzMkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw5IEBACiAjZGVmaW5lIE9wZXJh
dGlvbnNfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTUHJv
eHkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJQYXNzV2Vhay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJy
YXlCdWZmZXIqIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2
ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZlciogYnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciog
cmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52bSgpLCBnbG9i
YWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5t
X3dyYXBwZXIgPSBQYXNzV2VhazxKU0FycmF5QnVmZmVyPihyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVyIHVz
ZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVmZmVy
cyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAor
Ly8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3Rh
bmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBKU0Fy
cmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8K
Ky8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFmdGVy
IG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRo
ZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBo
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAgIHJldHVybiBoYXNJ
bmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzVHlwZWRW
aWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOwotICAgIH0K
KyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2RlZmluZSBTdHJ1
Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIApAQCAt
MTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25j
CiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3Jl
ZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3Qg
SlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghaXNUeXBl
ZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZmZXJWaWV3
Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGluZSBib29s
IFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9y
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheUFkYXB0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5
QWRhcHRvcnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRvcnNfaAorCisjaW5jbHVkZSAiSlND
SlNWYWx1ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1l
IFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAor
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdU
eXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOwor
ICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7
CisKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZl
KHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVl
LmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVj
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPAor
ICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBlbmFtZSBKU1Zp
ZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0cnVjdCBGbG9h
dFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlwZTsKKyAgICB0eXBl
ZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3VHlwZUFyZyBKU1Zp
ZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSB0eXBl
VmFsdWVBcmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
UU5hTik7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSW50OEFk
YXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0IEludDMyQWRhcHRvcjsKK3N0cnVj
dCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvcjsKK3N0cnVjdCBVaW50
MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3I7
CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNs
YXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQz
MkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpT
VWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVk
QWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7
CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50OF90
LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4geyB9Oworc3RydWN0IEludDE2QWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MTZfdCwgSW50MTZBcnJheSwgSlNJ
bnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJbnQzMkFkYXB0b3IgOiBJbnRlZ3Jh
bFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJyYXksIEpTSW50MzJBcnJheSwgVHlw
ZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRh
cHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJyYXksIFR5cGVVaW50OD4geyB9Owor
c3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQxNl90
LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVpbnQxNj4geyB9Oworc3RydWN0IFVp
bnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQzMl90LCBVaW50MzJB
cnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9Oworc3RydWN0IEZsb2F0MzJBZGFw
dG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwgRmxvYXQzMkFycmF5LCBKU0Zsb2F0
MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvciA6IEZsb2F0
VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJyYXksIEpTRmxvYXQ2NEFycmF5LCBU
eXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVWludDhDbGFtcGVkQWRhcHRvciB7CisgICAgdHlw
ZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50OENsYW1wZWRBcnJheSBWaWV3VHlw
ZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkgSlNWaWV3VHlwZTsKKyAgICBzdGF0
aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAg
ICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFt
cCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1i
ZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMy
KCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAg
cmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRv
RG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludDhf
dCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAg
ICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUp
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJh
eUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29u
dHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5
cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJy
YXlDb250cm9sbGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29u
dHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9i
amVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxU
eXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIFR5cGVkQXJyYXlDb250cm9sbGVy
KCk7CisgICAgdmlydHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0
dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCos
IEFycmF5QnVmZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTUzOTUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0b3JfaAot
I2RlZmluZSBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1
Y3QgQ2xhc3NJbmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFycmF5Tm9u
ZSwKLSAgICBUeXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAgVHlwZWRB
cnJheUludDMyLAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWludDhDbGFt
cGVkLAotICAgIFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwKLSAgICBU
eXBlZEFycmF5RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3RydWN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0gICAgICAg
IDogbV9jbGFzc0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAgICAgICAg
LCBtX2xlbmd0aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0
b3IoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0LCBzaXpl
X3QgbGVuZ3RoT2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKLSAgICAg
ICAgLCBtX3N0b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xlbmd0aE9m
ZnNldChsZW5ndGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1f
Y2xhc3NJbmZvOwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90IG1fbGVu
Z3RoT2Zmc2V0OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAgU2lnbmVk
VHlwZWRBcnJheSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVkQXJyYXlS
b3VuZGluZyB7Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5nCi19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFy
cmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRB
cnJheToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0
dXJuICZKU0ludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBy
ZXR1cm4gJkpTVWludDhBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICAgICAgcmV0dXJuICZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm87CisgICAgY2FzZSBU
eXBlSW50MTY6CisgICAgICAgIHJldHVybiAmSlNJbnQxNkFycmF5OjpzX2luZm87CisgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gJkpTVWludDE2QXJyYXk6OnNfaW5mbzsKKyAg
ICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU0ludDMyQXJyYXk6OnNfaW5mbzsK
KyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiAmSlNVaW50MzJBcnJheTo6c19p
bmZvOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiAmSlNGbG9hdDMyQXJy
YXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gJkpTRmxv
YXQ2NEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVy
biAmSlNEYXRhVmlldzo6c19pbmZvOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgb3V0LnByaW50KCJOb3RUeXBl
ZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICBv
dXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQx
NjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQzMiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVp
bnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MTYiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBl
VWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDY0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRGF0
YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJh
eVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0g
VHlwZWRBcnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAg
VHlwZVVpbnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5
cGVVaW50MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0
MzIsCisgICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5V
TUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVk
IHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRB
cnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVk
QXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXpl
X3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlw
ZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgor
ICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2Ug
VHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
ODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBl
IHR5cGUpOworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNh
c2UgVHlwZVVpbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2Ug
VHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJy
YXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoK
KyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IGlzQ2xhbXBlZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5
cGVVaW50OENsYW1wZWQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RG
IHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlw
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19oCisjZGVmaW5lIFR5
cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1
ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5
OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJB
cnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9h
dDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4g
RmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJy
YXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXku
aAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRlZiBVaW50OEFycmF5X2gK
ICNkZWZpbmUgVWludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWlu
dDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBi
ZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRv
IEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7
Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBh
c3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gVHlwZVVpbnQ4OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIGlubGluZSBVaW50OEFy
cmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNz
LgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NS
ZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZShj
b25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OEFy
cmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhB
cnJheT4gVWludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVk
PFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQ4QXJyYXk6OlVpbnQ4QXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi06IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6
c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwg
bGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PFVpbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4QXJyYXk7CiAKICNlbmRpZiAv
LyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMiwxMTIgKzEwLDI1IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAogI2lmbmRlZiBVaW50OENsYW1wZWRBcnJheV9oCiAj
ZGVmaW5lIFVpbnQ4Q2xhbXBlZEFycmF5X2gKIAotI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgVWlu
dDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNy
ZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5
IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJl
Y3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQgdG8gcG90ZW50aWFsbHkg
Y2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMgY3JlYXRlZCB1bmluaXRp
YWxpemVkIC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhzCi0gICAgLy8gemVybyB0
aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJvRmlsbCgpOwotCi0gICAg
dXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBpbmxpbmUgdm9pZCBzZXQo
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
aW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3Ig
dmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1
aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBl
ZEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKGNv
bnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGFycmF5LCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJh
eTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0
aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhDbGFtcGVkQXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6Onplcm9GaWxsKCkKLXsK
LSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVpbnQ4Q2xhbXBlZEFycmF5
OjpzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBpZiAoaW5kZXggPj0g
bV9sZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwg
dmFsdWUgPCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBpZiAodmFsdWUgPiAyNTUp
Ci0gICAgICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1
aW50OF90PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRBcnJheTo6VWludDhDbGFt
cGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBl
ZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5
KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVp
bnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4oc3RhcnQsIGVuZCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5n
IEpTQzo6VWludDhDbGFtcGVkQXJyYXk7CiAKICNlbmRpZiAvLyBVaW50OENsYW1wZWRBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAko
cmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWludDE2QXJyYXlfaAog
I2RlZmluZSBVaW50MTZBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWlu
dDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4gewotcHVi
bGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBjcmVhdGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0gICAg
dXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsKLQotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlVWludDE2OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgVWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRv
IHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0
ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWlu
dDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJy
YXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZB
cnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQot
VWludDE2QXJyYXk6OlVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTx1aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50MTZBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKIHVzaW5nIEpTQzo6VWludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBVaW50MTZBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAko
cmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMy
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWludDMyQXJyYXlfaAog
I2RlZmluZSBVaW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgVWlu
dDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4gewotcHVi
bGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5
PiBjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0gICAg
dXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsKLQotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxp
bmUgVWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRv
IHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0
ZTxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWlu
dDMyQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJy
YXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJB
cnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQot
VWludDMyQXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50MzJBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKIHVzaW5nIEpTQzo6VWludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBVaW50MzJBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgiCiAjaW5jbHVkZSAi
UmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNpbmNsdWRlICJTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIlN0cm9uZ0lu
bGluZXMuaCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheUNv
bnN0cnVjdG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3RvdHlwZVRhYmxlOwog
ZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29u
c3QgSGFzaFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0YVZpZXdU
YWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhh
c2hUYWJsZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZXJy
b3JQcm90b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9yVGFibGUoZmFzdE5l
dzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGFycmF5UHJv
dG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90b3R5cGVUYWJsZSkp
CiAgICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6Ym9v
bGVhblByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAsIGVycm9yUHJvdG90
eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5cGVUYWJsZSkpCkBA
IC0yNTgsNiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0gYWRvcHRQdHIobmV3
IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAvLyBJbml0aWFsaXpl
IHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBWTSBpbml0aWFsaXph
dGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5cGVkQXJyYXlDb250
cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQog
CiBWTTo6flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAgICBhcnJheVByb3Rv
dHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0b3JUYWJsZS0+ZGVs
ZXRlVGFibGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7Cisg
ICAgZGF0YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFibGUtPmRlbGV0ZVRh
YmxlKCk7CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZXJy
b3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICszMTQsNyBAQCBWTTo6
flZNKCkKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlDb25zdHJ1
Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5
UHJvdG90eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
Ym9vbGVhblByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRh
YmxlKj4oZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+
KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIlNtYWxs
U3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9y
cy5oIgotI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtS
YW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY5LDEz
ICs2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNoZTsKICAgICBjbGFz
cyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0gICAgY2xhc3MgRmxv
YXQzMkFycmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFzcyBIYW5kbGVTdGFj
azsKICAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50OEFycmF5OwotICAg
IGNsYXNzIEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAgICBjbGFzcyBJbnRl
cnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFzcyBKU09iamVjdDsK
QEAgLTkzLDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShSRUdFWFBfVFJB
Q0lORykKICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBVaW50OEFycmF5Owot
ICAgIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQxNkFycmF5OwotICAg
IGNsYXNzIFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogICAgIGNs
YXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hU
YWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBib29s
ZWFuUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJs
ZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAgICAgIGNvbnN0IEhh
c2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
ZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7CiAgICAgICAgIE93
blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxlcjsKKyAgICAgICAg
UmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250cm9sbGVyOwogICAg
ICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVtcFBvaW50ZXJBbGxv
Y2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCkgeyBy
ZXR1cm4gbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51bWJlck9mTmV3U3Ry
aW5nc1RvSGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmluZ3NTaW5jZUxhc3RI
YXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAwOyB9CiAKLSNkZWZp
bmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6ZWRUeXBlKSBcCi0g
ICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBjYXBpdGFsaXpl
ZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIFwK
LSAgICAgICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNBcnJheURlc2NyaXB0
b3IubV9jbGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyA9
PSBkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8jI3R5cGUjI0FycmF5
RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VSVChtXyMjdHlwZSMj
QXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwKLSAgICAgICAgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRvcigpIGNvbnN0IHsg
QVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyByZXR1cm4gbV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1
bmN0aW9uKGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihp
bnQxNiwgSW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQzMiwg
SW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OCwgVWludDgp
OwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENsYW1wZWQsIFVpbnQ4
Q2xhbXBlZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQxNiwgVWlu
dDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDMyLCBVaW50MzIp
OwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMyLCBGbG9hdDMyKTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwgRmxvYXQ2NCk7Ci0j
dW5kZWYgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0gICAgICAgIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihUeXBlZEFycmF5VHlw
ZSB0eXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAgICAgICAgIHJldHVy
biAmaW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50
MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAg
ICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZp
bnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDg6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAg
ICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIHJldHVy
biAmdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlVaW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG1f
YXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNsdXNpdmVUaHJlYWQg
PT0gY3VycmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAgIE93blB0cjxDb2Rl
Q2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8U3RhY2tGcmFtZT4g
bV9leGNlcHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDhB
cnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MTZBcnJh
eURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50MzJBcnJheURl
c2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhBcnJheURlc2Ny
aXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhDbGFtcGVkQXJyYXlE
ZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQxNkFycmF5RGVz
Y3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MzJBcnJheURlc2Ny
aXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQzMkFycmF5RGVzY3Jp
cHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yOwogICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACis8PDw8PDw8IC5taW5lCisyMDEzLTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
LSBBZGRlZCB0aGUgbm90aW9uIG9mIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRoYXQgY2Fu
IGJlIG1hcmtlZCBEZWZlcnJlZCwKKyAgICAgICAgICB3aGljaCBpcyBsaWtlIGEgc3BlY2lhbC1w
dXJwb3NlIHVwcmVmLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBhIGNvbW1vbiBieXRlIGZs
aXBwZXIuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWRCYXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlOjppc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
OjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZEJhc2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZDo6c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3Vu
dGVkOjpEZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZD
b3VudGVkOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMu
aDogQWRkZWQuCisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToK
KyAgICAgICAgKFdURjo6ZmxpcEJ5dGVzKToKKworPT09PT09PQogMjAxMy0wOC0xMiAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIGlzTWFpblRo
cmVhZCBpbXBsZW1lbnRhdGlvbiB3aXRoIFVTRShXRUJfVEhSRUFEKQpAQCAtMTksNiArNTEsNyBA
QAogCiAgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG1pc3NpbmcgaGVhZGVyIGZp
bGUuCiAKKz4+Pj4+Pj4gLnIxNTM5NTAKIDIwMTMtMDgtMDkgIENocmlzdG9waGUgRHVtZXogIDxj
aC5kdW1lekBzaXNhLnNhbXN1bmcuY29tPgogCiAgICAgICAgIE1ha2UgYXRvYigpIHRocm93IGFu
IEludmFsaWRDaGFyYWN0ZXJFcnJvciBvbiBleGNlc3MgcGFkZGluZyBjaGFyYWN0ZXJzCkluZGV4
OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDggQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEw
IC8qIE5vTG9jay5oICovOyB9OworCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovOyB9OworCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBB
RCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9Owog
CQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAw
MDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAz
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBp
bGF0aW9uVGhyZWFkLmNwcCAqLzsgfTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8q
IE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhy
ZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MzAsNiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0
MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEy
M0ZGIC8qIERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYg
LyogRGVjb2Rlci5oICovLAorCQkJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJh
YmxlUmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1
ZS5oICovLAogCQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmgg
Ki8sCiAJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAq
LywKQEAgLTY0OCw2ICs2NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBG
aWxlUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBG
aWxlUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4
ZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMu
aCAqLywKIAkJCQlBOEE0NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJ
CUE4QTQ3MkE3MTUxQTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhC
OUQxNzMxODc5ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQs
NiArMTAwMCw3IEBACiAJCQkJQThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5k
b21Tb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAv
KiBPd25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdB
RTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNG
QzE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNG
RDE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNGRTE1MUE4MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwNTcsNiArMTA2NCw3IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8q
IFRlbXBvcmFyeUNoYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAw
NDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRh
UHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
ZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2Uu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0
byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQu
IFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlv
bmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNp
ZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2lu
Zywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0
eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9y
bWFsSW5jcmVtZW50ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgewor
ICAgICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkg
PT0gMTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEo
bV9yZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IERlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJ
bmNyZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7Cisg
ICAgICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1f
cmVmQ291bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9
IGRlZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBtX3JlZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZD
b3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBw
dWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAg
ICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBzZXRJc0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElz
RGVmZXJyZWRCYXNlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAg
fkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9GbGlwQnl0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZsaXBC
eXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBib29sIG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxl
RW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJl
dHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOworI2Vu
ZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBmbGlwQnl0ZXModWludDE2X3QgdmFsdWUpCit7Cisg
ICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MzJfdCBmbGlwQnl0ZXModWludDMyX3QgdmFs
dWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMGZmKSA8PCAyNCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZm
MDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMCkgPj4gMjQpOworfQor
CitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVzKHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVy
biAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAwMGZmbGx1KSA8PCA1NikKKyAgICAgICAgfCAoKHZh
bHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1KSA8PCA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYg
MHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAw
MDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMGZmMDAw
MDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZmMDAwMDAwMDAwMGxs
dSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDAwMDAwMDAwMGxsdSkgPj4g
NDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDAwMDAwMDAwMGxsdSkgPj4gNTYpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzKFQgdmFsdWUpCit7
CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IGlmIChzaXplb2YodmFsdWUpID09IDIpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
VCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQxNl90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAg
ICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53
b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIGlmIChzaXplb2Yo
dmFsdWUpID09IDQpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsK
KyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmln
aW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAg
ICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIGlmIChzaXplb2YodmFsdWUpID09IDgp
IHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAg
IHVpbnQ2NF90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVl
OworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUu
b3JpZ2luYWw7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6bmVlZFRv
RmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKKworI2VuZGlm
IC8vIEZsaXBCeXRlc19oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2
aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMzgyLDMxICszODIsMTkgQEAgQklORElOR19JRExTID0gXAogICAgICQo
V2ViQ29yZSkvaHRtbC9UaW1lUmFuZ2VzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZhbGlk
aXR5U3RhdGUuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVm9pZENhbGxiYWNrLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9DYW52YXNHcmFkaWVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUGF0dGVybi5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUHJv
eHkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0RPTVBhdGguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0Zsb2F0MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxv
YXQ2NEFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL09FU1RleHR1cmVGbG9hdC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVmVy
dGV4QXJyYXlPYmplY3QuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQxNkFy
cmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwgXAot
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwgXAotICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0pTQXJyYXlCdWZmZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyX2gKKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyLmg+CisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNU
eXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pTVHlwZWRBcnJheXNfaAorI2RlZmluZSBXZWJDb3Jl
X0ZXRF9KU1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1R5cGVkQXJy
YXlzLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVm
IFdlYkNvcmVfRldEX1R5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
VHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJy
YXlDb250cm9sbGVyLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVk
QXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDEyIEBACiAjZGVmaW5lIFJlYWx0aW1l
QW5hbHlzZXJfaAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgRmxvYXQzMkFycmF5Owot
Y2xhc3MgVWludDhBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRp
b0J1czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQyLDYgKzI0Miw4
IEBACiAJCTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUz
NDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLzsgfTsK
IAkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBD
REJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMDkw
ODdGMTQ0NEZEQjIwMDAyODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEg
LyogU2Nyb2xsYmFyVGhlbWUuY3BwICovOyB9OworCQkwRjA5OUQwODE3Qjk2OEExMDBGRjg0Qjkg
LyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjA5OUQwOTE3Qjk2OEExMDBG
Rjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyog
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEw
MEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVy
U2VsZWN0aW9uSW5mby5oICovOyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxh
dGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICov
OyB9OwogCQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYz
RjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04
MjgsMTEgKzgzMCw3IEBACiAJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVy
TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5o
ICovOyB9OwogCQkyRTk0RjQzQjExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5
MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIw
N0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVh
ZGVyLmggKi87IH07Ci0JCTJFOTdDQ0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEy
OTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4
MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9
OwogCQkyRTk3Q0NGNzEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNB
NDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5
M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFW
aWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZF
MTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEy
NjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAv
KiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAw
RUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJl
c291cmNlSGFuZGxlLmNwcCAqLzsgfTsKIAkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJs
b2JSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5o
ICovOyB9OwpAQCAtMTI4OCw4ICsxMjg2LDYgQEAKIAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFE
IC8qIEFycmF5VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QjM3NjBCMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJ
CTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmgg
Ki87IH07Ci0JCTQ5QzdCOTk1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5o
ICovOyB9OwogCQk0OUM3Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0
OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFBy
b2dyYW0uY3BwICovOyB9OwpAQCAtMTM1MCwyMiArMTM0Niw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0OUVDRUI2RjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3
OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUw
NzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmggKi87IH07Ci0JCTQ5RUVDRjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJB
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0
OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICov
OyB9OwotCQk0OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0
MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5j
cHAgKi87IH07Ci0JCTQ5RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFy
cmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNF
RkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAq
LzsgfTsKLQkJNDlFRUNGMEIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFy
cmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFC
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIg
LyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovOyB9OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlG
QUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0Mx
MDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJ
CTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlF
RUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBA
IC0xODI3LDggKzE4MDcsNiBAQAogCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5z
aW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3Bw
ICovOyB9OwogCQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdM
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJB
NTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJCTZFNjdE
MkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07
Ci0JCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAw
QTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERC
MTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVG
bG9hdC5jcHAgKi87IH07CiAJCTZFQkYwRTQ5MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJl
RmxvYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QkYwRTQ2MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVC
RjBFNTQxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTUyMTJBODkyOTgwMERCMTcw
OSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAgKi87IH07CkBAIC0yNTg5LDcgKzI1NjcsNiBAQAogCQk4
NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3
NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9OwogCQk4NjFDMkVBNDEzRkI0RkREMDAw
NjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVu
dExvYWRUaW1pbmcuY3BwICovOyB9OwogCQk4NjFDMkVBNjEzRkI0RkZGMDAwNjJBQkIgLyogUmVz
b3VyY2VMb2FkVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcu
Y3BwICovOyB9OwotCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZp
ZXdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICov
OyB9OwogCQk4NjUxMkVERTE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRp
bWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAg
Ki87IH07CiAJCTg2NTEyRURGMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICov
OyB9OwogCQk4NkJBNzY2RTE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJBNzY2RDE2
NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgKi87IH07CkBAIC0yNzAzLDgg
KzI2ODAsNiBAQAogCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsg
fTsKIAkJOTAwMTc4ODAxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAx
Nzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLzsg
fTsKIAkJOTAwMTc4ODExMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4
N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9Owot
CQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMzAxNEMzMzVD
RDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsgfTsKLQkJOTEwODlEMzMxNEMz
MzYwNTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8q
IEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VF
ODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9
OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNDY1NSw3ICs0NjMwLDYgQEAKIAkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2
IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZS5oICovOyB9OwogCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyog
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUuY3BwICovOyB9OwogCQlCQzI3NUI3OTExQzVEMUMzMDBDOTIwNkMgLyog
SlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzI3NUI3ODExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1
c3RvbS5jcHAgKi87IH07Ci0JCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVm
ZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAq
LzsgfTsKIAkJQkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjk5MzVDMTdB
MURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi87IH07CiAJCUJDMkNCRjRFMTQw
RjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyog
SlNXZWJHTENvbnRleHRFdmVudC5oICovOyB9OwogCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUg
LyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRl
eHRFdmVudC5jcHAgKi87IH07CkBAIC02NDgwLDYgKzY0NTQsOCBAQAogCQkwQzNGMUY1OTEwQzg4
NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZv
cm1Mb2NhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI1MTBD
REJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDcxN0I5
NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJl
bmRlclNlbGVjdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU2VsZWN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYz
RDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3Jt
Q0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBD
REUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2Ev
bWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzEzNCwxMiArNzExMCw3IEBACiAJCTJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxl
UmVhZGVyTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZp
bGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTk0RjQzOTExOTIwN0RBMDBC
N0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRmlsZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJF
OTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhVmlldy5jcHA7IHBhdGggPSBjYW52YXMv
RGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFODEyOTM5
Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRGF0YVZpZXcuaDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IERhdGFWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9EYXRhVmll
dy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1
QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRGF0YVZpZXdDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NFNkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDAxMjFGMDNF
MzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFu
ZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY1NCw4ICs3NjI1LDYgQEAKIAkJ
NDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4
MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNJbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMRnJhbWVidWZmZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNXZWJHTEZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4
ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzY2OSw3ICs3NjM4LDYgQEAKIAkJNDlDN0I5QTgxMDQyRDMyRTAwMDlE
NDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkdMQnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJH
TEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEJ1ZmZlci5o
OyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gV2ViR0xCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVy
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlE
NDQ3IC8qIEludDhBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50OEFycmF5Lmlk
bDsgcGF0aCA9IGNhbnZhcy9JbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsg
cGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRo
ID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlDN0I5QjAxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzcyNSwz
MCArNzY5Myw2IEBACiAJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9uLmg7
IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmNw
cDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuaDsg
cGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUVFQ0RDOTEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBBcnJheUJ1ZmZlclZpZXcuaWRsOyBwYXRoID0gY2FudmFz
L0FycmF5QnVmZmVyVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
RENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gQXJyYXlCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZs
b2F0MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQzMkFycmF5LmlkbDsg
cGF0aCA9IGNhbnZhcy9GbG9hdDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0REMjEwNTAzQzIzMDAwOTlGQUIgLyogSW50MzJBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gSW50MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50MzJBcnJheS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZB
QiAvKiBJbnQxNkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQxNkFycmF5Lmlk
bDsgcGF0aCA9IGNhbnZhcy9JbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFVpbnQ4QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4QXJyYXku
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlG
QUIgLyogVWludDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQzMkFycmF5
LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDE2QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQx
NkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDE2QXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlG
QUIgLyogSlNJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTVWludDhBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDMyQXJyYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Vp
bnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZFMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTVWludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjFBMTA1MDcy
RjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNEMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04MjM4LDkgKzgxODIsNiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4Rjcg
LyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRl
bnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNE
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4
QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJh
eS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhB
IC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJB
ODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNU
ZXh0dXJlRmxvYXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEy
QTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVG
bG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBE
QjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNU
ZXh0dXJlRmxvYXQuaWRsOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTc4LDcgKzg5MTksNiBAQAogCQk4NUZGMzE1OTBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjFDMkVBMzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2Fk
VGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50
TG9hZFRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNG
QjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlC
dWZmZXJWaWV3SGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURC
MTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0
MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2NTEyRUREMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291
cmNlVGltaW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxMTMsOSArOTA1Myw2
IEBACiAJCTkwMDE3NzNGMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVz
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsg
cGF0aCA9IGNhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0UxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkg
LyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyog
VWludDhDbGFtcGVkQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9
IGNhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMTM0Miw3ICsxMTI3OSw2IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVB
REZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMjc0QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMy
NzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBK
U0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJH
TENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdM
Q29udGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQw
RjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQwMjUsOCArMTM5NjEsNiBAQAogCQk0OTQ4NEZBRTEwMkNG
MDFFMDAxODdERDMgLyogY2FudmFzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRs
ICovLAotCQkJCTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRs
ICovLAogCQkJCTZFNEU5MUE3MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmli
dXRlcy5jcHAgKi8sCiAJCQkJNkU0RTkxQTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJNDk0ODRGQjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZh
c0dyYWRpZW50LmNwcCAqLywKQEAgLTE0MDQ3LDkgKzEzOTgxLDYgQEAKIAkJCQk0OTQ4NEZCRTEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0
OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0
RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAw
QzVDOEZGIC8qIERhdGFWaWV3LmggKi8sCi0JCQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8q
IERhdGFWaWV3LmlkbCAqLywKIAkJCQlGQjkxMzkyMDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0
aC5oICovLAogCQkJCUZCOTEzOTIxMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywK
IAkJCQlBMDI0NTc0RTE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApA
QCAtMTQwNTgsMTEgKzEzOTg5LDYgQEAKIAkJCQk3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyog
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1
MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5
NEQxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8s
Ci0JCQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0J
CQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJ
NDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIEludDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVD
REQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEw
NDJEMzJFMDAwOUQ0NDcgLyogSW50OEFycmF5LmlkbCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhG
MDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFE
M0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEy
RTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA3
NywxMCArMTQwMDMsNiBAQAogCQkJCTc3QTE3QTZFMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0
ZXhBcnJheU9iamVjdC5jcHAgKi8sCiAJCQkJNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9F
U1ZlcnRleEFycmF5T2JqZWN0LmggKi8sCiAJCQkJNzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8q
IE9FU1ZlcnRleEFycmF5T2JqZWN0LmlkbCAqLywKLQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlG
QUIgLyogVWludDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAv
KiBVaW50MzJBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVp
bnQ4QXJyYXkuaWRsICovLAotCQkJCTkxQTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENs
YW1wZWRBcnJheS5pZGwgKi8sCiAJCQkJQTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdM
QWN0aXZlSW5mby5oICovLAogCQkJCUE3RDIwRjNCMTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFj
dGl2ZUluZm8uaWRsICovLAogCQkJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1
ZmZlci5jcHAgKi8sCkBAIC0xNjY0NSwxMCArMTY1NjcsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJC
MDAwQjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCi0JCQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICov
LAotCQkJCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0J
CQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywK
LQkJCQk0OUVFQ0YxQTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywK
IAkJCQlCRThFRjAzRTE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJ
CQlCRThFRjAzRjE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4
RUYwNDAxNzFDOEZGOTAwOUI0OEMzIC8qIEpTQXVkaW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2
NjIsOCArMTY1ODAsNiBAQAogCQkJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQw
MDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZE
MTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNB
RDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICovLAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFG
NDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNwcCAqLywKIAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQy
NjUgLyogSlNET01Gb3JtRGF0YS5oICovLAogCQkJCUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAv
KiBKU0RPTVBhdGguY3BwICovLApAQCAtMTY2NzgsMTAgKzE2NTk0LDYgQEAKIAkJCQk2RUJGMEU3
NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgx
MTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8s
CiAJCQkJNzcyODY5ODIxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmggKi8sCi0JCQkJNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFy
cmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJy
YXkuaCAqLywKLQkJCQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXku
Y3BwICovLAotCQkJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5o
ICovLAogCQkJCUJDOTdFNDEwMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9u
LmNwcCAqLywKIAkJCQlCQzk3RTQxMTEwOTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVj
dGlvbi5oICovLAogCQkJCTFBNEEyREVCMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JF
bGVtZW50LmNwcCAqLywKQEAgLTE2ODM1LDEyICsxNjc0Nyw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2
ODI2OTAwRkFEQTc1IC8qIEpTSFRNTFZpZGVvRWxlbWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2
QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2
NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi8sCi0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTSW50MTZBcnJheS5oICovLAotCQkJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBK
U0ludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0lu
dDMyQXJyYXkuaCAqLywKLQkJCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuY3BwICovLAotCQkJCTQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5o
ICovLAogCQkJCUNEMjdGNkUyMTQ1NzY3NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5j
cHAgKi8sCiAJCQkJQ0QyN0Y2RTMxNDU3Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVy
LmggKi8sCiAJCQkJRTQ0NjE0MTAwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAg
Ki8sCkBAIC0xNjg3MywxNCArMTY3NzksNiBAQAogCQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3
NSAvKiBKU1RpbWVSYW5nZXMuaCAqLywKIAkJCQkwNzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyog
SlNUcmFja0V2ZW50LmNwcCAqLywKIAkJCQkwNzg0NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNU
cmFja0V2ZW50LmggKi8sCi0JCQkJNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2
QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFy
cmF5LmggKi8sCi0JCQkJNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXku
Y3BwICovLAotCQkJCTQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5Lmgg
Ki8sCi0JCQkJNDlFRUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8s
Ci0JCQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovLAotCQkJ
CTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywK
LQkJCQk5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICov
LAogCQkJCTE1Qzc3MDkyMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICov
LAogCQkJCTE1Qzc3MDkxMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywK
IAkJCQlCRThFRjA0NjE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAg
LTE4NzgwLDYgKzE4Njc4LDggQEAKIAkJCQlBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLywKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYg
LyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8sCiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4
MTdFIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuaCAqLywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBG
Rjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQw
NzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJ
CQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
ICovLAogCQkJCUUxQTY0M0YxMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9s
bGVyLmggKi8sCiAJCQkJRjM0NzQyRTYxMzQzNjM1MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERl
YnVnU2VydmVyLmNwcCAqLywKQEAgLTE4ODM1LDggKzE4NzM1LDYgQEAKIAkJQkM0RURFRjcwQzA4
RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJD
dXN0b20uY3BwICovLAotCQkJCTg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVm
ZmVyVmlld0hlbHBlci5oICovLAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0
dHJDdXN0b20uY3BwICovLAogCQkJCUNEREU2OTFEMTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlv
QnVmZmVyQ3VzdG9tLmNwcCAqLywKIAkJCQlGREVBQUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNB
dWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwICovLApAQCAtMjEzMjEsNyArMjEyMTksNiBA
QAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5z
ZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8q
IERhdGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0NFQjEyOTM5
Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NzMyQjBCMTM2
QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1
QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMTgzMCw2ICsyMTcyNyw3IEBACiAJCQkJODkzQzQ4MEYxMjQ4QkQzQTAwMkIz
RDg2IC8qIEZpbGVFbnRyeVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2QzgzMTIyQjhB
M0QwMDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREYzNjlGMTIy
Qzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjA5
OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUzQ0Q3MDAwQzc0RjkgLyogRmlsZUljb25Mb2Fk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJFMTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxl
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcg
LyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyMzksOSArMjIxMzcsNiBAQAogCQkJ
CTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0ExMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5h
bHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIg
LyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMUMxMDUwNzJGMzAw
MDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjI0M0Qw
MTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZl
ckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzAyLDcgKzIyMTk3LDYgQEAKIAkJCQkx
QUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5j
LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRh
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUQy
MTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFG
QjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjIzNzUsOCArMjIyNjksNiBAQAogCQkJCTg5ODc4NUIzMTIyQ0EyQTcwMDNBQUJE
QSAvKiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZEQTg0NEUx
MjI0QTA3MTAwNjBEMDA2IC8qIEpTRmlsZVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODkz
QzQ3QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBp
biBIZWFkZXJzICovLAotCQkJCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyN0IxNEVBQzA4NjAwOTBENzVFIC8qIEpT
Rm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJEQzAxNkI3RjM4RTAwQ0JBM0ZD
IC8qIEpTRm9udExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQUMxMkIwM0VFMTAw
M0E1ODNBIC8qIEpTR2Fpbk5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0NzcsOSArMjIzNjks
NiBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJN0EwRTc2REIxMEJGMDU5ODAwQTAyNzZFIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcxRjEwQzAwREIxMDBBMDI3NkUgLyog
SlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA3MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVD
RjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9h
cmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RjQ1NDMwRjdDM0I1RjAwRDdDMUZCIC8q
IEpTTGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI3MjksMTAgKzIyNjE4
LDYgQEAKIAkJCQlFMTdCNDkyMTE2QTlCOEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzUwRDVEMEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVX
YWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U1VJRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwQjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDkxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTEwODlE
MzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFBQTRGQUQyMTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNUM3NzA5MzEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRThFRjA0QjE3MUM5MDE0MDA5QjQ4QzMgLyogSlNW
aWRlb1RyYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzMyLDcgKzI0NjE3LDYgQEAKIAkJCQk5
N0JDNkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERP
TVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4
RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3MzJCMEExMzZBMTYxRDAw
NUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI1
MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1Mzg4LDkgKzI1MjcyLDYgQEAKIAkJCQkxQzgxQkEwOTBFOTczNDgzMDAy
NjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MThG
ODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGREExNUVDOTEyQjAzRjUwMDAzQTU4M0EgLyogSlNBbmFseXNlck5vZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyNzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpT
QXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMUIxMDUwNzJG
MzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMyRUQ2QkMwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGREExNUU5RDEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTI1NDcwLDcgKzI1MzUxLDYgQEAKIAkJCQkxQUU4MkY4RjBDQUFGQTlE
MDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDY5QTEx
OTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyRTk3Q0NGNzEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmll
d0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQg
LyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NTQzLDggKzI1NDIzLDYgQEAKIAkJCQk4OTg3
ODVGNDEyMkUxRUFDMDAzQUFCREEgLyogSlNGaWxlUmVhZGVyU3luYy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4OTg3ODVCMjEyMkNBMkE3MDAzQUFCREEgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODkzQzQ3QkIxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmls
ZVdyaXRlckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjAyMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RUJDNUVB
RjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjZEOUQyN0MxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGREExNUVBQjEyQjAzRUUxMDAzQTU4M0EgLyogSlNHYWluTm9kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGRTgwREE2MzBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjAzLDYgKzI1NDgxLDcgQEAKIAkJCQlBNjE0OEE3
ODEyRTQxRTNCMDA0NEE3ODQgLyogSlNIVE1MS2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUyQUIyMTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjIzMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxM
ZWdlbmRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMDk5RDA4MTdCOTY4QTEwMEZG
ODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFFMkFCMjUwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExJRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODBFN0IxMDBBMTlENjA2MDA3RkI4QzUgLyogSlNIVE1MTGlua0VsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBRDEzOUIxMjk1RDkyNjAwQUNBOTg5IC8qIEpT
SFRNTExpbmtFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2NTcsOSArMjU1
MzYsNiBAQAogCQkJCUYzMTYzOTZFMTMyOTQ4NzYwMEE2NDlDQiAvKiBKU0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTBFNzcxRTEwQzAwREIxMDBBMDI3NkUg
LyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E3NEVD
QkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDQxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
SW50MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNJbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1RkFFRDEwRENGRDkw
MTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQzVGQUVFNzBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tl
eWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTk0MSwxMCArMjU4MTcsNiBAQAog
CQkJCTFBNzUwRDVDMEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNV
SUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjBBMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA4
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQUFBNEZBRDMxNzVENUNCMzAwNzQzODczIC8qIEpTVUlSZXF1ZXN0RXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTVDNzcwOTQxMDBEM0NBODAwNUJBMjY3IC8qIEpT
VmFsaWRpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRThFRjA0QTE3MUM5MDE0MDA5
QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgSlNET01XcmFw
cGVyOwogY2xhc3MgU2NyaXB0Q29udHJvbGxlcjsKIAotdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBK
U0M6OldlYWs8SlNET01XcmFwcGVyPiA+IERPTU9iamVjdFdyYXBwZXJNYXA7Cit0eXBlZGVmIEhh
c2hNYXA8dm9pZCosIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiA+IERPTU9iamVjdFdyYXBwZXJN
YXA7CiB0eXBlZGVmIEpTQzo6V2Vha0dDTWFwPFN0cmluZ0ltcGwqLCBKU0M6OkpTU3RyaW5nLCBQ
dHJIYXNoPFN0cmluZ0ltcGwqPiA+IEpTU3RyaW5nQ2FjaGU7CiAKIGNsYXNzIERPTVdyYXBwZXJX
b3JsZCA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVdyYXBwZXJXb3JsZD4gewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEpTQzsKLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0KLSAgICBpbnQgbGVu
Z3RoID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCkKLSAgICAgICAgbGVu
Z3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsgLy8gTmFOLytpbmYvLWluZiBy
ZXR1cm5zIDAsIHRoaXMgaXMgaW50ZW5kZWQgYnkgV2ViSURMCi0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXI7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKQotICAgICAgICBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpLCAxKTsKLSAgICBp
ZiAoIWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3Vn
aCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2Jq
ZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5nZXQo
KSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmll
d0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNBcnJh
eUJ1ZmZlclZpZXdIZWxwZXJfaAotI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0K
LSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxs
RnJhbWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5QmFzZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0
b29MYXJnZVNpemUgPSAiU2l6ZSBpcyB0b28gbGFyZ2UgKG9yIGlzIG5lZ2F0aXZlKS4iOwotCi10
ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotYm9vbCBjb3B5VHlwZWRBcnJheUJ1ZmZlcihD
KiB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgs
IHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHNvdXJj
ZVR5cGUgPSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoc291cmNlVHlwZSAhPSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldyk7Ci0KLSAgICBpZiAodGFyZ2V0LT5nZXRUeXBlKCkg
PT0gc291cmNlVHlwZSkgewotICAgICAgICBpZiAoIXRhcmdldC0+c2V0KHN0YXRpY19jYXN0PEMq
Pihzb3VyY2UpLCBvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRhcmdldC0+Y2hlY2tJbmJvdW5kRGF0YShv
ZmZzZXQsIHNvdXJjZUxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRj
aCAoc291cmNlVHlwZSkgewotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50ODoKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlC
YXNlPHNpZ25lZCBjaGFyPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDg6Ci0gICAgY2FzZSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQs
IChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPiAqPihzb3VyY2Up
LT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpU
eXBlSW50MTY6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2Fz
dDxUeXBlZEFycmF5QmFzZTxzaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTY6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFz
ZTx1bnNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDMyOgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNl
dChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8aW50PiAqPihzb3Vy
Y2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3
OjpUeXBlVWludDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGlj
X2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQzMjoK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJy
YXlCYXNlPGZsb2F0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQ2NDoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQo
aSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4gKj4oc291
cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEMs
IHR5cGVuYW1lIFQ+Ci1ib29sIHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBDKiBpbXBsKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IGFycmF5ID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlm
ICghYXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5QnVmZmVyVmlldzo6
Vmlld1R5cGUgYXJyYXlUeXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICBpZiAoYXJyYXlUeXBl
ID09IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPT0gMikKLSAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+
Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKLQotICAgIGlmICghKGNvcHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGltcGwsIGFycmF5Lmdl
dCgpLCBsZW5ndGgsIG9mZnNldCkpKQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91dCBvZiByYW5nZS4iKSk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLUpTQzo6SlNWYWx1ZSBz
ZXRXZWJHTEFycmF5SGVscGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDKiBpbXBsKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNDOjp0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IGlmIChzZXRXZWJHTEFycmF5V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBUPihleGVjLCBpbXBs
KSkKLSAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0w8PkFycmF5IGFycmF5LCBbT3B0aW9uYWxd
IGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmlu
ZWQoKTsKLQotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAg
IC8vIHZvaWQgc2V0KGluIHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAgICAgSlNDOjpKU09iamVjdCogYXJyYXkgPSBKU0M6OmFz
T2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsK
LSAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAyKQotICAgICAgICAgICAgb2Zm
c2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICAgICAgdWludDMyX3Qg
bGVuZ3RoID0gYXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkudG9JbnQzMihleGVjKTsKLSAgICAgICAgaWYgKCFpbXBsLT5jaGVja0luYm91bmREYXRhKG9m
ZnNldCwgbGVuZ3RoKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgIGltcGwtPnNldChpICsg
b2Zmc2V0LCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpT
Qzo6dGhyb3dUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgYXJndW1lbnQiKTsKLX0KLQotLy8gVGVt
cGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNvbnN0cnVjdG9ycy4KLS8vIElmIHRoaXMg
cmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0aHJvd24gYSBKYXZhU2NyaXB0IGV4Y2Vw
dGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0
cnVjdEFycmF5QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc291cmNlID0gdG9BcnJheUJ1
ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghc291cmNlKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUgc291cmNlVHlwZSA9IHNv
dXJjZS0+Z2V0VHlwZSgpOwotICAgIGlmIChzb3VyY2VUeXBlID09IEFycmF5QnVmZmVyVmlldzo6
VHlwZURhdGFWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVpbnQzMl90IGxlbmd0aCA9
IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICBSZWZQdHI8Qz4gYXJyYXkgPSBD
OjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7
Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBpZiAoIShjb3B5VHlwZWRBcnJh
eUJ1ZmZlcjxDLCBUPihhcnJheS5nZXQoKSwgc291cmNlLmdldCgpLCBsZW5ndGgsIDApKSkgewot
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VT
aXplKSk7Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXk7
Ci19Ci0KLS8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlDb25zdHJ1Y3RvcnMu
Ci0vLyBJZiB0aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUgdGhyb3duIGEgSmF2
YVNjcmlwdCBleGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotUGFzc1Jl
ZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudChK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9
IHRvQXJyYXlCdWZmZXIoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghYnVmZmVyKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENv
dW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKLSAgICB1
bnNpZ25lZCBpbnQgbGVuZ3RoID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4g
MikKLSAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMikudG9VSW50MzIoZXhlYyk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpICUg
c2l6ZW9mKFQpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3Qg
YSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplLiIpKTsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9m
ZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgfQotICAgIFJlZlB0cjxDPiBhcnJheSA9IEM6OmNyZWF0
ZShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAg
cmV0dXJuIGFycmF5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotUGFzc1Jl
ZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgLy8gVGhlcmUgYXJlIDMgY29uc3RydWN0b3JzOgotICAgIC8vCi0gICAgLy8gIDEpIChp
biBpbnQgc2l6ZSkKLSAgICAvLyAgMikgKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwgW09wdGlvbmFs
XSBpbiBpbnQgb2Zmc2V0LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGludCBsZW5ndGgpCi0gICAg
Ly8gIDMpIChpbiBzZXF1ZW5jZTxUPikgLSBUaGlzIGVuZHMgdXAgYmVpbmcgYSBKUyAiYXJyYXkt
bGlrZSIgb2JqZWN0Ci0gICAgLy8gICAgCi0gICAgLy8gRm9yIHRoZSAwIGFyZ3MgY2FzZSwganVz
dCBjcmVhdGUgYSB6ZXJvLWxlbmd0aCB2aWV3LiBXZSBjb3VsZAotICAgIC8vIGNvbnNpZGVyIHJh
aXNpbmcgYSBTeW50YXhFcnJvciBmb3IgdGhpcyBjYXNlLCBidXQgbm90IGFsbAotICAgIC8vIEph
dmFTY3JpcHQgRE9NIGJpbmRpbmdzIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuICJuZXcKLSAgICAv
LyA8VHlwZT5BcnJheSgpIiBhbmQgd2hhdCBvY2N1cnMgd2hlbiBhIHByZXZpb3VzbHktY29uc3Ry
dWN0ZWQKLSAgICAvLyBBcnJheUJ1ZmZlclZpZXcgaXMgcmV0dXJuZWQgdG8gSmF2YVNjcmlwdDsg
ZS5nLiwgZnJvbQotICAgIC8vICJhcnJheS5zdWJzZXQoKSIuCi0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBDOjpjcmVhdGUoMCk7Ci0gICAgCi0gICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIEludmFsaWQgZmly
c3QgYXJndW1lbnQKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgIFJlZlB0cjxDPiB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5
QnVmZmVyQXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAgICAgIGlmICh2aWV3KQotICAgICAgICAg
ICAgcmV0dXJuIHZpZXc7Ci0gICAgCi0gICAgICAgIHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZl
clZpZXdXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAgICAgICBpZiAodmll
dykKLSAgICAgICAgICAgIHJldHVybiB2aWV3OwotCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIHNy
Y0FycmF5ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBs
ZW5ndGggPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgICAgICBpZiAoIWFycmF5KSB7Ci0gICAgICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7
Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1
ZSB2ID0gc3JjQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIGFycmF5LT5zZXQoaSwg
di50b051bWJlcihleGVjKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
IH0KLQotICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwot
ICAgIFJlZlB0cjxDPiByZXN1bHQ7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKQotICAgICAgICByZXN1
bHQgPSBDOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
dG9vTGFyZ2VTaXplKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIEpTVHlwZSwgdHlwZW5hbWUgV2ViQ29yZVR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIHRv
SlNBcnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFdlYkNvcmVUeXBlKiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3Qp
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotCi0gICAgaWYgKEpTRE9NV3JhcHBlciog
d3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBvYmplY3QpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFN
ZW1vcnlDb3N0KG9iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBl
cjxKU1R5cGU+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXJfaApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNSArMzEsMTkgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMu
aCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxo
ZWFwL1Nsb3RWaXNpdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8aGVh
cC9XZWFrSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxy
dW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9OdWxsUHRy
Lmg+CkBAIC0xMjgsNiArMTMyLDE2IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJl
dHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJl
PFdyYXBwZXJDbGFzcz4oZXhlYywgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKICAgICB9CiAKKyAgICBpbmxpbmUgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBK
U0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC0+dm0oKS0+bV90eXBlZEFycmF5Q29udHJv
bGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9p
ZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciopCisgICAgeworICAgICAgICByZXR1cm4gd29ybGQ7CisgICAgfQorCiAgICAgaW5saW5lIEpT
RE9NV3JhcHBlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lk
KikgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciosIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiwgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBwZXIqKSB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMTM5LDYgKzE1MywxMyBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgICAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7CiAgICAgfQogCisgICAgaW5s
aW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisgICAgeworICAgICAgICBp
ZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFNjcmlwdFdyYXBw
YWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoIXdv
cmxkLT5pc05vcm1hbCgpKQpAQCAtMTQ3LDYgKzE2OCwxNCBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIq
IGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCF3
b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZG9t
T2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIpCiAgICAgewogICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTU1LDIw
ICsxODQsMjAgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNET01XcmFw
cGVyKiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBk
b21PYmplY3QpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpK
U09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFz
cyogZG9tT2JqZWN0KQogICAgIHsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9
IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkpCisgICAgICAgIGlmIChK
U0M6OkpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9t
T2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gd29y
bGQtPm1fd3JhcHBlcnMuZ2V0KGRvbU9iamVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRv
bU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwogICAg
ICAgICB2b2lkKiBjb250ZXh0ID0gd3JhcHBlckNvbnRleHQod29ybGQsIGRvbU9iamVjdCk7CiAg
ICAgICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBw
ZXIsIG93bmVyLCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNDOjpQ
YXNzV2VhazxKU0RPTVdyYXBwZXI+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KTsK
KyAgICAgICAgSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0PiBwYXNzV2Vhayh3cmFwcGVyLCBv
d25lciwgY29udGV4dCk7CiAgICAgICAgIHdlYWtBZGQod29ybGQtPm1fd3JhcHBlcnMsICh2b2lk
Kilkb21PYmplY3QsIHBhc3NXZWFrKTsKICAgICB9CiAKQEAgLTE5NSw3ICsyMjQsNyBAQCBjbGFz
cyBET01TdHJpbmdMaXN0OwogICAgIHsKICAgICAgICAgaWYgKCFkb21PYmplY3QpCiAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQor
ICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3Vy
cmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBkb21PYmplY3QpOwogICAgIH0KQEAgLTMyMyw2ICszNTIsMTggQEAgY2xhc3MgRE9N
U3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKKyAgICBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAg
IGlmIChKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZ2V0RXhpc3RpbmdXcmFwcGVyPEpTQzo6SlNBcnJh
eUJ1ZmZlcj4oZXhlYywgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIGJ1ZmZlci0+cmVmKCk7CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciA9
IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJy
YXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAgICAgY2FjaGVXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgYnVmZmVyLCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFQ+IHB0cikKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRl
cnByZXRlci9DYWxsRnJhbWUuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1
ZGUgIkRPTU9iamVjdEhhc2hUYWJsZU1hcC5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCkBAIC03NSw2ICs3Niw3IEBAIGlubGluZSB2b2lkIGluaXROb3JtYWxXb3JsZENs
aWVudERhdGEoSlMKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3JlSlNDbGllbnREYXRh
ID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7CiAgICAgdm0tPmNsaWVudERhdGEgPSB3ZWJDb3Jl
SlNDbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgd2ViQ29yZUpT
Q2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKHZtLCB0
cnVlKTsKKyAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRp
b25zLmg+CisjaW5jbHVkZSA8aGVhcC9QYXNzV2Vhay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQoreworfQorV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkg
eyB9CisKK0pTQXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5
QnVmZmVyKiBuYXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oCisg
ICAgICAgIHRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSwgbmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0Fy
cmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxV
bmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgaWYgKCFqc0FycmF5QnVmZmVyLT5oYXNDdXN0
b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBcnJheUJ1ZmZlciog
cm9vdCA9IGpzQXJyYXlCdWZmZXItPmltcGwoKTsKKyAgICByZXR1cm4gdmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3Qocm9vdCk7Cit9CisKK3ZvaWQgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
OjpKU0FycmF5QnVmZmVyT3duZXI6OmZpbmFsaXplKAorICAgIEhhbmRsZTxVbmtub3duPiBoYW5k
bGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgSlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01X
cmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4
dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzQXJyYXlCdWZmZXItPmltcGwoKSwganNB
cnJheUJ1ZmZlcik7CisgICAganNBcnJheUJ1ZmZlci0+aW1wbCgpLT5kZXJlZigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyX2gKKyNkZWZpbmUgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUg
PHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgSlNDOjpUeXBlZEFy
cmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
KCk7CisgICAgdmlydHVhbCB+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisg
ICAgdmlydHVhbCBKU0M6OkpTQXJyYXlCdWZmZXIqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOworICAgIAorICAgIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoKSB7IHJldHVybiAmbV9vd25lcjsgfQorCitwcml2
YXRlOgorICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7CisgICAgfTsKKworICAgIEpTQXJy
YXlCdWZmZXJPd25lciBtX293bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMjEgKzE4MCwyMiBAQCBzdWIgRm9yQWxsUGFyZW50
cwogCiAgICAgbXkgJHJlY3Vyc2U7CiAgICAgJHJlY3Vyc2UgPSBzdWIgeworICAgICAgICBteSAk
b3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAgICAgICAgbXkgJGN1cnJlbnRJbnRlcmZhY2UgPSBz
aGlmdDsKIAogICAgICAgICBmb3IgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPnBhcmVudHN9KSB7CiAg
ICAgICAgICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRfOwotICAgICAgICAgICAgbXkgJHBhcmVu
dEludGVyZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKTsKKyAg
ICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgk
b3V0ZXJJbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKIAogICAgICAgICAgICAgaWYgKCRiZWZv
cmVSZWN1cnNpb24pIHsKICAgICAgICAgICAgICAgICAmJGJlZm9yZVJlY3Vyc2lvbigkcGFyZW50
SW50ZXJmYWNlKSBlcSAncHJ1bmUnIGFuZCBuZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgJiRyZWN1cnNlKCRwYXJlbnRJbnRlcmZhY2UpOworICAgICAgICAgICAgJiRyZWN1cnNlKCRv
dXRlckludGVyZmFjZSwgJHBhcmVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAmJGFmdGVyUmVj
dXJzaW9uKCRwYXJlbnRJbnRlcmZhY2UpIGlmICRhZnRlclJlY3Vyc2lvbjsKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICAmJHJlY3Vyc2UoJGludGVyZmFjZSk7CisgICAgJiRyZWN1cnNlKCRpbnRl
cmZhY2UsICRpbnRlcmZhY2UpOwogfQogCiBzdWIgRmluZFN1cGVyTWV0aG9kCkBAIC0yMzgsNiAr
MjM5LDcgQEAgc3ViIElETEZpbGVGb3JJbnRlcmZhY2UKIHN1YiBQYXJzZUludGVyZmFjZQogewog
ICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsK
ICAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIHVuZGVmIGlmICRp
bnRlcmZhY2VOYW1lIGVxICdPYmplY3QnOwpAQCAtMjQ4LDcgKzI1MCw3IEBAIHN1YiBQYXJzZUlu
dGVyZmFjZQogCiAgICAgIyBTdGVwICMxOiBGaW5kIHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdp
dGggJ2ludGVyZmFjZScKICAgICBteSAkZmlsZW5hbWUgPSAkb2JqZWN0LT5JRExGaWxlRm9ySW50
ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKQotICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElE
TCBmaWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiIVxuIik7CisgICAgICAgIG9y
IGRpZSgiQ291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VO
YW1lXCIsIHJlYWNoYWJsZSBmcm9tIFwiIiAuICRvdXRlckludGVyZmFjZS0+bmFtZSAuICJcIiFc
biIpOwogCiAgICAgcHJpbnQgIiAgfCAgfD4gIFBhcnNpbmcgcGFyZW50IElETCBcIiRmaWxlbmFt
ZVwiIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiXG4iIGlmICR2ZXJib3NlOwogCkBA
IC0yNzcsNiArMjc5LDEwIEBAIHN1YiBTa2lwSW5jbHVkZUhlYWRlcgogCiAgICAgIyBTcGVjaWFs
IGNhc2U6IFNWR051bWJlci5oIGRvZXMgbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJTVkdOdW1iZXIiOworICAgIAorICAgICMgVHlwZWQgYXJyYXlzIGFscmVhZHkgaW5jbHVk
ZWQgYnkgSlNET01CaW5kaW5nLmguCisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNUeXBlZEFy
cmF5VHlwZSgkdHlwZSk7CisgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYwOSw2ICs2MTUs
NyBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJldHVybiAwIGlmICRvYmplY3QtPkdldFNlcXVl
bmNlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNFbnVtVHlwZSgkdHlw
ZSk7CiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICBy
ZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKTsKICAgICByZXR1cm4g
MCBpZiAkd2ViQ29yZVR5cGVIYXNoeyR0eXBlfTsKICAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAi
YW55IjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUs
OCArMjI1LDYgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICAgICAkaW5jbHVkZXNSZWYt
PnsiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCJ9ID0gMTsKICAgICB9IGVsc2lmICgkaXNDYWxs
YmFjayAmJiAkY29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgkdHlwZSkpIHsKICAgICAgICAg
JGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5oIn0gPSAxOwotICAgIH0gZWxzaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAkaW5jbHVkZXNSZWYt
PnsiPHJ1bnRpbWUvJHt0eXBlfS5oPiJ9ID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICAjIGRl
ZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAgICAkaW5jbHVkZXNSZWYt
PnsiJHt0eXBlfS5oIn0gPSAxOwpAQCAtNjgyLDExICs2ODAsNyBAQCBzdWIgR2VuZXJhdGVIZWFk
ZXIKICAgICB9CiAKICAgICBpZiAoJGhhc1BhcmVudCAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0In0pIHsKLSAgICAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAg
ICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS8kaW50ZXJmYWNlTmFtZS5oPiJ9ID0gMTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFj
ZU5hbWUuaCJ9ID0gMTsKLSAgICAgICAgfQorICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRl
cmZhY2VOYW1lLmgifSA9IDE7CiAgICAgfQogICAgIAogICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1
bnRpbWUvSlNPYmplY3QuaD4ifSA9IDE7CkBAIC05NjIsMjIgKzk1Niw2IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cbiIpOwogICAgIH0K
IAotICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFu
ZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJy
YXlCdWZmZXIiKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBj
b25zdCBKU0M6OlR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6Iik7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50OCIpIGlmICRpbXBs
VHlwZSBlcSAiSW50OEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVk
QXJyYXlJbnQxNiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MTZBcnJheSI7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIkludDMy
QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQ4Iikg
aWYgJGltcGxUeXBlIGVxICJVaW50OEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlR5cGVkQXJyYXlVaW50OENsYW1wZWQiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQ4Q2xhbXBl
ZEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50MTYi
KSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQxNkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlR5cGVkQXJyYXlVaW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQzMkFycmF5IjsK
LSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDMyIikgaWYgJGlt
cGxUeXBlIGVxICJGbG9hdDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
VHlwZWRBcnJheUZsb2F0NjQiKSBpZiAkaW1wbFR5cGUgZXEgIkZsb2F0NjRBcnJheSI7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICI7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBpbnRwdHJfdCBtX3N0b3JhZ2VMZW5ndGg7XG4iKTsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICB2b2lkKiBtX3N0b3JhZ2U7XG4iKTsKLSAgICB9Ci0KICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CiAgICAgIyBDb25zdHJ1Y3Rvcgog
ICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAtMTg2NiwxMiArMTg0
NCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKLSAgICAgICAgaWYgKCRjb2Rl
R2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5cGUgbmUg
IkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlciIpKSB7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBk
ZXNjcmlwdG9yKCYke2NsYXNzTmFtZX06OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NO
YW1lfSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdl
TGVuZ3RoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJl
Z2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRh
KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxl
bmd0aCA9IGltcGwoKS0+bGVuZ3RoKCk7XG4iKTsKLSAgICAgICAgfQogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CkBAIC0yNTIzLDEzICsyNDk1LDYg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBpZiAoJGlzQ3Vz
dG9tKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9u
TmFtZSAuICIoZXhlYykpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIGVxICJzZXQiIGFuZCAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBteSAkdmlld1R5cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVHlwZWRBcnJheSJ9OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXRXZWJHTEFycmF5SGVscGVy
PCRpbXBsVHlwZSwgJHZpZXdUeXBlPihleGVjLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKTtcbiIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9
IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChpbXBsLT5pc1JlYWRPbmx5KCkpIHtc
biIpOwpAQCAtMzYxOCwxMSArMzU4Myw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICB9IGVs
c2UgewogICAgICAgICAjIERlZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdpdGggc2FtZSBuYW1lLgog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAg
ICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lLyR0eXBlLmg+IiwgJGNvbmRpdGlv
bmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwg
JGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0
eXBlKTsKLSAgICAgICAgfQorICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRj
b25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlw
ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICR2YWx1ZSBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdB
bmltYXRlZFR5cGUoJHR5cGUpOwpAQCAtNDEwNSwzMCArNDA2Niw2IEBAIEVORAogfQogCiBFTkQK
LSAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgk
aW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJK
U0FycmF5QnVmZmVyVmlld0hlbHBlci5oIn0gPSAxOwotICAgICAgICAgICAgbXkgJHZpZXdUeXBl
ID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUq
IGV4ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+
Y2FsbGVlKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVm
UHRyPCRpbnRlcmZhY2VOYW1lPiBhcnJheSA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzwkaW50
ZXJmYWNlTmFtZSwgJHZpZXdUeXBlPihleGVjKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmICghYXJyYXkuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhy
b3duLlxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVj
LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAke2ludGVyZmFjZU5hbWV9KiBvYmpl
Y3QpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3
PCR7Y2xhc3NOYW1lfT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9Ojpp
bmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpbXBsKCktPnNl
dChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNp
ZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IpKSB7CiAgICAgICAgICAgICBteSAkb3ZlcmxvYWRlZEluZGV4U3RyaW5nID0g
IiI7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVu
Y3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ID4gMCkgewpAQCAtNDIwNyw3ICs0MTQ0LDcgQEAgc3Vi
IEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAKICAgICBteSAkY29uc3RydWN0b3JD
bGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFt
ZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRsZWFz
dENvbnN0cnVjdG9yTGVuZ3RoID0gMDsKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3Ry
dWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSB8fCAkY29kZUdlbmVyYXRvci0+SXND
b25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJUeXBlZEFycmF5IikpIHsKKyAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQi
KSkgewogICAgICAgICAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDE7CiAgICAgfSBlbHNpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pIHsKICAgICAg
ICAgbXkgQGNvbnN0cnVjdG9ycyA9IEB7JGludGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2Jh
bENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIEdlbmVyYXRlSXNSZWFj
aGFibGU9SW1wbCwKLSAgICBDdXN0b21Db25zdHJ1Y3Rvcih1bnNpZ25lZCBsb25nIGxlbmd0aCks
Ci0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0Ms
Ci0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXIg
ewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci0gICAg
QXJyYXlCdWZmZXIgc2xpY2UobG9uZyBiZWdpbiwgb3B0aW9uYWwgbG9uZyBlbmQpOwotfTsKLQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRs
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1
ZmZlclZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1b
Ci0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEltcGxl
bWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXJWaWV3IHsKLSAg
ICByZWFkb25seSBhdHRyaWJ1dGUgQXJyYXlCdWZmZXIgYnVmZmVyOwotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQ7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2Yo
VCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZp
ZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50
OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3
PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNl
dCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAg
ICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVu
Z3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9
IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092
ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXco
YnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCi0gICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0KQotICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29s
IG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElB
TikKLSAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVu
ZGlhbjsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciog
cSkKLXsKLSAgICBjaGFyIHRlbXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsK
LX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dh
cEJ5dGVzKHAsIHAgKyAxKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNo
YXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEs
IHAgKyAyKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17
Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsK
LSAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0
KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVf
dCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhs
aXR0bGVFbmRpYW4pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAg
ICBjYXNlIDE6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgMjoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1UIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4o
Ynl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBk
aXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVz
IHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7
Ci0gICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNl
QWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVk
KHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVl
LmRhdGE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRh
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAg
ICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdv
dWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0
IHVuYWxpZ25lZCBzdG9yZXMuCi0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1
ZS5kYXRhID0gdmFsdWU7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBz
aXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPiht
X2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsK
LX0KLQotaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsKLX0KLQotdWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhf
dD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi11aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxp
bnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0
YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERh
dGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0
YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90Pihi
eXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6
OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRV
aW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zm
c2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAg
ICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmlu
ZSBEYXRhVmlld19oCi0KLSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZm
ZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCk7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBp
bnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2
X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0
ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJf
dCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0
VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJ
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsg
fQotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJ
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxv
YXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBz
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAg
IHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBp
bmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVy
biBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4g
bV9ieXRlTGVuZ3RoOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0
YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
IGNvbnN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5z
aWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2Nv
cGUsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IoQXJyYXlCdWZmZXIgYnVmZmVyLCBvcHRpb25hbCB1
bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0
aCksCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzCi1dIGludGVy
ZmFjZSBEYXRhVmlldyA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgLy8gQWxsIHRoZXNlIG1ldGhv
ZHMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZXkgd291bGQgcmVhZCBvciB3cml0ZSBiZXlvbmQg
dGhlIGVuZCBvZiB0aGUgdmlldy4KLQotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJ5dGUgZ2V0SW50
OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIG9jdGV0
IGdldFVpbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHNob3J0IGdldEludDE2KHVuc2lnbmVkIGxvbmcgYnl0
ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgc2hvcnQgZ2V0VWludDE2KHVuc2ln
bmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gbG9uZyBnZXRJbnQzMih1bnNp
Z25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgZ2V0
VWludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVF
bmRpYW4pOwotCi0gICAgLy8gVXNlIGN1c3RvbSBjb2RlIHRvIGhhbmRsZSBOYU4gY2FzZS4KLSAg
ICBbQ3VzdG9tLCBTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gZmxvYXQgZ2V0
RmxvYXQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxl
RW5kaWFuKTsKLSAgICBbQ3VzdG9tLCBTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBi
b29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldElu
dDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBieXRlIHZhbHVlKTsKLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb2N0ZXQgdmFs
dWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNl
dEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJv
b2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgdW5zaWduZWQg
c2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50MzIodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0LCBsb25nIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQz
Mih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIG9wdGlvbmFs
IGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgbG9uZyBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsK
LX07Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5Lmlk
bAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQz
MkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2Nv
cGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4
ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNU
YWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAot
ICAgIFR5cGVkQXJyYXk9ZmxvYXQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1d
IGludGVyZmFjZSBGbG9hdDMyQXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVu
c2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEZsb2F0MzJBcnJheSBzdWJhcnJheShbRGVm
YXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgZmxvYXQgKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoRmxvYXQzMkFycmF5IGFycmF5LCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9u
Zz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgp
OwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5Lmlk
bAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2
NEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAg
ICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1
Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBK
U0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0
b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1k
b3VibGUsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9h
dDY0QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllU
RVNfUEVSX0VMRU1FTlQgPSA4OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgbGVuZ3RoOwotICAgIEZsb2F0NjRBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRd
IG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgZG91YmxlICh1bnNpZ25lZCBsb25nIGluZGV4KTsK
LQotICAgIC8vIHZvaWQgc2V0KEZsb2F0NjRBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9
RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlw
ZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2
ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0g
ICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXNpZ25lZCBjaGFyLAotICAg
IEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50OEFycmF5IDogQXJy
YXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5U
ID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAg
ICBJbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0
YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAg
Z2V0dGVyIGJ5dGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50
OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9p
ZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDE2QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbnQxNkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldv
cmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAg
ICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAg
ICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXNob3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFt
ZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50MTZBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0g
ICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50MTZBcnJheSBzdWJh
cnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHNob3J0ICh1
bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDE2QXJyYXkgYXJyYXks
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5j
ZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQg
c2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5p
ZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMy
QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBD
b25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwK
LSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAg
ICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRB
cnJheT1pbnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJ
bnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZ
VEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKLSAgICBJbnQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0g
b3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBs
b25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgbG9uZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAg
ICAvLyB2b2lkIHNldChJbnQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01X
aW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFy
cmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2Jq
ZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBE
b05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgY2hhciwKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQ4QXJyYXkgOiBBcnJh
eUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQg
PSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAg
IFVpbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0
YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxv
bmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDhBcnJheSBhcnJheSwgb3B0aW9uYWwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFy
cmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJy
YXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50OENsYW1wZWRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2Nv
cGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4
ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNU
YWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAot
ICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFj
ZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQ4Q2xhbXBlZEFycmF5IDogVWludDhBcnJheSB7Ci0gICAg
Y29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkg
c3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25h
bCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwot
Ci0gICAgLy8gRklYTUU6IE1pc3Npbmcgb3RoZXIgc2V0dGVycyEKLSAgICAvLyB2b2lkIHNldChV
aW50OENsYW1wZWRBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBs
b25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93
Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwK
LSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwK
LSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RD
aGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIHNob3J0LAotICAgIEltcGxl
bWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDE2QXJyYXkgOiBBcnJheUJ1
ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAy
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVp
bnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHVuc2lnbmVkIHNob3J0ICh1bnNp
Z25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQxNkFycmF5IGFycmF5LCBv
cHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8
bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNl
dCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5p
ZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQz
MkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAg
Q29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIs
Ci0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0g
ICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVk
QXJyYXk9dW5zaWduZWQgaW50LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBp
bnRlcmZhY2UgVWludDMyQXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0g
ICAgZ2V0dGVyIHVuc2lnbmVkIGxvbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8g
dm9pZCBzZXQoVWludDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9DcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5
cHRvLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsNyBAQCBuYW1lc3BhY2UgewogCiBib29s
IGlzSW50ZWdlckFycmF5KEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7Ci0gICAgQXJyYXlCdWZm
ZXJWaWV3OjpWaWV3VHlwZSB0eXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICByZXR1cm4gdHlw
ZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJy
YXlCdWZmZXJWaWV3OjpUeXBlVWludDgKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50OENsYW1wZWQKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVJbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6
VHlwZVVpbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUlu
dDMyCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDMyOwor
ICAgIHJldHVybiBKU0M6OmlzSW50KGFycmF5LT5nZXRUeXBlKCkpOwogfQogCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUN1c3RvbUZpbHRlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEyICszNyw5IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZm
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8cnVudGltZS9V
aW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDdXN0b21GaWx0ZXJSZW5kZXJlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208577</attachid>
            <date>2013-08-12 17:46:33 -0700</date>
            <delta_ts>2013-08-12 21:44:56 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>612404</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxMiBA
QAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQg
YWxsb2NhdGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nngg
c3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSlNDVHlwZWRBcnJh
eVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAg
KEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBl
Rm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZn
L0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAg
IChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlND
OjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6
OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNv
dW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNl
KToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURl
YWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGlu
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAg
ICogcnVudGltZS9EYXRhVmlldy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmNwcC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Ynl0ZUxlbmd0
aCk6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1l
L0Zsb2F0MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvRmxvYXQ2NEFycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6ZGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpzZXRSYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb1Jh
bmdlKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpsZW5ndGgpOgorICAg
ICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Oml0ZW0pOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmNoZWNrSW5ib3VuZERhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmdldFR5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHZW5lcmljVHlwZWRB
cnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6Ojo6c3ViYXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OmFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKiBydW50aW1lL0ludDE2QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0ludDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0ludDhBcnJheS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyOjpKU0FycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXI6OmltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RB
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgor
ICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY1NldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jU2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2
NEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRl
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXpl
KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2ts
eSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAg
ICAgICAgKEpTQzo6OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6OjpnZXRDYWxs
RGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAg
ICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgIChKU0M6Ojo6dmFsaWRhdGVSYW5nZSk6CisgICAgICAgIChKU0M6Ojo6c2V0
V2l0aFNwZWNpZmljVHlwZSk6CisgICAgICAgIChKU0M6Ojo6c2V0KToKKyAgICAgICAgKEpTQzo6
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6OjpkZWZpbmVP
d25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAo
SlNDOjo6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjo6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKEpTQzo6Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6OjpzbG93RG93
bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6OjpnZXRUeXBlZEFycmF5SW1wbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jU2V0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3Vi
YXJyYXkpOgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVz
ZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnR5cGVkQXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQx
NkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTVWludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjp0b0pTKToKKyAgICAgICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5n
SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAg
ICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6Rmxv
YXRUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBl
ZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNW
YWx1ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRB
cnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5
cGVkQXJyYXlEZXNjcmlwdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9Gb3JUeXBlKToKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6Omlz
VHlwZWRWaWV3KToKKyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpp
c0ludCk6CisgICAgICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlNDOjppc1NpZ25lZCk6
CisgICAgICAgIChKU0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9VaW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhBcnJheS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTA4ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0b3JpbmcgdXNlIG9mIFN0YWNrSXRlcmF0b3Ig
aW5zdGVhZCBvZiBJbnRlcnByZXRlcjo6Z2V0U3RhY2t0cmFjZSgpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBEYXRlQ29uc3RydWN0b3IubHV0LmggXAogICAg
IERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBK
U0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBK
U0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0jZGVmaW5lIEpTQ1R5
cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJG
bG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJheS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhDbGFtcGVkQXJyYXku
aCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIAot
I2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0eXBlKSBcCi1jbGFzcyBKUyMjbmFtZSMjQXJyYXkg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeyBcCi1wdWJsaWM6IFwKLSAgICB0eXBlZGVm
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7IFwKLSAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5
KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4gaW1wbCkgXAotICAgIHsgXAotICAgICAg
ICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJh
eShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOyBcCi0gICAgICAgIHJldHVybiBwdHI7IFwKLSAg
ICB9XAotXAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKLSAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XAotICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAotXAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtcCi0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XAot
ICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XAotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJyYXlU
eXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJheSMjbmFtZTtcCi0gICAg
dWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0b3JhZ2U7XAotICAgIFJl
ZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0gICAgSlMjI25hbWUjI0Fy
cmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPG5hbWUjI0Fy
cmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1wKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19O1wKLVwKLWNvbnN0IENs
YXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUgIkFycmF5IiAsICZCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25hbWUjI0FycmF5KSB9O1wK
LVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5PiBp
bXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpXAotICAgICwg
bV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1wKLSAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbywg
T0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNF
VE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAotICAgIHZtLnJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlwdG9yKTtcCi0gICAgbV9z
dG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxlbmd0aCA9IG1faW1wbC0+
bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKLX1cCi1cCi1ib29sIEpTIyNu
YW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVwK
LXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNB
cnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAg
ICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wKLSAg
ICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJvb2wg
SlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmpl
Y3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCi0gICAgICAgIHJldHVy
biB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
IyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPCB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+
Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAgIHJldHVybiB0cnVlO1wK
LSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVy
KGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAotICAgIH1cCi0gICAgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1c
Ci1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwKLXtcCi0gICAgbV9pbXBs
LT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAotXAotdm9pZCBKUyMjbmFt
ZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7XAotICAg
IHJldHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aDsgKytp
KVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUjI0FycmF5OjpnZXRCeUlu
ZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTtcCi0gICAgdHlwZSByZXN1bHQgPSBtX2ltcGwtPml0
ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJlc3VsdCkpXAotICAgICAg
ICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVzdWx0KTtcCi19XAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMjI25hbWUjI0FycmF5
KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnQz
MihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gYnVm
ZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAgaWYgKCFidWZmZXIpIFwK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3Io
Y2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRp
dmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIyNuYW1lIyNB
cnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShVaW50OCwgdWludDhfdCk7
Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDE2
LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90KTsKLVRZUEVEX0FSUkFZ
KEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZfdCk7Ci1UWVBFRF9BUlJB
WShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBmbG9hdCk7Ci1UWVBFRF9B
UlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkBAIC0yMzgsMTYg
KzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjbGVhclNhbXBs
aW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7CiAjZW5kaWYKICAgICAg
ICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4QXJyYXkiLCBj
b25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXks
IDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MTZBcnJheSIs
IGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMyQXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RK
U0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIklu
dDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQzMkFycmF5Iiwg
Y29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7Ci0K
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMo
KSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsg
KytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwg
anNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3QjZCNTNG
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2
REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZp
ZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8q
IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OworCQkwRjJC
NjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
ICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFNzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsg
fTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmll
d1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3Bw
ICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07CisJCTBG
MkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8q
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUx
QzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgw
MENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ5LDcgKzM5OSw2IEBACiAJCTBGRUEwQTMyMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9u
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAw
QUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0Ux
NjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUEx
NjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlB
QjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI0LDggKzg3Myw2IEBACiAJCUE3QThB
RjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0
IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxU
eXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4
QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAv
KiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURC
NUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENs
YW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MTIwNyw2ICsxMjU0LDU2IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NS
RXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291
bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJy
YXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3
UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
c2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTQ1MSw3ICsxNTQ4LDYgQEAKIAkJMEZFQTBBMkUxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHQ29tbW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR0NvbW1vbkRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENv
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5j
cHA7IHBhdGggPSBkZmcvREZHSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdB
RCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUeXBlZEFycmF5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5
QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBw
YXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE4ODIsNyArMTk3OCw2IEBACiAJCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4
RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQ
cmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdB
MEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5o
OyBwYXRoID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3NjdGRjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFy
cmF5U3R1YnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDVHlwZWRBcnJh
eVN0dWJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkM1MTc0MTE4Mjc0OEQw
MDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludGVyZmFjZUpJVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZG
NTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFdyaXRlQmFycmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzdBNDIzNjE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0SGVhcC5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RIZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE5MjcsOCArMjAyMiw2IEBACiAJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50OEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDE2
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMkQxN0FEQjVGMzAw
NUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRTE3QURC
NUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5QmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVaW50OEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjMxMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OENsYW1wZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4
QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVWludDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyNjAsNyArMjM1Myw2IEBACiAJCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpz
Yy5jcHAgKi8sCiAJCQkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovLAog
CQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICov
LAotCQkJCUE3NjdGRjlGMTRGNDUwMjkwMDc4OTA1OSAvKiBKU0NUeXBlZEFycmF5U3R1YnMuaCAq
LywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAq
LywKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRv
ci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLApAQCAtMjU1
Niw2ICsyNjQ4LDEwIEBACiAJCQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuY3BwICovLAogCQkJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxv
Y2tzLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5o
ICovLAorCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oICovLAorCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCAqLywKKwkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaCAqLywKKwkJCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8sCiAJCQkJQzIyMzlEMTUxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLywKIAkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1
RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQlDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NU
aHJlYWRTaGFyZWREYXRhLmNwcCAqLywKQEAgLTI4MjgsNiArMjkyNCw1MiBAQAogCQk3RUY2RTBC
QjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmNwcCAqLywKKwkJCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLywK
KwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
Ki8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCAqLywKKwkJCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlci5jcHAgKi8sCisJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuaCAqLywKKwkJCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcCAqLywKKwkJCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkI5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QkExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKKwkJCQkwRjJCNjZCQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2
QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJFMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywK
KwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJ
MEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlSW5saW5lcy5oICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhB
cnJheS5oICovLAorCQkJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXku
aCAqLywKKwkJCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggKi8s
CisJCQkJMEYyQjY2Q0MxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAgKi8sCisJCQkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oICovLAorCQkJCTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcCAqLywKKwkJCQkwRjJCNjZDRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovLAorCQkJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAqLywKKwkJCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQ4QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
OENsYW1wZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1Vp
bnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMy
QXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENjE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLywKKwkJCQkwRjJCNjZEOTE3QjZCNUFCMDBB
N0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2NkRBMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAorCQkJCTBGMkI2NkRCMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovLAorCQkJCTBGMkI2NkRDMTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2REQxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VGODAwQjlB
NjREIC8qIEFyZ0xpc3QuY3BwICovLAogCQkJCUJDRjYwNTEyMEUyMDNFRjgwMEI5QTY0RCAvKiBB
cmdMaXN0LmggKi8sCiAJCQkJQkMyNTdERTUwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5j
cHAgKi8sCkBAIC0yOTIwLDcgKzMwNjIsNiBAQAogCQkJCUE3QThBRjJDMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQxNkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5
LmggKi8sCi0JCQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCAqLywKIAkJCQlBNzg4NTNGNzE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbi5jcHAgKi8sCiAJCQkJQTc4ODUzRjgxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUgLyog
SW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCkBAIC0zMDc4LDggKzMyMTksNiBAQAogCQkJCTE0QTM5
NkE2MENEMjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUx
QzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFF
NTQ5IC8qIFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlw
ZWRBcnJheUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLywKIAkJCQlBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDE2QXJyYXkuaCAqLywKIAkJCQk4NjY3MzlEMTEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0
aEZyYWN0aW9uLmggKi8sCiAJCQkJQTdBOEFGMzMxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFy
cmF5LmggKi8sCkBAIC0zNTM4LDEyICszNjc3LDE1IEBACiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAw
QjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0Yz
OTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY4OENCMTUwRUQxMkI0RTAwMUQ2NDlGIC8qIEFzc2VtYmxlckJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3Nl
bWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2
MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3
QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4MTZFMUMxNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxs
b2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyog
Qm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4
RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1
RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzU1NSw2ICszNjk3LDcgQEAKIAkJCQlBN0MxRUFFRjE3OTg3QUI2MDAyOTlE
QjIgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVFM0JDMDUwRTFB
RTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBC
ODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBD
YWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjkxNEJDRjk1RjAwODg1
QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAq
LywKQEAgLTM1NjYsNiArMzcwOSw3IEBACiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8q
IENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0Ew
MEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNBNzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21t
b25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURF
MzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTc2LDYgKzM3MjAs
NyBAQAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDM0Y2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDMkVBRDJGQzE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyogQ29w
aWVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAtMzYwNCw2ICszNzQ5LDcgQEAKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5RUEyRTAwODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAw
MEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYw
MTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE3LDYgKzM3NjMsNyBA
QAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8qIERGR0JyYW5j
aERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNTZD
MzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZH
Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNE
QjEgLyogREZHQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTAsNiArMzc5Nyw3
IEBACiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2QzREMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURD
NjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAvKiBERkdHUFJJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFkZXJz
ICovLApAQCAtMzY1OCw2ICszODA2LDcgQEAKIAkJCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQ0MxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTcz
OEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3M0E1MzVCMTc5OUNENUQwMDE3MEMxOSAvKiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjcxLDYgKzM4MjAsNyBAQAogCQkJ
CTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQjE2RDAyRjAxMDA1NUE1REIgLyogREZHTm9kZUFsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZBNTgxQkIxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNTgxQkMxNTBFOTUzMDAw
QjlBMkQ5IC8qIERGR05vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlD
RkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBp
biBIZWFkZXJzICovLApAQCAtMzY4NCw2ICszODM0LDggQEAKIAkJCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZHUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQ
cmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVFMTRF
RjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNjkzLDYgKzM4NDUsNyBAQAogCQkJCUE3NDEwMTdGMTc5REFG
ODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRkExMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBERkdT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUwMTdC
NkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFu
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQzMTMyOERGODIwMDJC
MkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzI2LDYgKzM4
NzksNyBAQAogCQkJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTM3NDYsNiArMzkwMCw3IEBACiAJCQkJMEZFQTBBMkMxNzBC
NjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzhBOTc3RjE3OTczOEQ1MDA5REY3NDQgLyogRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEwQTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBFMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc4MTE3
OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
Nzk0LDcgKzM5NDksNiBAQAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8q
IEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0
IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODg1M0ZB
MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM4MTMsNiArMzk2Nyw3IEBACiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0QzUyNDJCMEY1MzU1RTkwMEJBM0QwNCAvKiBKSVRTdHVicy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFRjY4MzVFMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUYxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJz
QVJNdjcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QTRBRTBEMTc5NzNCNEQwMDU2MTJCMSAvKiBK
SVRTdHVic01JUFMuaCBpbiBIZWFkZXJzICovLApAQCAtMzg0MCw2ICszOTk1LDcgQEAKIAkJCQlC
QzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYz
QzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4Qjgx
Nzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zODU1LDYgKzQwMTEsNyBAQAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01h
bmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3
IC8qIEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNPYmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4NjYsNiArNDAyMyw3IEBACiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3
IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDEx
RCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3
RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMUVBRjAxNzk4N0FC
NjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLApAQCAtMzg4NCw2
ICs0MDQyLDcgQEAKIAkJCQk4NkUzQzYxNTE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFj
aGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZB
N0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlC
IC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2
RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTM5MTQsNiArNDA3Myw3
IEBACiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDM3MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBMb29rdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENEMTRCQkIxN0Qw
MEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEI3
MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmggaW4gSGVhZGVycyAq
LywKQEAgLTM5MjYsNiArNDA4Niw3IEBACiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY3MDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMyMTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAv
KiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVC
QTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTM5MzQsMTQgKzQwOTUs
MTcgQEAKIAkJCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYxMkU0Q0QxNTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVz
dWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0
aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTJBMEUxNkZD
QzIwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTAyMTNF
M0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAg
LyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDAxNTYwRjA2QTAw
OEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDIx
NTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
QkYzMDQxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRp
dmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAw
NTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRkYwMDY0
MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTcxLDYg
KzQxMzUsNyBAQAogCQkJCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM0MTRFMUI2MDAw
MEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyog
UHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1
OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTk5LDkgKzQxNjQs
MTEgQEAKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERp
cmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBF
MTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjEx
QzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIw
MkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CkBAIC00MDI0LDYgKzQxOTEsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBT
bG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2
QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMzYsNyArNDIwNCw5IEBACiAJCQkJMTRERjA0
REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkzOEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMwQjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYw
RTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmlu
Z1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjYwRTE2RkNBNzAwQjM0NDYw
IC8qIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNDA0OCw2ICs0MjE4
LDggQEAKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJEMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQw
MDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFGMTdC
NkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NzAxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBE
MDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVyZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEgLyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcsOSArNDIyOSwxMCBAQAogCQkJCTBGNTcyRDRGMTY4
NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
ODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5rR2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxNDQ4Q0QxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFFMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ1MzcyNkYwRTFDNTQ4ODAw
MjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3QThBRjNFMTdBREI1RjMw
MDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQjNFQ0Qx
NjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9k
ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1
ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTQ0ODksNiArNDY2Miw3IEBACiAJCQkJ
MTQ3RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MDQxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVF
MEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDUxNCw2ICs0Njg4LDcgQEAKIAkJCQlBN0Q4OUNG
NTE3QTBCOENDMDA3NzNBRDggLyogREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1OTE0RUY5MEE2MDBDNzI1MzIgLyogREZHQ1NFUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkM3NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0RkYw
MDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTczRTEzMzAxNzk2MjRDRDAwRTRERUE4IC8qIERGR0Rlc2lyZWRTdHJ1Y3R1cmVDaGFpbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1NDMsNiArNDcxOCw3IEBACiAJ
CQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRDE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDMDk3OTExNDZBNkY3MTAwQ0YyNDQyIC8qIERGR09TUkV4aXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRUIxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDYxNiw2ICs0NzkyLDcgQEAKIAkJCQlDMjEx
MjJFMTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODU1MTA3RUMwRTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzUxMzRGRjBBNjAwQUZB
REI1IC8qIEhhbmRsZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJFMzEzNzEzNEZGMEE2
MDBBRkFEQjUgLyogSGFuZGxlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCQTdBOTcx
M0FBREZGODAwNUI3QzJDIC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjY4LDExICs0
ODQ1LDEzIEBACiAJCQkJQzI1RDcwOUIxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTMxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFt
ZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAv
KiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkZBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxl
clByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3
IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2
REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTQ2OTAsNiArNDg2OSw3IEBACiAJCQkJQTc0ODJCOTQxMTY3MTE0NzAwM0IwNzEy
IC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNl
cyAqLywKKwkJCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAv
KiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMzQxNUFFMjUz
ODAwOEYzNjNFIC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTQ3MTIsNiArNDg5Miw3IEBACiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0Yw
IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjkwMDlDMTc5
NzZDNjAwMDMxNzI5OCAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBDMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjA4
MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NzYyLDE3ICs0OTQzLDIxIEBACiAJCQkJMTQ3NEMzM0MxNkFBMkQ5QjAwNjJGMDFEIC8q
IFByb3RvdHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4
NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2
NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjZFQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFNjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODQzMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDQxMDdFQzA5MzAwMTNFN0IyIC8qIFJl
Z0V4cFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU4
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI5RDg4NTBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzMwNDAyQzBFNkE3NjQwMDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5RTE3MzA2
QzhEMDA3REJEQTUgLyogU291cmNlQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ5M0FG
QTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTQ5REMxNkIxMkVGMjkzRTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00ODA1LDYgKzQ5OTAsNyBAQAogCQkJCUUxOEUzQTU5MERGOTI3OEMw
MEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTRBMzMxRjE1QkQyRTA3MDA2
RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MTYxNDA1
MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MkI2NzBBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkVEOTRGMzAxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI1MTU4NTNDRTAwMDRBNEU3RCAvKiBXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5VmFsSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeVZhbEluZm8uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5VmFsSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIGlu
bGluZSBib29sIGlzT3B0aW1pemFibGVJbmRleGluZ1R5cGUoSW4KIAogaW5saW5lIGJvb2wgaGFz
T3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bykKIHsKLSAgICByZXR1cm4gY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUgIT0gVHlw
ZWRBcnJheU5vbmU7CisgICAgcmV0dXJuIGlzVHlwZWRWaWV3KGNsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKTsKIH0KIAogaW5saW5lIGJvb2wgaGFzT3B0aW1pemFibGVJbmRleGluZyhT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTk4LDIzICs5OCwyMyBAQCBpbmxpbmUgSklUQXJyYXlN
b2RlIGppdEFycmF5TW9kZUZvckluZGV4CiBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9k
ZUZvckNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBzd2l0Y2gg
KGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgY2FzZSBUeXBlZEFycmF5
SW50ODoKKyAgICBjYXNlIFR5cGVJbnQ4OgogICAgICAgICByZXR1cm4gSklUSW50OEFycmF5Owot
ICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgorICAgIGNhc2UgVHlwZUludDE2OgogICAgICAgICBy
ZXR1cm4gSklUSW50MTZBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKKyAgICBjYXNl
IFR5cGVJbnQzMjoKICAgICAgICAgcmV0dXJuIEpJVEludDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6CisgICAgY2FzZSBUeXBlVWludDg6CiAgICAgICAgIHJldHVybiBKSVRVaW50
OEFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVV
aW50OENsYW1wZWQ6CiAgICAgICAgIHJldHVybiBKSVRVaW50OENsYW1wZWRBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgogICAgICAgICByZXR1
cm4gSklUVWludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgorICAgIGNhc2Ug
VHlwZVVpbnQzMjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQzMkFycmF5OwotICAgIGNhc2UgVHlw
ZWRBcnJheUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKICAgICAgICAgcmV0dXJuIEpJ
VEZsb2F0MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgorICAgIGNhc2UgVHlw
ZUZsb2F0NjQ6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDY0QXJyYXk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQ1JBU0goKTsKQEAgLTEyMiw2ICsxMjIsMzMgQEAgaW5saW5lIEpJVEFycmF5TW9k
ZSBqaXRBcnJheU1vZGVGb3JDbGFzcwogICAgIH0KIH0KIAoraW5saW5lIFR5cGVkQXJyYXlUeXBl
IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKEpJVEFycmF5TW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUSW50OEFycmF5OgorICAgICAgICByZXR1cm4g
VHlwZUludDg7CisgICAgY2FzZSBKSVRJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUlu
dDE2OworICAgIGNhc2UgSklUSW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsK
KyAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7CisgICAg
Y2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1w
ZWQ7CisgICAgY2FzZSBKSVRVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7
CisgICAgY2FzZSBKSVRVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Cisg
ICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKKyAg
ICBjYXNlIEpJVEZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OworICAg
IGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5
OworICAgIH0KK30KKwogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgaWYgKGlzT3B0aW1pemFibGVJbmRleGlu
Z1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2NiwyOSArMjY2LDI3IEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mbygKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpT
RnVuY3Rpb246OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0g
ICAgaWYgKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25l
KSB7Ci0gICAgICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsK
LSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50
OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVy
biBTcGVjSW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4
OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVk
QXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFy
cmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4g
U3BlY1VpbnQxNkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9h
dDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2Ug
VHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dp
dGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUlu
dDg6CisgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2Ogor
ICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAg
ICAgIHJldHVybiBTcGVjSW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAg
cmV0dXJuIFNwZWNVaW50OEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAg
ICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6Cisg
ICAgICAgIHJldHVybiBTcGVjVWludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAg
ICAgIHJldHVybiBTcGVjRmxvYXQ2NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0
OjpzX2luZm8pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNiArNDU4LDMyIEBAIGNvbnN0IGNo
YXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmEKICAgICB9CiB9CiAKK1R5cGVkQXJyYXlU
eXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50
ODsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDE2
OworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7
CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsK
KyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVV
aW50OENsYW1wZWQ7CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgICAgIHJldHVy
biBUeXBlVWludDE2OworICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgICAgICByZXR1
cm4gVHlwZVVpbnQzMjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgICAgIHJl
dHVybiBUeXBlRmxvYXQzMjsKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6CisgICAgICAg
IHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTm90VHlw
ZWRBcnJheTsKKyAgICB9Cit9CisKIHZvaWQgQXJyYXlNb2RlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KHR5cGUoKSwgYXJyYXlDbGFzcygpLCBzcGVjdWxh
dGlvbigpLCBjb252ZXJzaW9uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDggQEAgY29u
c3QgY2hhciogYXJyYXlDbGFzc1RvU3RyaW5nKEFycmF5OjpDbAogY29uc3QgY2hhciogYXJyYXlT
cGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlvbik7CiBjb25zdCBjaGFyKiBhcnJh
eUNvbnZlcnNpb25Ub1N0cmluZyhBcnJheTo6Q29udmVyc2lvbik7CiAKK1R5cGVkQXJyYXlUeXBl
IHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUpOworCiBjbGFzcyBBcnJheU1vZGUgewogcHVi
bGljOgogICAgIEFycmF5TW9kZSgpCkBAIC0zODAsNiArMzgyLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6U3RyaW5nOwogICAgIH0KICAgICAKKyAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG9UeXBlZEFycmF5VHlwZSh0eXBlKCkpOworICAgIH0KKyAgICAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gb3RoZXIudHlwZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2NjcsMzcgKzI2NjcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgIH0g
fQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzMsNDYgKzI4NDksMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52
bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1ODEsMzcgKzI1ODEsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
bm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWlu
dDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
ZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0
eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlm
IChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzIsNDYgKzI4NDgsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBw
cm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVk
QXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7Cisg
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBl
KCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0
eXBlKTsKKyAgICAgICAgfSB9CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMzIgKzU4Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICB9CiB9CiAgICAgCi1jb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9k
ZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7Ci0gICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDhBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgcmV0
dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQot
CiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dGb3JVbndhbnRlZEFy
cmF5TW9kZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFycmF5TW9kZSwgSW5kZXhpbmdUeXBl
IHNoYXBlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewpAQCAtNjk0
LDggKzY2OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgp
KTsKLSAgICAKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpIHsKICAgICAg
ICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTcyNywyMiAr
Njk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkFyZ3Vt
ZW50czo6c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSByZXN1bHQtPm1f
Y2xhc3NJbmZvOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9IGNsYXNz
SW5mb0ZvclR5cGUobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChleHBlY3RlZENsYXNzSW5m
byk7CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgbV9qaXQubG9hZFB0
cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMjYwMSw4ICsyNTY0LDEwIEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVDbGFtcERvdWJsZVRvQnl0ZShKSVQKIAogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlw
ZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
KQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKQEAgLTI2MTksMTYgKzI1ODQsMTcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIHNwZWN1bGF0
aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAg
ICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlw
dG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewog
ICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkK
KyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDhTaWdu
ZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSwgcmVzdWx0UmVnKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRU
eXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMTZTaWduZWQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvKSwgcmVzdWx0UmVnKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3Vs
dFJlZyk7CkBAIC0yNjM5LDEyICsyNjA1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW4KICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwogICAgIH0KLSAg
ICBpZiAoZWxlbWVudFNpemUgPCA0IHx8IHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkg
eworICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKICAg
ICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0g
VW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gNCAm
JiAhaXNTaWduZWQodHlwZSkpOwogICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKICAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0
UmVnLCBUcnVzdGVkSW1tMzIoMCkpLCBWYWx1ZVJlY292ZXJ5Ojp1aW50MzJJbkdQUihyZXN1bHRS
ZWcpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMjY1OSw4
ICsyNjI1LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAg
ICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUq
IG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVz
cywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0
eXBlKSk7CisgICAgCiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgCkBAIC0yNjc3LDggKzI2NDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgZG91YmxlIGQgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgICAgIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0g
MSk7CisgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgIGQgPSBjbGFtcERvdWJsZVRvQnl0
ZShkKTsKICAgICAgICAgfQogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAg
LTI2OTMsOCArMjY2MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZU9wLmdwcigpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIGlmIChyb3VuZGluZyA9
PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09
IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgICAgICBjb21waWxl
Q2xhbXBJbnRlZ2VyVG9CeXRlKG1faml0LCBzY3JhdGNoUmVnKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHZhbHVlLmFkb3B0KHNjcmF0Y2gpOwpAQCAtMjcwMyw4ICsyNjcxLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgICAgIGlmIChyb3VuZGlu
ZyA9PSBDbGFtcFJvdW5kaW5nKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOworICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVVc2UpOwogICAgICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IGZsb2F0U2NyYXRjaCh0aGlzKTsKQEAgLTI3MjQsNyArMjY5Miw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgICAgICAgICBub3ROYU4ubGlu
aygmbV9qaXQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGZhaWxlZDsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWdu
ZWRUeXBlZEFycmF5KQorICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAg
ICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMy
KGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CiAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFu
Y2hUcnVuY2F0ZURvdWJsZVRvVWludDMyKGZwciwgZ3ByLCBNYWNyb0Fzc2VtYmxlcjo6QnJhbmNo
SWZUcnVuY2F0ZUZhaWxlZCk7CkBAIC0yNzQ5LDkgKzI3MTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgQVNTRVJUKHZhbHVlR1BSICE9IHN0b3JhZ2VS
ZWcpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwogICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CisgICAgICAgIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSk7CiAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dp
dGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAgICAgbV9qaXQuc3Rv
cmU4KHZhbHVlLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0y
NzY5LDggKzI3MzcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SQogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRB
cnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKQEAgLTI3
ODYsOCArMjc1Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNp
emUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIG1faml0LmxvYWRGbG9hdChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNGb3VyKSwgcmVzdWx0UmVnKTsKICAgICAgICAgbV9qaXQuY29udmVydEZsb2F0VG9E
b3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWcpOwpAQCAtMjgwOCw4ICsyNzc5LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICBkb3VibGVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVu
dFNpemUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVk
QXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCkBAIC0y
ODI0LDEwICsyNzk3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckYKICAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzOwotICAgIGlmIChub2Rl
LT5vcCgpID09IFB1dEJ5VmFsKQotICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSk7CisgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gUHV0QnlWYWwpIHsKKyAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LAor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6IHsK
ICAgICAgICAgbV9qaXQubW92ZURvdWJsZSh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CiAgICAgICAg
IG1faml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHZhbHVlRlBSLCBzY3JhdGNoRlBSKTsKQEAgLTQw
MzMsOCArNDAwOSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIK
ICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRl
c2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAg
CiAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2VSZWcpOwpAQCAtNDA0
OCw4ICs0MDIyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChk
ZXNjcmlwdG9yKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBkZXNjcmlwdG9yLT5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKKyAg
ICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwK
KyAgICAgICAgICAgIHN0b3JhZ2VSZWcpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBA
IC00MTUwLDggKzQxMjYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1l
bnRzCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aChOb2RlKiBu
b2RlKQogewotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlw
ZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotCiAgICAgc3dpdGNoIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CkBAIC00MTkxLDE2ICs0MTY1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50c0xlbmd0
aChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVs
dDogeworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKSkpOwogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsK
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlw
dG9yLT5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIH0gfQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUqIG5vZGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjQsMTAgKzE5NjQsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZUFyaXRoRGl2KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aE1vZChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZShOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImLCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIHNp
emVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGlu
ZyA9IFRydW5jYXRlUm91bmRpbmcpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlKiwgc2l6ZV90IGVsZW1l
bnRTaXplKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5v
ZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBU
eXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Ob0NoZWNrKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSopOwogICAgIGJvb2wgY29t
cGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwpAQCAtMjEwOSw4ICsyMTA5LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGUoTm9kZSosIEVk
Z2UpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUpOwotICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUsIEluZGV4aW5nVHlwZSk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBlUmVnLCBBcnJh
eU1vZGUpOwogICAgIHZvaWQgY2hlY2tBcnJheShOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db3B5VG9rZW4uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDgg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIENvcHlUb2tlbiB7Ci0gICAgQnV0dGVyZmx5Q29w
eVRva2VuCisgICAgQnV0dGVyZmx5Q29weVRva2VuLAorICAgIFR5cGVkQXJyYXlWZWN0b3JDb3B5
VG9rZW4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRGVmZXJHQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RlZmVyR0MuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRGVmZXJHQy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwyNCBAQCBwcml2YXRl
OgogICAgIEhlYXAmIG1faGVhcDsKIH07CiAKK2NsYXNzIERlZmVyR0NGb3JBV2hpbGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVyR0NGb3JBV2hpbGUpOworcHVibGljOgorICAgIERl
ZmVyR0NGb3JBV2hpbGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7
CisgICAgICAgIG1faGVhcC5pbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgfQorICAgIAor
ICAgIH5EZWZlckdDRm9yQVdoaWxlKCkKKyAgICB7CisgICAgICAgIG1faGVhcC5kZWNyZW1lbnRE
ZWZlcnJhbERlcHRoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGVmZXJHQ19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50
ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CisKKy8vIEEgQy1oZWFwLWFsbG9jYXRlZCBvYmplY3Qg
dGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3VudHMKKy8vIGR1ZSB0byBpbmNv
bWluZyByZWZlcmVuY2VzIGZyb20gdGhlIGhlYXAsIHdoaWNoIGFyZSB0cmFja2VkIGluCisvLyBy
ZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dzIGl0cyBpbmNvbWluZyByZWZlcmVuY2VzLiBTdWNoIG9i
amVjdHMgYWxzbworLy8gaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQgdGhleSBkb24ndCBoYXZlIHJl
ZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBHQworLy8gaGVhcC4KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3Vu
dGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAgICAgIDog
bV9lbmNvZGVkUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkdDSW5jb21pbmdS
ZWZDb3VudGVkKCkKKyAgICB7CisgICAgICAgIGlmIChoYXNWZWN0b3JPZkNlbGxzKCkpCisgICAg
ICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFo
YXNBbnlJbmNvbWluZygpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNT
aW5nbGV0b24oKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICByZXR1cm4gdmVjdG9y
T2ZDZWxscygpLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogaW5jb21pbmdSZWZl
cmVuY2VBdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQW55
SW5jb21pbmcoKSk7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaW5kZXgpOworICAgIH0KKyAg
ICAKKyAgICAvLyBJdCdzIGdlbmVyYWxseSBub3QgYSBnb29kIGlkZWEgdG8gY2FsbCB0aGlzIGRp
cmVjdGx5LCBzaW5jZSBpZiB0aGlzCisgICAgLy8gcmV0dXJucyB0cnVlLCB5b3UncmUgc3VwcG9z
ZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBHQydzIGxpc3QuCisgICAgLy8gQ2FsbCBHQ0lu
Y29taW5nUmVmQ291bnRlZFNldDo6YWRkUmVmZXJlbmNlKCkgaW5zdGVhZC4KKyAgICBib29sIGFk
ZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCopOworICAgIAorICAgIC8vIEEgZmlsdGVyIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3aXNoIHRvIGtlZXAgdGhlIGluY29taW5nCisgICAgLy8g
cmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYgd2UgZG9uJ3QuIFRoaXMgbWF5IGRlbGV0ZSB0aGUgb2Jq
ZWN0LAorICAgIC8vIGFuZCBpZiBpdCBkb2VzIHNvLCB0aGlzIHJldHVybnMgdHJ1ZS4gSW4gZ2Vu
ZXJhbCwgeW91IGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgdGhpcyB3aXRoIGEgZmlsdGVyIGZ1
bmN0aW9uIHRoYXQgY2FuIHJldHVybiBmYWxzZSB1bmxlc3MKKyAgICAvLyB5b3UncmUgYWxzbyB3
YWxraW5nIHRoZSBHQydzIGxpc3QuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyRnVuY3Rp
b25UeXBlPgorICAgIGJvb2wgZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKEZpbHRlckZ1bmN0aW9u
VHlwZSYpOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWludHB0cl90IHNpbmdsZXRvbkZs
YWcoKSB7IHJldHVybiAxOyB9CisgICAgCisgICAgYm9vbCBoYXNWZWN0b3JPZkNlbGxzKCkgY29u
c3QgeyByZXR1cm4gIShtX2VuY29kZWRQb2ludGVyICYgc2luZ2xldG9uRmxhZygpKTsgfQorICAg
IGJvb2wgaGFzQW55SW5jb21pbmcoKSBjb25zdCB7IHJldHVybiAhIW1fZW5jb2RlZFBvaW50ZXI7
IH0KKyAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJuIGhhc0FueUluY29taW5n
KCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMoKTsgfQorICAgIAorICAgIEpTQ2VsbCogc2luZ2xldG9u
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9lbmNvZGVkUG9pbnRlciAmIH5zaW5nbGV0
b25GbGFnKCkpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3Rvck9mQ2Vs
bHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZlY3Rvck9mQ2VsbHMoKSk7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmVjdG9yPEpTQ2VsbCo+Kj4obV9lbmNvZGVkUG9p
bnRlcik7CisgICAgfQorICAgIAorICAgIC8vIFNpbmdsZXRvbiBmbGFnIGlzIHNldDogdGhpcyBp
cyBhIEpTQ2VsbCouCisgICAgLy8gU2luZ2xldG9uIGZsYWcgbm90IHNldDogdGhpcyBpcyBhIHBv
aW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2VsbHMuCisgICAgdWludHB0cl90IG1fZW5jb2RlZFBvaW50
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZD
b3VudGVkX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisj
ZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJ
bmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWlu
ZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0
cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNl
QXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24o
KSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxs
Kj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0
b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMo
KS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNv
bWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlv
blR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgewor
ICAgICAgICBBU1NFUlQoIXRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlz
LT5yZWZDb3VudCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisg
ICAgQVNTRVJUKHRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIAorICAgIGlmIChoYXNTaW5n
bGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24oc2luZ2xldG9uKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgIG1fZW5jb2RlZFBv
aW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOworICAgICAgICBy
ZXR1cm4gdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgfQorICAgICAgICAKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHZlY3Rvck9mQ2VsbHMoKS0+YXQoaSkpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXQoaS0tKSA9IHZlY3Rv
ck9mQ2VsbHMoKS0+bGFzdCgpOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPnJlbW92ZUxhc3Qo
KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+PSAy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxz
KCktPmlzRW1wdHkoKSkgeworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgICAg
ICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygp
KTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAg
ICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbiA9IHZlY3Rvck9mQ2VsbHMoKS0+YXQoMCk7CisgICAg
ZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oc2luZ2xldG9uKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICBBU1NFUlQo
aGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwor
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQg
YSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29t
aW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhp
cyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZv
aWQgc3dlZXAoKTsKKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwq
KTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3Rv
cjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRlZFNl
dCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgbV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6
YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2JqZWN0
LT5hZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVF
c3RpbWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIFQq
IG9iamVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+Z2NT
aXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNvbWlu
Z1JlZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
bV9ieXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFzdCgp
OworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxsKEpT
Q2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Ym9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNlbGwp
Cit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJERkdX
b3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRv
ci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxT
d2VlcGVyLmgiCkBAIC0zNTgsNiArMzU5LDE0IEBAIHZvaWQgSGVhcDo6amV0dGlzb25ERkdDb2Rl
QmxvY2soUGFzc1JlZlAKICAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsK
IH0KIAordm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciog
YnVmZmVyKQoreworICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwgYnVm
ZmVyKSkgeworICAgICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgICAgIGRp
ZEFsbG9jYXRlKGJ1ZmZlci0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkpOworICAgIH0KK30KKwog
dm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290
VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVj
dGVkVmFsdWVzLmVuZCgpOwpAQCAtNjIxLDE0ICs2MzAsMTkgQEAgc2l6ZV90IEhlYXA6Om9iamVj
dENvdW50KCkKICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5vYmplY3RDb3VudCgpOwogfQogCitz
aXplX3QgSGVhcDo6ZXh0cmFTaXplKCkKK3sKKyAgICByZXR1cm4gbV9leHRyYU1lbW9yeVVzYWdl
ICsgbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpOworfQorCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7Ci0g
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsg
bV9leHRyYU1lbW9yeVVzYWdlOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSArIG1f
c3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6Y2Fw
YWNpdHkoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0b3Jh
Z2VTcGFjZS5jYXBhY2l0eSgpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkg
KyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBI
ZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC03NDUsNiArNzU5LDExIEBAIHZv
aWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAKICAgICBKQVZB
U0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKKyAgICAKKyAgICB7CisgICAgICAgIEdDUEhBU0UoU3dl
ZXBpbmdBcnJheUJ1ZmZlcnMpOworICAgICAgICBtX2FycmF5QnVmZmVycy5zd2VlcCgpOworICAg
IH0KIAogICAgIHsKICAgICAgICAgbV9ibG9ja1NuYXBzaG90LnJlc2l6ZShtX29iamVjdFNwYWNl
LmJsb2NrcygpLnNldCgpLnNpemUoKSk7CkBAIC05MjQsMTIgKzk0MywxNiBAQCB2b2lkIEhlYXA6
OmluY3JlbWVudERlZmVycmFsRGVwdGgoKQogICAgIG1fZGVmZXJyYWxEZXB0aCsrOwogfQogCi12
b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3ZvaWQgSGVh
cDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9kZWZl
cnJhbERlcHRoID49IDEpOwogICAgIAogICAgIG1fZGVmZXJyYWxEZXB0aC0tOwotICAgIAorfQor
Cit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCkKK3sKKyAg
ICBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZl
cigpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDkgKzIyLDExIEBACiAjaWZuZGVmIEhlYXBfaAogI2RlZmluZSBIZWFwX2gKIAorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmxvY2tBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0
YS5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCkBA
IC0xNDQsNiArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAKKyAgICAgICAg
c2l6ZV90IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdl
cyBhbGxvY2F0ZWQgYnkgdGhlIGhlYXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IHNpemUoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBvYmplY3RDb3VudCgpOwpAQCAtMTc5LDEx
ICsxODIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNQYWdlZE91dChkb3Vi
bGUgZGVhZGxpbmUpOwogICAgICAgICAKICAgICAgICAgY29uc3QgSklUU3R1YlJvdXRpbmVTZXQm
IGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBi
dWZmZXIpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvcGllZEJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3Mg
RGVmZXJHQzsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0NGb3JBV2hpbGU7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBIYW5kbGVTZXQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVRTdHViUm91dGluZTsKQEAgLTIz
MCw2ICsyMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3ImIGJs
b2NrQWxsb2NhdG9yKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGluY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKKyAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoKCk7CiAgICAgICAg
IHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKTsKIAogICAgICAgICBj
b25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwpAQCAtMjQ1LDYgKzI1Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBCbG9ja0FsbG9jYXRvciBtX2Jsb2NrQWxsb2NhdG9yOwogICAgICAgICBN
YXJrZWRTcGFjZSBtX29iamVjdFNwYWNlOwogICAgICAgICBDb3BpZWRTcGFjZSBtX3N0b3JhZ2VT
cGFjZTsKKyAgICAgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8QXJyYXlCdWZmZXI+IG1fYXJy
YXlCdWZmZXJzOwogICAgICAgICBzaXplX3QgbV9leHRyYU1lbW9yeVVzYWdlOwogCiAjaWYgRU5B
QkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5Q29uc3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlQcm90b3R5cGVUYWJsZTsgfQogICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5ib29sZWFuUHJvdG90eXBl
VGFibGU7IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0YVZpZXdUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGFWaWV3VGFi
bGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZVRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0ZUNvbnN0cnVjdG9yVGFi
bGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmVycm9yUHJv
dG90eXBlVGFibGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgyLDggKzQ4Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0
RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91
c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRB
cnJheVNpZ25lZG5lc3MpOwotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJy
YXlUeXBlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QwLCBiYXNl
IGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgogICAgICAgICAvLyBU
aGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVj
a2VkIGFuZApAQCAtNTAzLDggKzUwMyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUgPSBD
b250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExp
c3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXpl
LCBUeXBlZEFycmF5U2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nKTsKLSAgICAgICAgSnVt
cExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVu
dFNpemUpOworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAg
ICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICBl
bnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ5LDM1ICsxNTQ5LDEzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50
OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAx
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFy
cmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBl
ZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVz
Y3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9k
ZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBl
KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
QEAgLTE2MTgsMzUgKzE1OTYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRl
Um91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgNCwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGlu
Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5z
aWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAg
ICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCkBAIC0xNjY4LDggKzE2MjMsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5j
dGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X3ZhbF9nZW5lcmlj
KSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5l
c3Mgc2lnbmVkbmVzcykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIC8vIFRoZSBiZXN0
IHdheSB0byB0ZXN0IHRoZSBhcnJheSB0eXBlIGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBu
ZWVkIHRvIGRvIHNvIHdpdGhvdXQKICAgICAvLyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0
IGhvbGRzIHRoZSBpbmRleGluZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVydHkuCiAKQEAgLTE2ODks
MTkgKzE2NDYsMTkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0Qgog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0
eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAg
c3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKHNp
Z25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUp
KQogICAgICAgICAgICAgbG9hZDhTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1l
c09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkOChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVk
VHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbG9h
ZDE2U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXls
b2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChiYXNlLCBw
cm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKQEAgLTE3MTQsNyArMTY3MSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICB9CiAgICAgCiAg
ICAgSnVtcCBkb25lOwotICAgIGlmIChlbGVtZW50U2l6ZSA9PSA0ICYmIHNpZ25lZG5lc3MgPT0g
VW5zaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKHR5cGUgPT0gVHlwZVVpbnQzMikgewogICAg
ICAgICBKdW1wIGNhbkJlSW50ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRQ
YXlsb2FkLCBUcnVzdGVkSW1tMzIoMCkpOwogICAgICAgICAKICAgICAgICAgY29udmVydEludDMy
VG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CkBAIC0xNzQwLDggKzE2OTcsMTAgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOworICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwpAQCAtMTc1OCwxMSAr
MTcxNywxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUp
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBsb2FkRmxvYXQo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKICAgICAgICAg
Y29udmVydEZsb2F0VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7CkBAIC0xNzg5LDggKzE3NDgs
MTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIHJldHVy
biBzbG93Q2FzZXM7ICAgIAogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90
IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5
Um91bmRpbmcgcm91bmRpbmcpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7
CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4MDgsOCArMTc2OSw4IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgp
KSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNj
cmF0Y2gpOwpAQCAtMTgyMSwxMSArMTc4MiwxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlQdXRCCiAgICAgCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGlu
dG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBh
dGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBsYXRlU2NyYXRjaCk7CisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIGlmIChyb3VuZGluZyA9PSBDbGFtcFJvdW5kaW5n
KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChzaWduZWRuZXNzLCBzaWduZWRuZXNzID0gVW5zaWduZWRUeXBlZEFycmF5KTsKKyAgICBp
ZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKKyAgICAgICAgQVNTRVJUKCFpc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIEp1bXAgaW5C
b3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMy
KDB4ZmYpKTsKICAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFy
bHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICB4b3IzMihlYXJseVNjcmF0
Y2gsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODM2LDcgKzE3OTcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7CiAg
ICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNo
LCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSkpOwogICAgICAgICBi
cmVhazsKQEAgLTE4NTMsOCArMTgxNCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5
cGVkQXJyYXlQdXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTg3Miw4
ICsxODM1LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVy
ZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9y
VHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODk4LDkgKzE4NjEsOSBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgCiAgICAgLy8gV2Ugd291bGQg
YmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0
aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4K
LSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBs
YXRlU2NyYXRjaCk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwogICAgIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0
OgogICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKICAgICAg
ICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0ZvdXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE0ICsyNiwxMyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAKLSNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKLQorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIEFycmF5QnVmZmVyOjp0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQsIFZlY3RvcjxSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKQorYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIo
QXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0KQogewogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
a2VlcEFsaXZlKHRoaXMpOwogCkBAIC00MiwxMyArNDEsOSBAQCBib29sIEFycmF5QnVmZmVyOjp0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBib29sIGFsbFZpZXdzQXJlTmV1dGVyYWJsZSA9IHRydWU7Ci0gICAgZm9yIChBcnJheUJ1ZmZl
clZpZXcqIGkgPSBtX2ZpcnN0VmlldzsgaTsgaSA9IGktPm1fbmV4dFZpZXcpIHsKLSAgICAgICAg
aWYgKCFpLT5pc05ldXRlcmFibGUoKSkKLSAgICAgICAgICAgIGFsbFZpZXdzQXJlTmV1dGVyYWJs
ZSA9IGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzTmV1dGVyYWJsZSA9ICFtX3BpbkNvdW50Owog
Ci0gICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSkKKyAgICBpZiAoaXNOZXV0ZXJhYmxlKQog
ICAgICAgICBtX2NvbnRlbnRzLnRyYW5zZmVyKHJlc3VsdCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IG1fY29udGVudHMuY29weVRvKHJlc3VsdCk7CkBAIC01NiwzNiArNTEsMTMgQEAgYm9vbCBBcnJh
eUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIHdoaWxlIChtX2ZpcnN0VmlldykgewotICAgICAgICBBcnJheUJ1ZmZl
clZpZXcqIGN1cnJlbnQgPSBtX2ZpcnN0VmlldzsKLSAgICAgICAgcmVtb3ZlVmlldyhjdXJyZW50
KTsKLSAgICAgICAgaWYgKGFsbFZpZXdzQXJlTmV1dGVyYWJsZSB8fCBjdXJyZW50LT5pc05ldXRl
cmFibGUoKSkKLSAgICAgICAgICAgIGN1cnJlbnQtPm5ldXRlcigpOwotICAgICAgICBuZXV0ZXJl
ZFZpZXdzLmFwcGVuZChjdXJyZW50KTsKKyAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZJbmNv
bWluZ1JlZmVyZW5jZXMoKTsgaS0tOykgeworICAgICAgICBKU0FycmF5QnVmZmVyVmlldyogdmll
dyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihpbmNvbWluZ1JlZmVyZW5jZUF0
KGkpKTsKKyAgICAgICAgaWYgKHZpZXcpCisgICAgICAgICAgICB2aWV3LT5uZXV0ZXIoKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXI6OmFkZFZpZXcoQXJy
YXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIHZpZXctPm1fYnVmZmVyID0gdGhpczsKLSAgICB2
aWV3LT5tX3ByZXZWaWV3ID0gMDsKLSAgICB2aWV3LT5tX25leHRWaWV3ID0gbV9maXJzdFZpZXc7
Ci0gICAgaWYgKG1fZmlyc3RWaWV3KQotICAgICAgICBtX2ZpcnN0Vmlldy0+bV9wcmV2VmlldyA9
IHZpZXc7Ci0gICAgbV9maXJzdFZpZXcgPSB2aWV3OwotfQotCi12b2lkIEFycmF5QnVmZmVyOjpy
ZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQodGhpcyA9PSB2
aWV3LT5tX2J1ZmZlcik7Ci0gICAgaWYgKHZpZXctPm1fbmV4dFZpZXcpCi0gICAgICAgIHZpZXct
Pm1fbmV4dFZpZXctPm1fcHJldlZpZXcgPSB2aWV3LT5tX3ByZXZWaWV3OwotICAgIGlmICh2aWV3
LT5tX3ByZXZWaWV3KQotICAgICAgICB2aWV3LT5tX3ByZXZWaWV3LT5tX25leHRWaWV3ID0gdmll
dy0+bV9uZXh0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcgPT0gdmlldykKLSAgICAgICAgbV9m
aXJzdFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSB2aWV3
LT5tX25leHRWaWV3ID0gMDsKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwogCi19CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCkBAIC0yNiwxNSArMjYsMTcgQEAKICNpZm5kZWYgQXJyYXlCdWZmZXJfaAogI2RlZmlu
ZSBBcnJheUJ1ZmZlcl9oCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiV2Vhay5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBBcnJheUJ1ZmZlclZpZXc7CitjbGFzcyBK
U0FycmF5QnVmZmVyOwogCiBjbGFzcyBBcnJheUJ1ZmZlckNvbnRlbnRzIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShBcnJheUJ1ZmZlckNvbnRlbnRzKTsKQEAgLTQ1LDcgKzQ3LDcgQEAgcHVi
bGljOgogICAgIHsgfQogCiAgICAgaW5saW5lIH5BcnJheUJ1ZmZlckNvbnRlbnRzKCk7Ci0KKyAg
ICAKICAgICB2b2lkKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAgdW5zaWduZWQgc2l6
ZUluQnl0ZXMoKSB7IHJldHVybiBtX3NpemVJbkJ5dGVzOyB9CiAKQEAgLTg2LDEyICs4OCwxMyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7CiB9OwogCi1jbGFzcyBBcnJh
eUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CitjbGFzcyBBcnJheUJ1
ZmZlciA6IHB1YmxpYyBHQ0luY29taW5nUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewogcHVibGlj
OgogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyKik7CiAgICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoY29uc3Qgdm9pZCog
c291cmNlLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlckNvbnRlbnRzJik7CisgICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogCiAgICAgLy8gT25seSBmb3IgdXNlIGJ5IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkLgogICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1F
bGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKQEAgLTk5LDE0ICsxMDIsMTYgQEAg
cHVibGljOgogICAgIGlubGluZSB2b2lkKiBkYXRhKCk7CiAgICAgaW5saW5lIGNvbnN0IHZvaWQq
IGRhdGEoKSBjb25zdDsKICAgICBpbmxpbmUgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0Owor
ICAgIAorICAgIGlubGluZSBzaXplX3QgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3Q7CiAK
ICAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50IGJlZ2luLCBpbnQg
ZW5kKSBjb25zdDsKICAgICBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gc2xpY2UoaW50
IGJlZ2luKSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgdm9pZCBwaW4oKTsKKyAgICBpbmxpbmUg
dm9pZCB1bnBpbigpOwogCi0gICAgdm9pZCBhZGRWaWV3KEFycmF5QnVmZmVyVmlldyopOwotICAg
IHZvaWQgcmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLQotICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmLCBWZWN0b3I8UmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJl
ZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1fZGF0YTsgfQogCiAgICAgfkFycmF5QnVmZmVyKCkg
eyB9CkBAIC0xMTksOCArMTI0LDExIEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGNs
YW1wSW5kZXgoaW50IGluZGV4KSBjb25zdDsKICAgICBzdGF0aWMgaW5saW5lIGludCBjbGFtcFZh
bHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KTsKIAorICAgIHVuc2lnbmVkIG1fcGluQ291
bnQ7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50cyBtX2NvbnRlbnRzOwotICAgIEFycmF5QnVmZmVy
VmlldyogbV9maXJzdFZpZXc7CisKK3B1YmxpYzoKKyAgICBXZWFrPEpTQXJyYXlCdWZmZXI+IG1f
d3JhcHBlcjsKIH07CiAKIGludCBBcnJheUJ1ZmZlcjo6Y2xhbXBWYWx1ZShpbnQgeCwgaW50IGxl
ZnQsIGludCByaWdodCkKQEAgLTE1OSw2ICsxNjcsMTIgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gQXJyYXlCdWZmZXI6OmNyZQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXlCdWZmZXIo
Y29udGVudHMpKTsKIH0KIAorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNy
ZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKK3sKKyAg
ICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpLCBi
eXRlTGVuZ3RoKTsKKyAgICByZXR1cm4gY3JlYXRlKGNvbnRlbnRzKTsKK30KKwogUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSkKIHsKICAgICByZXR1cm4gY3Jl
YXRlKG51bUVsZW1lbnRzLCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29udGVudHM6OkRv
bnRJbml0aWFsaXplKTsKQEAgLTE3NCw3ICsxODgsNyBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlCiB9CiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiBjb250ZW50cykKLSAgICA6IG1fZmlyc3RWaWV3KDApCisgICAgOiBtX3Bp
bkNvdW50KDApCiB7CiAgICAgY29udGVudHMudHJhbnNmZXIobV9jb250ZW50cyk7CiB9CkBAIC0x
OTQsNiArMjA4LDExIEBAIHVuc2lnbmVkIEFycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QK
ICAgICByZXR1cm4gbV9jb250ZW50cy5tX3NpemVJbkJ5dGVzOwogfQogCitzaXplX3QgQXJyYXlC
dWZmZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemVv
ZihBcnJheUJ1ZmZlcikgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ5dGVMZW5ndGgoKSk7Cit9CisK
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpzbGljZShpbnQgYmVnaW4sIGlu
dCBlbmQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNsaWNlSW1wbChjbGFtcEluZGV4KGJlZ2luKSwg
Y2xhbXBJbmRleChlbmQpKTsKQEAgLTIxOCwxNSArMjM3LDIzIEBAIHVuc2lnbmVkIEFycmF5QnVm
ZmVyOjpjbGFtcEluZGV4KGludCBpbmQKICAgICByZXR1cm4gY2xhbXBWYWx1ZShpbmRleCwgMCwg
Y3VycmVudExlbmd0aCk7CiB9CiAKK3ZvaWQgQXJyYXlCdWZmZXI6OnBpbigpCit7CisgICAgbV9w
aW5Db3VudCsrOworfQorCit2b2lkIEFycmF5QnVmZmVyOjp1bnBpbigpCit7CisgICAgbV9waW5D
b3VudC0tOworfQorCiB2b2lkIEFycmF5QnVmZmVyQ29udGVudHM6OnRyeUFsbG9jYXRlKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUsIEFycmF5QnVmZmVyQ29u
dGVudHM6OkluaXRpYWxpemF0aW9uUG9saWN5IHBvbGljeSwgQXJyYXlCdWZmZXJDb250ZW50cyYg
cmVzdWx0KQogewotICAgIC8vIERvIG5vdCBhbGxvdyAzMi1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRv
dGFsIHNpemUuCi0gICAgLy8gRklYTUU6IFdoeSBub3Q/IFRoZSB0cnlGYXN0Q2FsbG9jIGZ1bmN0
aW9uIGFscmVhZHkgY2hlY2tzIGl0cyBhcmd1bWVudHMsCi0gICAgLy8gYW5kIHdpbGwgZmFpbCBp
ZiB0aGVyZSBpcyBhbnkgb3ZlcmZsb3csIHNvIHdoeSBzaG91bGQgd2UgaW5jbHVkZSBhCi0gICAg
Ly8gcmVkdWRhbnQgdW5uZWNlc3NhcmlseSByZXN0cmljdGl2ZSBjaGVjayBoZXJlPworICAgIC8v
IERvIG5vdCBhbGxvdyAzMS1iaXQgb3ZlcmZsb3cgb2YgdGhlIHRvdGFsIHNpemUuCiAgICAgaWYg
KG51bUVsZW1lbnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG51bUVsZW1lbnRz
ICogZWxlbWVudEJ5dGVTaXplOwotICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMg
IT0gZWxlbWVudEJ5dGVTaXplKSB7CisgICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50
cyAhPSBlbGVtZW50Qnl0ZVNpemUKKyAgICAgICAgICAgIHx8IHRvdGFsU2l6ZSA+IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpIHsKICAg
ICAgICAgICAgIHJlc3VsdC5tX2RhdGEgPSAwOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0yNTQsNiArMjgxLDYgQEAgQXJyYXlCdWZmZXJDb250ZW50czo6fkFycmF5QnVmZmVy
Q29udGVudAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIHVzaW5nIEpTQzo6QXJyYXlCdWZmZXI7Ci11
c2luZyBKU0M6OkFycmF5QnVmZmVyQ29udGVudHM7CiAKICNlbmRpZiAvLyBBcnJheUJ1ZmZlcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDM2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1BcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCi0g
ICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKLSAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUp
Ci0gICAgLCBtX2J1ZmZlcihidWZmZXIpCi0gICAgLCBtX3ByZXZWaWV3KDApCi0gICAgLCBtX25l
eHRWaWV3KDApCitBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldygKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCkKKyAgICAg
ICAgOiBtX2J5dGVPZmZzZXQoYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2lzTmV1dGVyYWJsZSh0
cnVlKQorICAgICAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKIHsKICAgICBtX2Jhc2VBZGRyZXNzID0g
bV9idWZmZXIgPyAoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLT5kYXRhKCkpICsgbV9ieXRl
T2Zmc2V0KSA6IDA7Ci0gICAgaWYgKG1fYnVmZmVyKSAKLSAgICAgICAgbV9idWZmZXItPmFkZFZp
ZXcodGhpcyk7CiB9CiAKIEFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldygpCiB7Ci0g
ICAgaWYgKG1fYnVmZmVyKQotICAgICAgICBtX2J1ZmZlci0+cmVtb3ZlVmlldyh0aGlzKTsKKyAg
ICBpZiAoIW1faXNOZXV0ZXJhYmxlKQorICAgICAgICBtX2J1ZmZlci0+dW5waW4oKTsKIH0KIAot
dm9pZCBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6c2V0
TmV1dGVyYWJsZShib29sIGZsYWcpCiB7Ci0gICAgbV9idWZmZXIgPSAwOwotICAgIG1fYnl0ZU9m
ZnNldCA9IDA7CisgICAgaWYgKGZsYWcgPT0gbV9pc05ldXRlcmFibGUpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7CisgICAgCisgICAgaWYgKCFtX2J1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmbGFnKQorICAgICAgICBtX2J1
ZmZlci0+dW5waW4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fYnVmZmVyLT5waW4oKTsKIH0KIAot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDcgKzI3LDcgQEAKICNkZWZpbmUgQXJyYXlCdWZmZXJWaWV3X2gKIAogI2luY2x1ZGUgIkFycmF5
QnVmZmVyLmgiCi0KKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpA
QCAtMzYsNjEgKzM2LDU1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0FycmF5QnVm
ZmVyVmlldzsKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgRXhlY1N0YXRlOworCiBjbGFz
cyBBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlclZpZXc+IHsK
LXB1YmxpYzoKLSAgICBlbnVtIFZpZXdUeXBlIHsKLSAgICAgICAgVHlwZUludDgsCi0gICAgICAg
IFR5cGVVaW50OCwKLSAgICAgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKLSAgICAgICAgVHlwZUludDE2
LAotICAgICAgICBUeXBlVWludDE2LAotICAgICAgICBUeXBlSW50MzIsCi0gICAgICAgIFR5cGVV
aW50MzIsCi0gICAgICAgIFR5cGVGbG9hdDMyLAotICAgICAgICBUeXBlRmxvYXQ2NCwKLSAgICAg
ICAgVHlwZURhdGFWaWV3Ci0gICAgfTsKLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBj
b25zdCA9IDA7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUo
KSBjb25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAgIH0KKyAg
ICAKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAgIHsKKyAg
ICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBy
ZXR1cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAog
ICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRl
T2Zmc2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9CiAKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNl
dE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQorICAgIHZv
aWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAgIGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcq
LCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxj
dWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNp
emUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCiAgICAgLy8gSGVscGVy
IHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCiAg
ICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRp
YyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisgICAgc3RhdGljIGJvb2wg
dmVyaWZ5U3ViUmFuZ2UoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBp
ZiAoIWJ1ZmZlcikKKyAgICAgICAgaWYgKGJ1ZmZlci0+aXNOZXV0ZXJlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0
ICUgc2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAxLDExICs5NSwy
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFw
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIAorICBwcm90ZWN0ZWQ6Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCBzZXRJbXBsKEFy
cmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wg
c2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhQnl0ZUxlbmd0aCwgdW5z
aWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJvUmFuZ2VJbXBsKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOworCisgICAgc3RhdGljIGlu
bGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVu
c2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CiAKICAgICAvLyBJbnB1dCBv
ZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGVsZW1lbnRzIGZyb20gdGhpcyBhcnJheSdzIHZpZXc7CiAg
ICAgLy8gb3V0cHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgdW5kZXJs
eWluZyBidWZmZXIncyB2aWV3LgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRp
YyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsIHVuc2lnbmVkICpvZmZzZXQsIHVuc2ln
bmVkICpudW1FbGVtZW50cykKKyAgICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1l
bnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVu
dHMpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJh
eUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNl
dCkgewpAQCAtMTE5LDE5ICsxMzAsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAqbnVtRWxlbWVu
dHMgPSBzdGQ6Om1pbihyZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRzKTsKICAgICB9CiAK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCiAgICAgLy8g
VGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9yYWdlLCBwbHVzIHRo
ZSBieXRlIG9mZnNldC4KICAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwogCiAgICAgdW5zaWduZWQg
bV9ieXRlT2Zmc2V0IDogMzE7CiAgICAgYm9vbCBtX2lzTmV1dGVyYWJsZSA6IDE7CiAKLXByaXZh
dGU6CisgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3
OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZm
ZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQpCkBAIC0xNzYsNyArMTgzLDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUlt
cGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2Fs
Y3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlT
aXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2ln
bmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3Rh
cnQgPCAwKQogICAgICAgICBzdGFydCArPSBhcnJheVNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBK
U0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJs
ZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRl
ZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7
CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJh
eUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
KCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBHZXRUeXBlZEFy
cmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9D
SEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0Niw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7
CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVjdFZpcnR1YWwsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZDbGFzc05hbWU6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0VHlwZWRBcnJheUltcGwgXAogICAgIH0s
IFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIC8vIHdheXMgd2l0aG91
dCByZXBlYXRpbmcgdGhlIGxpc3QuCiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFD
SF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXkpIFwKKyAgICBtYWNybyhB
cnJheUJ1ZmZlcikgXAogICAgIG1hY3JvKEJvb2xlYW4pIFwKICAgICBtYWNybyhEYXRlKSBcCiAg
ICAgbWFjcm8oRXJyb3IpIFwKQEAgLTU1LDYgKzU2LDkgQEAKICAgICBtYWNybyhhcHBseSkgXAog
ICAgIG1hY3JvKGFyZ3VtZW50cykgXAogICAgIG1hY3JvKGJpbmQpIFwKKyAgICBtYWNybyhidWZm
ZXIpIFwKKyAgICBtYWNybyhieXRlTGVuZ3RoKSBcCisgICAgbWFjcm8oYnl0ZU9mZnNldCkgXAog
ICAgIG1hY3JvKGJ5dGVjb2RlKSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVJbmRleCkgXAogICAgIG1h
Y3JvKGJ5dGVjb2RlcykgXApAQCAtMTEyLDYgKzExNiw3IEBACiAgICAgbWFjcm8ocHJvcGVydHlJ
c0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKICAgICBtYWNybyhzZXQpIFwK
KyAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJj
ZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTUzNzc0KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHA6MTUzNzc0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit1bmlvbiBWYWx1ZSB7CisgICAgVCBkYXRhOworICAgIGNoYXIgYnl0ZXNbc2l6
ZW9mKFQpXTsKK307CisKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPERh
dGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2Yo
dWludDhfdCkpOworICAgIGlmICghYnVmZmVyLmdldCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKworUGFzc1JlZlB0cjxEYXRh
Vmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgaWYgKGJ5dGVP
ZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ2hl
Y2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7
CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0
ZUxlbmd0aCk7CisgICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRN
YXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKKyAgICBpZiAoY2hlY2tlZE1heC5o
YXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFW
aWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworfQorCitEYXRhVmlldzo6RGF0
YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0
ZU9mZnNldCkKKyAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQoreworfQorCitzdGF0aWMg
Ym9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19F
TkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0
bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNo
YXIqIHEpCit7CisgICAgY2hhciB0ZW1wID0gKnA7CisgICAgKnAgPSAqcTsKKyAgICAqcSA9IHRl
bXA7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQoreworICAg
IHN3YXBCeXRlcyhwLCBwICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0
cyhjaGFyKiBwKQoreworICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7CisgICAgc3dhcEJ5dGVzKHAg
KyAxLCBwICsgMik7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBw
KQoreworICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7CisgICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsg
Nik7CisgICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7CisgICAgc3dhcEJ5dGVzKHAgKyAzLCBw
ICsgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBz
aXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCit7CisgICAgaWYgKCFuZWVkVG9GbGlwQnl0
ZXMobGl0dGxlRW5kaWFuKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChzaXplKSB7
CisgICAgY2FzZSAxOgorICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIDI6CisgICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA4OgorICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHMo
dmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKGJleW9uZFJhbmdl
PFQ+KGJ5dGVPZmZzZXQpKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRh
dGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0
dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgorICAgIFZhbHVlPFQ+IHZh
bHVlOworICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1f
YmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKKyAgICBmbGlwQnl0ZXNJZk5l
ZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOworICAgIHJldHVybiB2
YWx1ZS5kYXRhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBEYXRhVmlldzo6c2V0
RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7
CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBp
dCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCB1bmFsaWduZWQgc3RvcmVzLgorICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKKyAgICB0ZW1w
VmFsdWUuZGF0YSA9IHZhbHVlOworICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRl
cywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOworICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFy
Kj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihU
KSk7Cit9CisKK2ludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7Cit9CisKK3VpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPHVp
bnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Cit9CisKK2ludDE2X3QgRGF0YVZpZXc6Omdl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKK30KKwordWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OworfQorCitpbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQzMl90
IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKworZmxvYXQgRGF0YVZpZXc6OmdldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKK30KKworZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBy
ZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQor
Cit2b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBz
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOworfQorCit2b2lk
IERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50MTZf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFW
aWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZp
ZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGludDMyX3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3Ojpz
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCit7
CisgICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKKyAgICBtX2J5dGVMZW5ndGggPSAwOwor
fQorCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiwzOSArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEYXRhVmlldy5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogCi1uYW1lc3Bh
Y2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24gVmFsdWUgewotICAgIFQgZGF0YTsK
LSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
T2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93
PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7Ci0g
ICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0
KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsK
LX0KK25hbWVzcGFjZSBKU0MgewogCiBEYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQogICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKQEAgLTY2LDE3OSAr
MzcsMTggQEAgRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZQogewogfQog
Ci1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYg
Q1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0
dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNo
YXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAg
ICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBw
KQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRl
c0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0gICAgc3dh
cEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0
cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAg
KyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVz
KHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYgKCFuZWVk
VG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNo
IChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRz
KHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlwQnl0ZXNG
b3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJl
eW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxv
YWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24g
YXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgotICAgIFZh
bHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlw
Qnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAg
IHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRh
Vmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVP
ZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3Rs
eSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQg
ZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsK
LSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBW
YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShzdGF0aWNf
Y2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMs
IHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBn
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0
YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKIHsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1mbG9hdCBE
YXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZmxvYXQ+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6OmdldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDhf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNl
dFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNo
b3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
c2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZf
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNl
dERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0K
LQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERh
dGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12
b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRh
PHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGZs
b2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKIH0K
IAotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK0pTQXJyYXlCdWZm
ZXJWaWV3KiBEYXRhVmlldzo6d3JhcChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKKyAgICByZXR1cm4gSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAg
ICBleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwg
YnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKKyAgICAgICAgYnl0ZUxlbmd0aCgpKTsKIH0KIAotdm9p
ZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwot
ICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM3NzQp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3Lmg6MTUzNzc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRh
Vmlld19oCisKKyNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBpbnQg
RXhjZXB0aW9uQ29kZTsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IHNsaWNlKGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICBpbnQ4X3Qg
Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDhf
dCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50
MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGludDE2X3QgZ2V0
SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
CisgICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsgfQorICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB1aW50MzJfdCBnZXRV
aW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdl
dFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAgdWludDMyX3QgZ2V0VWludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
CisgICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9CisgICAg
ZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZh
bHNlLCBlYyk7IH0KKyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBzZXRJbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2
X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBz
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAg
IHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50
MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCisgICAgdm9pZCBzZXRJbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7IH0KKyAgICB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQorICAgIHZvaWQg
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7CisKK3ByaXZhdGU6CisgICAgRGF0
YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUg
Ym9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRl
T2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRl
TGVuZ3RoOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0RGF0YSh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIHNldERhdGEodW5zaWduZWQg
Ynl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0aDsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzYgKzI2LDY2IEBACiAjaWZuZGVm
IERhdGFWaWV3X2gKICNkZWZpbmUgRGF0YVZpZXdfaAogCi0jaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CituYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMg
QXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOworICAgIAogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gc2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAg
IGludDhfdCBnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB1aW50OF90IGdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBnZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50
MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7IH0KLSAgICB1aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQz
Ml90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBn
ZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNl
dEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OyB9Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNl
dEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBm
bG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUg
Z2V0VHlwZSgpIGNvbnN0CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVh
bCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBU
eXBlRGF0YVZpZXc7CiAgICAgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRl
cigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQorICAgIHZpcnR1YWwg
SlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKyAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIGJleW9uZFJhbmdl
KHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQgPj0gbV9ieXRl
TGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7IH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KKyAgICBUIGdldCh1
bnNpZ25lZCBvZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBib29sKiBzdGF0dXMgPSAwKQorICAg
IHsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgaWYgKG9mZnNldCArIHNpemVv
ZihUKSA+IGJ5dGVMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICpzdGF0dXMgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gVCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KnN0YXR1cyA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IGJ5dGVMZW5ndGgoKSk7
CisgICAgICAgIHJldHVybiBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbigKKyAgICAgICAgICAgICpy
ZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9iYXNlQWRkcmVzcykg
KyBvZmZzZXQpLAorICAgICAgICAgICAgbGl0dGxlRW5kaWFuKTsKKyAgICB9CisgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNl
dCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHNldCh1bnNpZ25lZCBvZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBib29sKiBz
dGF0dXMgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgaWYg
KG9mZnNldCArIHNpemVvZihUKSA+IGJ5dGVMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICpz
dGF0dXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgKnN0YXR1cyA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9
IGJ5dGVMZW5ndGgoKSk7CisgICAgICAgICpyZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV9iYXNlQWRkcmVzcykgKyBvZmZzZXQpID0KKyAgICAgICAgICAgIGZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuKHZhbHVlLCBsaXR0bGVFbmRpYW4pOworICAgIH0KIAorcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiB9OwogCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRGF0YVZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKQEAgLTI3LDgxICsyNiw5IEBACiAjaWZuZGVmIEZsb2F0MzJBcnJheV9oCiAjZGVm
aW5lIEZsb2F0MzJBcnJheV9oCiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDMy
QXJyYXkgOiBwdWJsaWMgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoY29u
c3QgZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5
IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVk
LiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2Ny
aXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICB1c2luZyBUeXBlZEFycmF5QmFzZTxmbG9hdD46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQz
MkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRmxv
YXQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0MzJBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmll
bmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDMy
QXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUoY29uc3Qg
ZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
RmxvYXQzMkFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDMyQXJyYXk6OkZsb2F0MzJBcnJheShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGZsb2F0PihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFy
dCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5
OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5SW1wbDxGbG9hdDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0MzJBcnJheTsK
IAogI2VuZGlmIC8vIEZsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSw5OCArMTAs
MjUgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCiAjaWZuZGVmIEZsb2F0NjRBcnJheV9oCiAjZGVmaW5lIEZsb2F0NjRBcnJheV9o
CiAKLSNpbmNsdWRlICJUeXBlZEFycmF5QmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBGbG9hdDY0QXJyYXkgOiBwdWJsaWMgVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0
IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90
IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxs
aW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJy
YXlCYXNlPGRvdWJsZT46OnNldDsKLQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gVHlwZWRBcnJheUJhc2U8ZG91
YmxlPjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlC
YXNlPGRvdWJsZT46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsK
LSAgICB9Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEZsb2F0NjRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAKLSAgICAv
LyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xh
c3MgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjsKLX07Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShjb25zdCBkb3Vi
bGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZTxGbG9hdDY0QXJyYXk+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1GbG9hdDY0QXJyYXk6OkZsb2F0NjRBcnJheShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICA6IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJy
YXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3Rh
cnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8RmxvYXQ2NEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpGbG9hdDY0QXJyYXk7
CiAKICNlbmRpZiAvLyBGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoY29uc3QgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUq
PihiYXNlQWRkcmVzcygpKTsgfQorICAgIAorICAgIGJvb2wgc2V0KEdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldFJhbmdlKGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCisgICAg
eworICAgICAgICByZXR1cm4gc2V0UmFuZ2VJbXBsKAorICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YSksCisgICAgICAgICAgICBkYXRhTGVuZ3RoICogc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLAorICAgICAgICAgICAgb2Zmc2V0ICogc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB6ZXJvUmFuZ2Uo
dW5zaWduZWQgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHpl
cm9SYW5nZUltcGwob2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpLCBsZW5n
dGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHplcm9GaWxsKCkgeyB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOyB9CisgICAgCisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAg
IH0KKworICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4
IDwgdGhpcy0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gZGF0YSgpW2luZGV4XTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwg
dGhpcy0+bGVuZ3RoKCkpOworICAgICAgICBkYXRhKClbaW5kZXhdID0gQWRhcHRvcjo6dG9OYXRp
dmUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGNoZWNrSW5ib3VuZERhdGEodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBwb3MpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0aGlzLT5sZW5ndGgoKTsKKyAgICAgICAgcmV0dXJuIChvZmZzZXQgPD0gbGVuZ3Ro
CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPD0gbGVuZ3RoCisgICAgICAgICAgICAvLyBj
aGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zID49IG9mZnNldCk7Cisg
ICAgfQorICAgIAorICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQWRh
cHRvcjo6dHlwZVZhbHVlOworICAgIH0KKworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcq
IHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHJpdmF0ZToKKyAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJh
eVZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBi
eXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4g
PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGxlbmd0aCwgc2l6ZW9mKEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAor
ICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxl
bmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9m
KEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4g
PiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZl
cjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5n
dGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0
LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNp
Z25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQs
IGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0
QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9m
ZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5n
dGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNBcnJheUJ1ZmZlclZpZXcq
IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6d3JhcCgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEFkYXB0b3I6
OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50
eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVWYWx1ZSksIHRoaXMpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVh
ZGVyLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5OwogY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUs
OSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5n
dGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1
eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBB
cnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9
CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUudHlwZWRB
cnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIq
IGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEy
MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBU
aGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBm
b3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJs
ZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5n
dGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFj
dHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgog
ICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2LDkgQEAKICNpZm5kZWYgSW50OEFycmF5X2gKICNkZWZp
bmUgSW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4QXJyYXkg
OiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoY29uc3Qg
aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1
c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8K
LSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3
aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhB
cnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJh
eT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmll
d1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDg7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBN
YWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3Mg
VHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4
QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJ
bnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50
OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5PihsZW5ndGgpOwotfQotCi1JbnQ4QXJyYXk6
OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50
OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4
QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVy
biBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4g
SW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDhBcnJh
eTsKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDc3ICsyNiw5IEBA
CiAjaWZuZGVmIEludDE2QXJyYXlfaAogI2RlZmluZSBJbnQxNkFycmF5X2gKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDE2
X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0
KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MTY7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90
Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJh
eT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZB
cnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZB
cnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxp
bnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZf
dD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MTZB
cnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJh
c2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPElu
dDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBK
U0M6OkludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
LDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0y
Nyw3NCArMjYsOSBAQAogI2lmbmRlZiBJbnQzMkFycmF5X2gKICNkZWZpbmUgSW50MzJBcnJheV9o
CiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDMyQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19OwotCi1QYXNzUmVmUHRyPElu
dDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihsZW5ndGgpOwotfQot
Ci1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShjb25zdCBpbnQqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46
OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQot
SW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8
SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5n
IEpTQzo6SW50MzJBcnJheTsKIAogI2VuZGlmIC8vIEludDMyQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyLmgiCisKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZl
cjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZlciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlcil9OworCitKU0FycmF5QnVmZmVyOjpKU0Fy
cmF5QnVmZmVyKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGFycmF5QnVmZmVyKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9p
bXBsKGFycmF5QnVmZmVyLmdldCgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
dm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgbV9pbXBsKTsKK30KKworSlNBcnJheUJ1ZmZlciog
SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlcikKK3sKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1
bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyPih2
bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlcih2bSwgc3RydWN0dXJlLCBidWZmZXIpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywKKyAg
ICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5
U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVy
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVM
ZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAg
ICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSksIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6cHV0KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsK
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0
ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZm
ZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAg
ICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUg
cmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlcl9oCisKKyNpbmNsdWRl
ICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0FycmF5QnVmZmVyIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorcHJvdGVjdGVk
OgorICAgIEpTQXJyYXlCdWZmZXIoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorcHVibGljOgorICAg
IHN0YXRpYyBKU0FycmF5QnVmZmVyKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPik7CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGltcGwoKSBjb25zdCB7IHJl
dHVybiBtX2ltcGw7IH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAg
c3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
Citwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlC
dWZmZXIqIHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
KiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5jdGlvbiIsICZCYXNl
OjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90
eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCku
dG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAg
SlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBl
eGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0
dXJlKCksIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworfQorCitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQorewor
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7
CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
K3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsK
KyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1
YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisjaW5jbHVk
ZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3Rv
RnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5QnVm
ZmVyKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11c3Qg
YmUgYW4gYXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisg
ICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50
b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQor
ICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xp
Y2UoYmVnaW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVj
dCgpKSk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9i
amVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIq
IHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG5l
d0J1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQor
Citjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0geworICAg
ICJBcnJheUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQcm90
b3R5cGU6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgRG9udEVu
dW0sIDIpOworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhlYXApKQor
ICAgICAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJv
dG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAor
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3RhdGlj
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZv
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9IHsK
KyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25z
dHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsCisg
ICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3Ro
IDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgor
ICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgs
IGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgw
LCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2Rl
ID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAo
bW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0
aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFzV29y
ZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVk
IGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlmICghdHJ5RmFzdENhbGxv
YyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0aCAq
IGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0
PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJy
YXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAor
ICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCisgICAgLCBtX2xl
bmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIElu
ZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5
QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJy
YXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRl
eHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0
LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1f
bGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7
Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAg
ICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdmVyc2l6
ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXpl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAg
ICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIo
KS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJy
YXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJv
bGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBl
ZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAorICAgICAgICAgICAgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmll
dzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3Ry
aWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkg
cHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpT
QXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
b2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywg
IkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsK
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNB
cnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAor
ICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZm
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRl
UHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3Ro
L2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3gu
CisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBh
cnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJh
eS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9k
ZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkp
OworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAg
ICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBzZXJ2
ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9mIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1wbGF0
ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3JlLXZp
c2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUgdXNl
cyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZmZXIK
Ky8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3Lgor
Ly8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVzdCBh
IG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhhdmlu
ZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0IHRv
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YKKy8v
IHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9mIG9i
ZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBub3cu
CisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBtdWNo
IGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxlLCBk
ZXNwaXRlIGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKworLy8g
VHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBi
aWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRo
YXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVj
aWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAg
IC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8g
YSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RU
eXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5
IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8g
QSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28g
bXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3Qg
dGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2
ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJz
aXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAg
ICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6
ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEg
dHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5n
SGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUg
bmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcg
cG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3Ig
YWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJh
eS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0ZWZ1
bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJW
aWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVm
ZmVyVmlldyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3
YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0
ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMg
dmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydz
CisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0g
d2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVM
aW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVu
Z3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3Ro
ICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAg
ICYgfihzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAg
IGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07Cisg
ICAgICAgIAorICAgICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0dXJlKiwgdWlu
dDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRpb25Nb2RlID0g
WmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAg
ICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zdHJ1Y3R1cmU7IH0KKyAg
ICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7
IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVy
Zmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1
Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0
aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1f
YnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25z
dHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
CitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIsIG5h
dGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhlIGRhdGEgaW50
byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7CisgICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigpOworICAgIAor
ICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5zaWduZWQgYnl0
ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwor
ICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJh
eUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZN
b2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX21vZGUp
OyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBt
X2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVy
Vmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9t
b2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyKiBKU0FycmF5
QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5
QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNBcnJh
eUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgpLT5nZXRUeXBl
ZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5l
dXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWduZWQgSlNBcnJh
eUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxU
eXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwg
bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90
Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOwor
ICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0YSk7
CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2luY2x1ZGUgIkFy
cmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0
cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1IEBAIGJvb2wg
SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3
KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRy
PEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVy
VmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJy
YXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYgKzM3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhlY1N0YXRlOwor
Y2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsKIGNs
YXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTM0
LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJl
KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCiAgICAg
ICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5
cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlw
ZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoKIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0
VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJF
cnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3IiwgJkJh
c2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisKK0pT
RGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0
KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmll
dzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJS
YW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7CisgICAgICAg
IHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwg
Ynl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZpZXcqIHJlc3Vs
dCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXc+KHZtLmhl
YXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3Ojpj
cmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQorewor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitKU0Rh
dGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWdu
ZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQs
IHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gSlNEYXRhVmlldzo6dHlwZWRJbXBs
KCkKK3sKKyAgICByZXR1cm4gRGF0YVZpZXc6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgp
LCBsZW5ndGgoKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAor
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZh
bHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCksIERvbnRFbnVtIHwgUmVhZE9ubHkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNB
cnJheUJ1ZmZlclZpZXcqKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQor
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUlt
cGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LT50eXBlZEltcGwoKTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1
cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNE
YXRhVmlld19oCisKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3IDogcHVibGlj
IEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJW
aWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gMTsKKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYp
OworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoCisgICAgICAg
IEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICAKKyAgICAv
LyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxseSB3b3JrOyB0aGVzZSBhcmUganVz
dCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlv
biB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZVVuaW5pdGlh
bGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0
aWMgSlNEYXRhVmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxEYXRhVmlldz4gdHlw
ZWRJbXBsKCk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJy
YXlTdG9yYWdlVHlwZSA9IFR5cGVEYXRhVmlldzsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKKworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5
cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgCitwdWJsaWM6CisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xh
c3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNE
YXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5
cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2lu
Y2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0g
eworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6
ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5
cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdp
biBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50
OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdl
dFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBk
YXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAg
ICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAg
ICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAg
ICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMy
ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90
b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0
RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
QGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorewor
fQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBw
cm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3
UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93
blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0
YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9i
amVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmll
d1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZp
ZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUqPihvYmplY3QpLAorICAg
ICAgICBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
SlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50
aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1l
dGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1l
bnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0KS4i
KSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
VUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRs
ZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkg
PiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGxpdHRsZUVuZGlh
biA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXct
Pmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRl
T2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0
dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAgIAorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8
SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVj
ZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IHR3byBhcmd1
bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gQWRh
cHRvcjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVh
bihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAg
aWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNj
ZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0
bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4
ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8
VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVj
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQ4
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBzZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhl
Yyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxV
aW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9h
dDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjaW5jbHVkZSAi
SlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9oCisjZGVmaW5l
IEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5h
bE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisK
K3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcigK
KyAgICAgICAgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3UHJvdG90eXBl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
bG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNGbG9hdDMyQXJy
YXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlz
LmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTRmxvYXQ2NEFycmF5X2gKKyNkZWZpbmUgSlNGbG9hdDY0QXJy
YXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXBy
ZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFT
Y3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOwor
Ly8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4
X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVj
dHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZy
b20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8v
ICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3Rh
bCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxl
c3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21l
IGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBh
bHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBh
bmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBp
biB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBn
b3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0
aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5
LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1
bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRy
b2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3Vs
ZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4
YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5
cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBK
U0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91
YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0
YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGlj
IEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJs
ZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3Ry
dWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxp
emVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsK
KyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1Y3R1cmUqLCBK
U0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGlt
cGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRl
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUq
IHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKyAgICB0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBt
ZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQg
cmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5n
dGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlj
a2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBt
X2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAK
KyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZh
bHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhR
dWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVk
VmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNr
bHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJ
bmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFk
YXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SW5kZXhR
dWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSBqc1ZhbHVlKQorICAg
IHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0
aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZl
VmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3RoCisgICAgICAgICAg
ICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92
ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zmc2V0OworICAgIH0K
KyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYgaXQgcmV0dXJucyBm
YWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBleGNlcHRpb24uCisg
ICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5k
IGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUoRXhlY1N0YXRl
KiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGlm
IGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJvd24gYW4gZXhj
ZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRh
cHRvcjo6Vmlld1R5cGU+IHR5cGVkSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRv
cjo6Vmlld1R5cGU6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5ndGgoKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvLCBOb25B
cnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVk
QXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0Nl
bGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1
bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhlYXAgaWYKKyAg
ICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBpbiB0aGUgR0Mg
aGVhcC4KKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZm
ZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBl
ZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2lubGluZSBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0
b05hdGl2ZVR5cGVkVmlldyhKU1ZhbHVlIHZhbHVlKQoreworICAgIHR5cGVuYW1lIEFkYXB0b3I6
OkpTVmlld1R5cGUqIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PHR5cGVuYW1lIEFkYXB0b3I6OkpT
Vmlld1R5cGUqPih2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisK
KyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVk
ZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0
YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXNfaAorI2RlZmluZSBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisKKyNpbmNsdWRlICJFcnJvci5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTT2JqZWN0KiBw
cm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAg
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlv
bih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3Rv
ciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAgICAgICBWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKEpTQXJyYXlCdWZm
ZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+YXJndW1l
bnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXIt
PmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
MDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAg
IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNp
emUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMg
bm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5n
dGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50
U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFz
czo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAg
IH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlw
ZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBj
b25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlzIGNy
ZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdlci4g
VGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWlu
aXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWlj
Q2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNpZ25lZCBv
ZmZzZXQ7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAg
ICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7CisgICAgICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBvZmZzZXQgPSAwOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAg
ICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
CisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxp
emVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFyZXN1bHQtPnNldChleGVjLCBvYmplY3QsIG9mZnNldCwgbGVuZ3RoKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAg
IAorICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUuIikpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ29uc3RydWN0
VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAg
ICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENhbGxUeXBlSG9z
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2lu
Y2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1
ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3RydWN0
aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
Q29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3Ro
LCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29udGV4dCkgewor
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJl
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgZXhl
Yy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KSwKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dDo6RG9udEluaXRpYWxpemUpOworICAgIGlm
ICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgp
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250
ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNy
ZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFz
c2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpIHsKKyAgICAg
ICAgdGhyb3dFcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVj
LT52bSgpLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NF
UlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pihl
eGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52
bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVm
UHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4
dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgpLCBpbXBs
LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsCisgICAgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4g
aW1wbCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJl
LCBpbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFuZ2UoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoY2FuQWNj
ZXNzUmFuZ2VRdWlja2x5KG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSYW5nZSBj
b25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzIikpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3RlbXBsYXRl
PHR5cGVuYW1lIE90aGVyVHlwZT4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnNldFdpdGhTcGVjaWZpY1R5cGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBPdGhlclR5cGUq
IG90aGVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBIYW5k
bGUgdGhlIGhpbGFyaW91cyBjYXNlOiB0aGUgYWN0IG9mIGdldHRpbmcgdGhlIGxlbmd0aCBjb3Vs
ZCBoYXZlIHJlc3VsdGVkCisgICAgLy8gaW4gbmV1dGVyaW5nLiBXZWxsLCBuby4gVGhhdCdsbCBu
ZXZlciBoYXBwZW4gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUKKyAgICAvLyBzaWRlLWVmZmVjdHMg
b24gZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgdHlwZWQgYXJyYXkuIEJ1dCBwcmVkaWN0aW5nIHdo
ZXJlIHRoZXJlCisgICAgLy8gYXJlLCBvciBhcmVuJ3QsIHNpZGUtZWZmZWN0cyBpcyBhIGZvb2wn
cyBnYW1lIHNvIHdlIHJlc29ydCB0byB0aGlzIGNoZWFwCisgICAgLy8gY2hlY2suIFdvcnN0IGNh
c2UsIGlmIHdlJ3JlIHdyb25nLCBwZW9wbGUgc3RhcnQgc2VlaW5nIGxlc3MgdGhpbmdzIGdldCBj
b3BpZWQKKyAgICAvLyBidXQgd2Ugd29uJ3QgaGF2ZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHku
CisgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgIAor
ICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXItPmxlbmd0aCgpICE9IGxlbmd0aCkgewor
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBv
ZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07
KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4UXVp
Y2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFz
c0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0
eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3Qg
bWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0
aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtZW1jcHko
dHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVkVmVjdG9yKCksIG90aGVyLT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNo
IChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAg
ICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50OEFycmF5Kj4o
b2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBy
ZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4ob2Jq
ZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1
cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0
KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4g
c2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4ob2JqZWN0KSwg
b2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0
dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkq
PihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+
KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAg
IHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4o
b2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAg
IHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+
KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkq
PihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAg
IGNhc2UgVHlwZURhdGFWaWV3OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBv
ZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFdl
IGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9uJ3QuCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFzZXRJbmRleFF1aWNrbHkoZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5nZXQoZXhlYywg
aSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xv
dCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3Ro
KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlO
YW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4
ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xv
dC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNP
YmplY3QtPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFt
ZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAm
JiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAorICAg
IEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVhcnMgdG8gc2lt
cGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAg
ICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUu
YXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsK
KyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihvYmplY3QpOworICAgIAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlv
ci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZp
bmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZl
biBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1l
LmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiBy
ZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1v
bmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Is
IHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgK
KyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJv
cGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghdGhpc09iamVjdC0+Y2Fu
R2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShwcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisg
ICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNl
bGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhblNldEluZGV4
UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94
IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisg
ICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
dGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gY2VsbC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsK
KyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAg
ICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgCisgICAgQmFz
ZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBt
b2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9sZW5ndGg7ICsraSkKKyAg
ICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFy
cmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAor
ICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJh
eTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVj
dG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5
cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlz
aXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAg
CisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KKyAgICAgICAgJiYg
dmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAg
ICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAgICAgIHZvaWQq
IG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6
ZSgpKTsKKyAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5i
eXRlU2l6ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7Cisg
ICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkp
OworICAgIH0KKyAgICAKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNPYmplY3QsIHZp
c2l0b3IsIHRva2VuKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNB
cnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUg
Y2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3Mg
dG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQor
ICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBH
QyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5v
dWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAg
ICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIg
aW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRl
ZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAv
LyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhl
cmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3Jz
dCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJh
eXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBh
bmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHBy
aW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAu
IEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNr
LCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRp
b25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6
OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsK
KyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisg
ICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCByZWNvcmQsIGluIHRoZSBidXR0ZXJmbHksIHdoYXQgb3VyIG9mZnNl
dCBpcy4KKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5
CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJ
bmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVt
b3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkg
PQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5t
X3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAg
ICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5t
X21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVu
Z3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVk
QXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAi
c3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJp
Z2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFs
bG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVj
dC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgV2Fz
dGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5k
ZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9
IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwg
YnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46Omdl
dFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBjcmVhdGUoCisgICAg
ICAgIEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5l
c19oCisKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIK
KyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3
Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2
ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVj
LT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwor
ICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3Qq
PihleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3Vt
ZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikpOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAor
ICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkp
OworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0Ns
YXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVy
IHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+
YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAg
ICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBl
bHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEdl
dCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFzc2VydCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNo
YW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7Cisg
ICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAg
ICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdpbiA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAg
ICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5kID0gdGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAg
ICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBB
U1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0
ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5k
ID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAg
CisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBl
bmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNl
dCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0gdGhpc09iamVjdC0+bGVuZ3RoKCkpOworICAg
IAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgY2FsbGVlLT5nbG9iYWxPYmpl
Y3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAg
ICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+
Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0NsYXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAg
bGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50U2l6ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlz
aENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpOworICAg
IAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQ8Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3
Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVh
cCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
ZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmll
d0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTUgKzQ5LDI2IEBA
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FQSVdyYXBwZXJPYmplY3Qu
aCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQm91bmRGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3
LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVk
ZSAiSlNOYW1lU2NvcGUuaCIKICNpbmNsdWRlICJKU09OT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5o
IgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCkBAIC0y
MTQsNiArMjI1LDMwIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8K
ICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+dm0oKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKICAg
ICBtX29iamVjdFByb3RvdHlwZS0+cHV0RGlyZWN0QWNjZXNzb3IoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgQWNjZXNzb3IgfCBEb250
RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlw
ZVdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsK
KyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3Rv
dHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50
MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50MTZBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTSW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhB
cnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDhBcnJheVByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
KSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAg
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNV
aW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
VWludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJv
dG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDY0
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdl
dCgpKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5
cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZShleGVj
LT52bSgpLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZl
clN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTSW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTSW50MzJBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0uc3RydWN0dXJlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLmdldCgpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBl
ZCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWlu
dDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQxNkFycmF5OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVGbG9hdDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJB
cnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlRmxvYXQ2NCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNG
bG9hdDY0QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5nZXQoKSkpOwogCiAgICAg
bV9uYW1lU2NvcGVTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTTmFtZVNjb3BlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKICAgICBtX2FjdGl2
YXRpb25TdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQWN0aXZhdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CkBAIC0zMTgsNiArMzUzLDI3
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KIAogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5K
U09OLCBKU09OT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgSlNPTk9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRF
bnVtKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuTWF0aCwgTWF0aE9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIE1hdGhP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpLCBEb250RW51bSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
KiBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVh
dGUodGhpcywgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fYXJyYXlCdWZmZXJQcm90
b3R5cGUuZ2V0KCkpOworICAgIEZpeGVkQXJyYXk8SW50ZXJuYWxGdW5jdGlvbiosIE5VTUJFUl9P
Rl9UWVBFRF9BUlJBWV9UWVBFUz4gdHlwZWRBcnJheUNvbnN0cnVjdG9yczsKKyAgICB0eXBlZEFy
cmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDgpXSA9IEpTSW50OEFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSwgIkludDhBcnJheSIpOworICAg
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MTYpXSA9IEpTSW50MTZBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5nZXQoKSwgIkludDE2
QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDMyKV0g
PSBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50MzJBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MzIpXS5wcm90b3R5cGUu
Z2V0KCksICJJbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVVaW50OCldID0gSlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1Vp
bnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4
KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0gPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0
KCksICJVaW50OENsYW1wZWRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9J
bmRleChUeXBlVWludDE2KV0gPSBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlz
LCBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50MTZBcnJheSIpOworICAgIHR5cGVkQXJy
YXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDMyKV0gPSBKU1VpbnQzMkFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZSh0aGlzLCBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50MzJBcnJh
eSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQzMildID0g
SlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxvYXQzMkFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90
eXBlLmdldCgpLCAiRmxvYXQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVGbG9hdDY0KV0gPSBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDY0QXJyYXkiKTsKKyAgICB0
eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0gPSBKU0RhdGFWaWV3
Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5nZXQoKSwgIkRhdGFW
aWV3Iik7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91
dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkFycmF5QnVmZmVy
LCBhcnJheUJ1ZmZlckNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCB0eXBlZEFycmF5SW5kZXggPSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7IHR5cGVk
QXJyYXlJbmRleC0tOykgeworICAgICAgICBtX3R5cGVkQXJyYXlzW3R5cGVkQXJyYXlJbmRleF0u
cHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRB
cnJheUluZGV4XSwgRG9udEVudW0pOworICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihleGVjLT52bSgpLCBJZGVudGlmaWVyKGV4ZWMsIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlw
ZWRBcnJheUluZGV4XS0+bmFtZShleGVjKSksIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdHlwZWRB
cnJheUluZGV4XSwgRG9udEVudW0pOworICAgIH0KIAogICAgIEdsb2JhbFByb3BlcnR5SW5mbyBz
dGF0aWNHbG9iYWxzW10gPSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuTmFOLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgogI2luY2x1ZGUgIlZNLmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5h
bC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMTY2LDYgKzE2NywxNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9yZWdFeHBTdHJ1Y3R1cmU7
CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmU7CiAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlOwor
ICAgIAorICAgIFdyaXRlQmFycmllcjxKU0FycmF5QnVmZmVyUHJvdG90eXBlPiBtX2FycmF5QnVm
ZmVyUHJvdG90eXBlOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fYXJyYXlCdWZmZXJT
dHJ1Y3R1cmU7CisgICAgCisgICAgc3RydWN0IFR5cGVkQXJyYXlEYXRhIHsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBwcm90b3R5cGU7CisgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZTsKKyAgICB9OworICAgIAorICAgIEZpeGVkQXJyYXk8VHlwZWRBcnJh
eURhdGEsIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUz4gbV90eXBlZEFycmF5czsKICAgICAg
ICAgCiAgICAgdm9pZCogbV9zcGVjaWFsUG9pbnRlcnNbU3BlY2lhbDo6VGFibGVTaXplXTsgLy8g
U3BlY2lhbCBwb2ludGVycyB1c2VkIGJ5IHRoZSBMTEludCBhbmQgSklULgogCkBAIC0zMzAsNiAr
MzQxLDE0IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cE1hdGNoZXNBcnJheVN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlLmdldCgp
OyB9CiAgICAgU3RydWN0dXJlKiByZWdFeHBTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3Jl
Z0V4cFN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAg
ICAKKyAgICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBhcnJheUJ1ZmZlclByb3RvdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUuZ2V0KCk7IH0KKyAgICBTdHJ1Y3R1
cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclN0
cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogdHlwZWRBcnJheVN0cnVjdHVy
ZShUeXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlw
ZWRBcnJheXNbdG9JbmRleCh0eXBlKV0uc3RydWN0dXJlLmdldCgpOworICAgIH0KIAogICAgIHZv
aWQqIGFjdHVhbFBvaW50ZXJGb3IoU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50OEFycmF5X2gKKyNkZWZpbmUgSlNJbnQ4
QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQ4
QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDE2QXJyYXlf
aAorI2RlZmluZSBKU0ludDE2QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNJbnQzMkFycmF5X2gKKyNkZWZpbmUgSlNJbnQzMkFycmF5X2gKKworI2luY2x1ZGUg
IkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MzJBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lO
Rk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZSMjQ29uc3RydWN0b3I6OkJh
c2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQ29uc3RydWN0
b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJheSk7
CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOworTUFL
RV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkpOwor
TUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsKK01B
S0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRhVmlldyk7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAor
I2RlZmluZSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorCisjaW5jbHVkZSAiSlNEYXRhVmll
dy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5
Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8
SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheUNvbnN0
cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWlu
dDhBcnJheT4gSlNVaW50OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRB
cnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFy
cmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2
NEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNEYXRhVmlldz4gSlNEYXRhVmlld0NvbnN0cnVjdG9yOworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKKworI2lu
Y2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lO
Rk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNQcm90
b3R5cGU6OnNfaW5mbyA9IHsjdHlwZSAiUHJvdG90eXBlIiwgJkpTIyN0eXBlOjpCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI1Byb3RvdHlwZSl9CisKK01B
S0VfU19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19J
TkZPKEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5G
TyhVaW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8o
RmxvYXQ2NEFycmF5KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlQcm90b3R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJh
eVByb3RvdHlwZXNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZTxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlQcm90b3R5cGU7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MTZBcnJheT4gSlNJbnQx
NkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OEFycmF5PiBKU1VpbnQ4QXJyYXlQcm90b3R5
cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDhDbGFt
cGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJyYXlQcm90
b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTVWludDMy
QXJyYXk+IEpTVWludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDY0QXJyYXk+
IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisK
KyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2Rl
ZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8g
SlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJh
eTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNBcnJh
eSl9CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lO
Rk8oSW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVk
KTsKK01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lO
Rk8oRmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheXNfaAor
I2RlZmluZSBKU1R5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1Vp
bnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9y
PiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMy
QWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OEFycmF5X2gKKworI2luY2x1ZGUg
IkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4
Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhDbGFt
cGVkQXJyYXlfaAorI2RlZmluZSBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQxNkFycmF5X2gKKyNkZWZpbmUg
SlNVaW50MTZBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAv
LyBKU1VpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNVaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNU
eXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25zX2gKIAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJy
YXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZl
clN0cnVjdHVyZSgpLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8
SlNBcnJheUJ1ZmZlcj4ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXJfaAorI2RlZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJI
YW5kbGUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUg
cmVsYXRpb25zaGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJz
IGluIEphdmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0
IGl0IGlzIHdoYXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlz
IHByZXR0eSBzaW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0
aGVuIHRoZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4g
QXJyYXlCdWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVh
ZHkgYmVlbiBjcmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUK
Ky8vICAgb25lLgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBU
eXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAg
IAorICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIEFycmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAs
MTMgKzIzMCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hl
YWRlcigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKCkpOworICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5k
ZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hl
YWRlcihjb25zdCBKU0NlbGwqKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4
ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVl
cmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRh
YmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKQEAgLTEwNCw2ICsxMDUsMTcgQEAgaW5s
aW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uYwogICAgICAgICB2bSwgdWlkLCBh
dHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwogfQogCitpbmxpbmUgYm9v
bCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QK
K3sKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpLT5tb2RlKCkgPT0g
V2FzdGVmdWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAg
ICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9i
amVjdCgpID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUg
VHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
ICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBW
aWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0
eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlw
ZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAg
ICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlw
ZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUg
dG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVl
LmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAg
ICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9E
b3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJn
LCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7
CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3
VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMg
Y29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAg
IHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBl
IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUo
dmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBK
U1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9
IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKFFOYU4pOworICAgICAgICByZXR1
cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91
YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFwdG9yOworc3RydWN0IEludDE2
QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3Ry
dWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBV
aW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFw
dG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJh
eVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4g
VWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZB
ZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQz
MkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8Rmxv
YXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFt
cGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+
IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFk
YXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZs
b2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0
b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5LCBKU0ludDhB
cnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVk
QXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2
PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxp
bnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0
IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDhfdCwgVWludDhB
cnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9y
IDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWlu
dDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdy
YWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJyYXks
IFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJh
eUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMy
PiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRv
dWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKwor
c3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOwor
ICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1Vp
bnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlU
eXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4
X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
dmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAo
dmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsK
KyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1
ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNW
YWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigp
IHsgfQorVHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBU
eXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVjU3RhdGU7Citj
bGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2NsYXNzIFR5cGVk
QXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNvbnRyb2xsZXI+
IHsKK3B1YmxpYzoKKyAgICBUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xs
ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURl
c2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51
bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUlu
dDgsCi0gICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBl
ZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5
VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0g
ICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7
Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0g
ICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkK
LSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAg
ICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0
KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQot
ICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXpl
X3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVu
dW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5z
aWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5j
YXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVy
biAwOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiAmSlNJbnQ4QXJyYXk6OnNf
aW5mbzsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQ4QXJyYXk6
OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiAmSlNV
aW50OENsYW1wZWRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBy
ZXR1cm4gJkpTSW50MTZBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAg
ICAgcmV0dXJuICZKU1VpbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50MzI6Cisg
ICAgICAgIHJldHVybiAmSlNJbnQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDMy
OgorICAgICAgICByZXR1cm4gJkpTVWludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICByZXR1cm4gJkpTRmxvYXQzMkFycmF5OjpzX2luZm87CisgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuICZKU0Zsb2F0NjRBcnJheTo6c19pbmZvOwor
ICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gJkpTRGF0YVZpZXc6OnNfaW5m
bzsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5
cGVkQXJyYXk6CisgICAgICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmlu
dCgiVHlwZUludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZVVpbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVV
aW50OENsYW1wZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxv
YXQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAg
b3V0LnByaW50KCJUeXBlRmxvYXQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBl
RGF0YVZpZXc6CisgICAgICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlw
ZWRBcnJheVR5cGVfaAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitzdHJ1Y3QgQ2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAg
ICBOb3RUeXBlZEFycmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBl
VWludDhDbGFtcGVkLAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJ
bnQzMiwKKyAgICBUeXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0
LAorICAgIFR5cGVEYXRhVmlldworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlf
VFlQRVMgVHlwZURhdGFWaWV3CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7
Cit9CisKK2lubGluZSBib29sIGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlw
ZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVk
QXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBl
ZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlw
ZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmll
dzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBl
VWludDE2OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKTsKKworaW5saW5lIGJv
b2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4
Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
Y2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6
CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNs
dWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRv
cnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAt
MjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWludDhBcnJheV9oCiAjZGVmaW5lIFVpbnQ4QXJyYXlf
aAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50
ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hl
biBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8v
IG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQg
ZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRB
cnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdU
eXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAg
ICB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBN
YWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3Mg
VHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVp
bnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46
OmNyZWF0ZTxVaW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgp
OwotfQotCi1VaW50OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQot
Ci1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwg
ZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIK
IAogdXNpbmcgSlNDOjpVaW50OEFycmF5OwogCiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJy
YXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyNSBA
QAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKICNpZm5kZWYgVWludDhDbGFtcGVkQXJyYXlfaAogI2RlZmluZSBVaW50OENsYW1wZWRB
cnJheV9oCiAKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDogcHVi
bGljIFVpbnQ4QXJyYXkgewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1
c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8K
LSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3
aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAvLyBJdCdzIG9ubHkgbmVlZGVkIHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2QgaWYg
dGhlIGFycmF5Ci0gICAgLy8gd2FzIGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVmYXVs
dCBpbml0aWFsaXphdGlvbiBwYXRocwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnku
Ci0gICAgaW5saW5lIHZvaWQgemVyb0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OjpzZXQ7Ci0gICAgaW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpOwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0
dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVV
aW50OENsYW1wZWQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1wZWRB
cnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFz
cy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0
ZTxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6
Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENs
YW1wZWRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+
OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi12
b2lkIFVpbnQ4Q2xhbXBlZEFycmF5Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAsIGxl
bmd0aCgpKTsKLX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGluZGV4
LCBkb3VibGUgdmFsdWUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAgICAg
dmFsdWUgPSAwOwotICAgIGVsc2UgaWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9IDI1
NTsKLSAgICBkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUp
KTsKLX0KLQotVWludDhDbGFtcGVkQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotOiBVaW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3Vi
YXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUlt
cGw8VWludDhDbGFtcGVkQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5OwogCiAjZW5kaWYgLy8gVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEs
MTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3
LDc2ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQxNkFycmF5X2gKICNkZWZpbmUgVWludDE2QXJyYXlf
aAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDogcHVibGljIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQx
Nl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVz
ZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwot
ICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdp
dGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2
QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5n
IFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlw
ZVVpbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFycmF5KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZy
aWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVp
bnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGxlbmd0
aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoY29u
c3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWlu
dDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxV
aW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQ8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5OjpVaW50MTZB
cnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVy
biBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVp
bnQxNkFycmF5OwogCiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEs
MTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3
LDc2ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQzMkFycmF5X2gKICNkZWZpbmUgVWludDMyQXJyYXlf
aAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQzMkFycmF5IDogcHVibGljIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQz
Ml90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVz
ZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwot
ICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdp
dGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMy
QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5n
IFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlw
ZVVpbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQzMkFycmF5KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZy
aWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVp
bnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGxlbmd0
aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoY29u
c3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWlu
dDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxV
aW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQ8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQzMkFycmF5OjpVaW50MzJB
cnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVy
biBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5
PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheUltcGw8VWludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVp
bnQzMkFycmF5OwogCiAjZW5kaWYgLy8gVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAK
ICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5j
bHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCiAjaW5jbHVkZSAiU3RyaWN0
RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCkBAIC04Nyw2ICs4
OCw3IEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclQKIGV4dGVybiBj
b25zdCBIYXNoVGFibGUgYXJyYXlQcm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFi
bGUgYm9vbGVhblByb3RvdHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFi
bGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGFWaWV3VGFibGU7CiBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIGRhdGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVj
dG9yVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7CkBA
IC0xNDUsNiArMTQ3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgICwgYXJyYXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFy
cmF5Q29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmFycmF5UHJvdG90eXBlVGFibGUpKQogICAgICwgYm9vbGVhblByb3Rv
dHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkp
CisgICAgLCBkYXRhVmlld1RhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGFWaWV3VGFi
bGUpKQogICAgICwgZGF0ZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkp
CiAgICAgLCBkYXRlQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRl
Q29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFz
aFRhYmxlPihKU0M6OmVycm9yUHJvdG90eXBlVGFibGUpKQpAQCAtMjU4LDYgKzI2MSwxMCBAQCBW
TTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJ
VCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRl
KCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJl
ZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8g
d29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5l
dyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkBAIC0yODks
NiArMjk2LDcgQEAgVk06On5WTSgpCiAgICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKICAgICBhcnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYm9v
bGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGRhdGFWaWV3VGFibGUtPmRl
bGV0ZVRhYmxlKCk7CiAgICAgZGF0ZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVDb25z
dHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGVycm9yUHJvdG90eXBlVGFibGUtPmRl
bGV0ZVRhYmxlKCk7CkBAIC0zMDYsNiArMzE0LDcgQEAgVk06On5WTSgpCiAgICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7CiAg
ICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJs
ZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRhVmlld1RhYmxl
KSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkpOwog
ICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlQ29uc3RydWN0b3JUYWJs
ZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihlcnJvclByb3RvdHlw
ZVRhYmxlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRl
ICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJUeXBl
ZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8
d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC02OSwxMyArNjksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7
CiAgICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIEZsb2F0MzJBcnJheTsKLSAgICBjbGFz
cyBGbG9hdDY0QXJyYXk7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRp
ZmllclRhYmxlOwotICAgIGNsYXNzIEludDhBcnJheTsKLSAgICBjbGFzcyBJbnQxNkFycmF5Owot
ICAgIGNsYXNzIEludDMyQXJyYXk7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3Mg
SlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC05MywxMCArODgsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVn
RXhwOwogI2VuZGlmCi0gICAgY2xhc3MgVWludDhBcnJheTsKLSAgICBjbGFzcyBVaW50OENsYW1w
ZWRBcnJheTsKLSAgICBjbGFzcyBVaW50MTZBcnJheTsKLSAgICBjbGFzcyBVaW50MzJBcnJheTsK
ICAgICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0yMzAsNiAr
MjIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlD
b25zdHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBl
VGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlOwor
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGU7CiAgICAgICAgIGNvbnN0IEhh
c2hUYWJsZSogZGF0ZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1
Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7
CkBAIC0zOTAsNiArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJv
ZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFi
YXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29u
dHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1f
cmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2Nh
dG9yOwogCkBAIC00MjgsNTUgKzQyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9CiAg
ICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3Ry
aW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQogCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAgICAg
ICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1f
IyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNz
SW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2Ns
YXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJy
YXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0
b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsK
LSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAgICBy
ZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAgICAg
IHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAgIHJl
dHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAg
ICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KICAgICAgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2FwaUxvY2stPmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkgfHwgZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsK
QEAgLTUxMCwxNiArNDU0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9pbkRl
ZmluZU93blByb3BlcnR5OwogICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsK
ICAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7Ci0K
LSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAg
ICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBl
ZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAg
VHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5
cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBl
ZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKICAgICB9OwogCiAjaWYg
RU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorPDw8PDw8PCAu
bWluZQorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgdGhlIG5vdGlvbiBv
ZiBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVjdCB0aGF0IGNhbiBiZSBtYXJrZWQgRGVmZXJyZWQs
CisgICAgICAgICAgd2hpY2ggaXMgbGlrZSBhIHNwZWNpYWwtcHVycG9zZSB1cHJlZi4KKyAgICAg
ICAgCisgICAgICAgIC0gQWRkZWQgYSBjb21tb24gYnl0ZSBmbGlwcGVyLgorCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0RlZmVycmFibGVS
ZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJh
c2U6OnJlZik6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6aGFzT25l
UmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpyZWZDb3VudCk6
CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6aXNEZWZlcnJlZCk6Cisg
ICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6RGVmZXJyYWJsZVJlZkNvdW50
ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjp+RGVmZXJy
YWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6
OnNldElzRGVmZXJyZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6
OmRlcmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OnNldElzRGVmZXJy
ZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6RGVmZXJyYWJsZVJlZkNv
dW50ZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6fkRlZmVycmFibGVS
ZWZDb3VudGVkKToKKyAgICAgICAgKiB3dGYvRmxpcEJ5dGVzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbik6CisgICAgICAgIChXVEY6OmZsaXBC
eXRlcyk6CisKKz09PT09PT0KIDIwMTMtMDgtMTIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJv
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBpc01haW5UaHJlYWQgaW1wbGVtZW50YXRpb24g
d2l0aCBVU0UoV0VCX1RIUkVBRCkKQEAgLTE5LDYgKzUxLDcgQEAKIAogICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06IEFkZCBtaXNzaW5nIGhlYWRlciBmaWxlLgogCis+Pj4+Pj4+IC5yMTUz
OTUwCiAyMDEzLTA4LTA5ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5n
LmNvbT4KIAogICAgICAgICBNYWtlIGF0b2IoKSB0aHJvdyBhbiBJbnZhbGlkQ2hhcmFjdGVyRXJy
b3Igb24gZXhjZXNzIHBhZGRpbmcgY2hhcmFjdGVycwpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw4
IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRD
QzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsK
KwkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZC
NEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKKwkJMEYyQjY2QTcx
N0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRl
cy5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0
M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKIAkJMEY4RjJCOTExNzJFMDBGQzAw
N0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRp
b25UaHJlYWQuaCAqLzsgfTsKIAkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8qIENvbXBpbGF0
aW9uVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi87
IH07CkBAIC0yODAsNiArMjgyLDggQEAKIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0
aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE0MTdC
NkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
ZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBC
eXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
YXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjhGMTcyRTAw
RjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
b21waWxhdGlvblRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYy
QjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb21waWxhdGlvblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjMw
LDYgKzYzNCw3IEBACiAJCQkJQThBNDcyN0IxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxOdW1i
ZXIuY3BwICovLAogCQkJCUE4QTQ3MjdDMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVy
LmggKi8sCiAJCQkJQThBNDcyN0QxNTFBODI1QTAwNDEyM0ZGIC8qIERlY29kZXIuaCAqLywKKwkJ
CQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLywK
IAkJCQlBOEE0NzI3RTE1MUE4MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLywKIAkJCQlBOEE0NzI3
RjE1MUE4MjVBMDA0MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oICovLAogCQkJCUE4QTQ3MjgwMTUx
QTgyNUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCkBAIC02NDgsNiArNjUzLDcg
QEAKIAkJCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAq
LywKIAkJCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8s
CiAJCQkJQThBNDcyQTMxNTFBODI1QTAwNDEyM0ZGIC8qIEZpeGVkQXJyYXkuaCAqLywKKwkJCQkw
RjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8sCiAJCQkJQThBNDcyQTYx
NTFBODI1QTAwNDEyM0ZGIC8qIEZvcndhcmQuaCAqLywKIAkJCQlBOEE0NzJBNzE1MUE4MjVBMDA0
MTIzRkYgLyogRnVuY3Rpb25hbC5oICovLAogCQkJCTFBMUQ4QjlEMTczMTg3OTgwMDE0MURBNCAv
KiBGdW5jdGlvbkRpc3BhdGNoZXIuY3BwICovLApAQCAtOTk0LDYgKzEwMDAsNyBAQAogCQkJCUE4
QTQ3M0Y2MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczRkExNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9tU291cmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNGQjE1MUE4MjVCMDA0MTIzRkYgLyogT3duQXJyYXlQdHIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVm
Q291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkMxNTFBODI1QjAwNDEyM0ZGIC8q
IE93blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkQxNTFBODI1QjAwNDEyM0ZGIC8q
IE93blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkUxNTFBODI1QjAwNDEy
M0ZGIC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU3LDYgKzEwNjQs
NyBAQAogCQkJCUE4QTQ3NDMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUZW1wb3JhcnlDaGFuZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ0MTUxQTgyNUIwMDQxMjNGRiAvKiBUZXh0UG9zaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRGdW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkE3MTdCNkI0
RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ5MTUx
QTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0
aXZlcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3Vu
dGVkLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRl
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNvdW50ZWRf
aAorI2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2YgUmVmQ291
bnRlZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQsCisvLyBh
bmQgY2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5rIG9mIGEg
ZGVmZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhjZXB0IHRo
YXQgeW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVuZWQgLSB0
aGlzIGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21ldGltZXMg
ZXZlbiBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERlZmVycmFi
bGVSZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVycmVkRmxh
ZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVudCA9IDI7Cisg
ICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAr
PSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jl
ZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJy
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJl
ZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09
IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKwor
ICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+
ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZD
b3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50
ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkK
KyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChi
b29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVkQmFzZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxU
Kj4odGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRl
ZCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJs
ZVJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlw
Qnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVu
ZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwor
I2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWlu
dDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYg
MHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitp
bmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAo
KHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZm
MDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAg
IHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZs
aXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAw
MDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAw
ZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxs
dSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwg
OCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8
ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFs
dWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQoreworICAgIGlmIChzaXplb2YodmFs
dWUpID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9
PSAyKSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAg
ICAgICB1aW50MTZfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2
YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVy
biB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KSB7CisgICAg
ICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MzJf
dCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAg
ICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFs
OworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KSB7CisgICAgICAgIHVuaW9uIHsK
KyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50NjRfdCB3b3JkOworICAg
ICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0g
ZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUKCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oVCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCit7CisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxl
RW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybiBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKK3Vz
aW5nIFdURjo6ZmxpcEJ5dGVzVG9MaXR0bGVFbmRpYW47CisKKyNlbmRpZiAvLyBGbGlwQnl0ZXNf
aAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTM4MiwzMSArMzgyLDE5IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
VGltZVJhbmdlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L0FycmF5QnVmZmVyVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFz
R3JhZGllbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4u
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1Byb3h5LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9ET01QYXRoLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRE
cmF3QnVmZmVycy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDMy
QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwg
XAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwgXAotICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvSW50OEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNFbGVt
ZW50SW5kZXhVaW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJl
RmxvYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxv
YXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwgXAotICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L1VpbnQ4Q2xhbXBlZEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJH
TEFjdGl2ZUluZm8uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgorI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyX2gKKyNk
ZWZpbmUgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNBcnJheUJ1ZmZlci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lm
bmRlZiBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIFdlYkNvcmVfRldE
X0pTQXJyYXlCdWZmZXJWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNEYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNEYXRhVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZX
RF9KU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNUeXBlZEFycmF5c19oCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNUeXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5
Q29udHJvbGxlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlDb250cm9sbGVyX2gK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5Q29udHJvbGxlci5oPgorI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJy
YXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNv
cmVfRldEX1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5
cy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDE1ICsyNiwxMiBAQAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gKIAogI2luY2x1ZGUg
IkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi1uYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIEZsb2F0MzJBcnJheTsKLWNsYXNzIFVpbnQ4QXJyYXk7Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9CdXM7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsOCBAQAogCQkwQzQ1MzQyNzEwQ0RCQkZB
MDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyog
SlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CiAJCTBDNDUzNDI4MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OwogCQkwRjA5MDg3RjE0NDRGREIyMDAwMjg5MTcgLyog
U2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAq
LzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovOyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0
aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgfTsK
IAkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQwQ0M4
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgfTsKIAkJMEYxMzE2NDAxNkVEMENE
RTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBs
YXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovOyB9OwpAQCAtODI4LDExICs4MzAsNiBAQAogCQkyRTc1
ODQxRjEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAw
NjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJMkU5NEY0M0IxMTky
MDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxl
UmVhZGVyLmNwcCAqLzsgfTsKIAkJMkU5NEY0M0MxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICovOyB9OwotCQkyRTk3Q0NF
QTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NDRTcxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFW
aWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NDRUIxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFODEy
OTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCAqLzsgfTsKLQkJMkU5N0NDRjcxMjkzQTQzQTAw
QzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NDRjYxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZp
ZXdDdXN0b20uY3BwICovOyB9OwotCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRh
Vmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi87IH07Ci0JCTJFOTdD
RTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNE
YXRhVmlldy5oICovOyB9OwogCQkyRUE3NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2Ny
aXB0TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xp
ZW50LmggKi87IH07CiAJCTJFQjRCQ0QyMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VI
YW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07
CiAJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0QxMTIxRjAz
RTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLzsgfTsKQEAgLTEyODgsOCArMTI4
NSw2IEBACiAJCTQ5QjM3NjBEMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUIzNzYwQjE1QzZDNjg0
MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oICovOyB9OwogCQk0OUM3Qjk5MzEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5j
cHAgKi87IH07CiAJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICovOyB9OwotCQk0OUM3Qjk5NTEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFy
cmF5LmNwcCAqLzsgfTsKLQkJNDlDN0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4
MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCAqLzsgfTsKIAkJNDlDN0I5OTcxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5OTgxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1
ZmZlci5oICovOyB9OwogCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dy
YW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCAqLzsgfTsKQEAgLTEz
NTAsMjIgKzEzNDUsNiBAQAogCQk0OUVDRUI2RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlFQ0VCNkYxNDk5NzkwRDAw
Q0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9w
ZXJhdGlvbnMuY3BwICovOyB9OwogCQk0OUVDRUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVy
T3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0OUVFQ0YwMDEwNTA3
MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJh
eUJ1ZmZlci5jcHAgKi87IH07Ci0JCTQ5RUVDRjAxMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUVFQ0VGMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oICovOyB9OwotCQk0OUVF
Q0YwMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVFQ0VGNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAq
LzsgfTsKLQkJNDlFRUNGMDQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDUxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJh
eS5oICovOyB9OwotCQk0OUVFQ0YwNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY4
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNzEw
NTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQx
NkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVD
RjA5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk0OUVFQ0YwQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQzEwNTA3
MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjBCMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJB
cnJheS5oICovOyB9OwotCQk0OUVFQ0YwQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJh
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
Q0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVD
RjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyog
SlNVaW50MTZBcnJheS5oICovOyB9OwotCQk0OUVFQ0YxQjEwNTA3MkYzMDAwOTlGQUIgLyogSlNB
cnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNw
cCAqLzsgfTsKLQkJNDlFRUNGMUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0Yx
QTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVFRDE0MjEwNTE5Njk0MDAwOTlG
QUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNDMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OwogCQk0OUVFRDE0MzEwNTE5Njk0MDAwOTlG
QUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CiAJCTQ5RUVEMTQ0MTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovOyB9OwpAQCAtMTgyNyw4ICsxODA2LDYgQEAKIAkJ
NkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNDEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLzsgfTsKIAkJNkU2N0QyQTcxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5oICovOyB9OwogCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07Ci0J
CTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBB
MENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9OwotCQk2RUJDNUVCMDEzOEI1MEYyMDBB
MENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJh
eS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYw
RTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovOyB9OwogCQk2RUJG
MEU0OTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkg
LyogT0VTVGV4dHVyZUZsb2F0LmggKi87IH07CiAJCTZFQkYwRTU0MTJBODkyOTgwMERCMTcwOSAv
KiBXZWJHTEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RUJGMEU1MjEyQTg5Mjk4MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uY3Bw
ICovOyB9OwpAQCAtMjU4OSw3ICsyNTY2LDYgQEAKIAkJODVGRjMxNUIwQUFGQkZDQjAwMzc0RjM4
IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVu
dC5tbSAqLzsgfTsKIAkJODYxQzJFQTQxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRp
bWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjFDMkVBMzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLzsgfTsK
IAkJODYxQzJFQTYxM0ZCNEZGRjAwMDYyQUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjFDMkVBNTEzRkI0
RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCAqLzsgfTsKLQkJODYyNDNEMDEx
MUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI0M0QwMDExQkMzMUY3MDBDQzAw
NkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCAqLzsgfTsKIAkJODY1MTJFREUxNTRBMkFF
RjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1MTJFREIxNTRBMkFFRTAwQTkwNDI2
IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwICovOyB9OwogCQk4NjUxMkVERjE1NEEy
QUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1MTJFREMxNTRBMkFFRjAwQTkwNDI2
IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCAqLzsgfTsKIAkJODZCQTc2NkUxNjY0MjdB
ODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQTc2NkQxNjY0MjdBODAwNUJFNUQxIC8qIEZyYW1l
TG9hZFJlcXVlc3QuY3BwICovOyB9OwpAQCAtMjcwMyw4ICsyNjc5LDYgQEAKIAkJOTAwMTc3NDEx
MkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3NzNFMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07CiAJCTkwMDE3ODgwMTJFMDM3MDcw
MDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4N0UxMkUwMzcwNzAwNjQ4NDYyIC8q
IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi87IH07CiAJCTkwMDE3ODgxMTJFMDM3MDcw
MDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3ODdGMTJFMDM3MDcwMDY0ODQ2MiAvKiBK
U09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKLQkJOTEwODlEMzIxNEMzMzYwMDAwNUFG
QzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkxMDg5RDMwMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xh
bXBlZEFycmF5LmggKi87IH07Ci0JCTkxMDg5RDMzMTRDMzM2MDUwMDVBRkM0OSAvKiBKU1VpbnQ4
Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNw
cCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlG
ODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAw
QzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4
RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ2NTUsNyArNDYy
OSw2IEBACiAJCUJDMjc0QjJGMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
Mjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLzsg
fTsKIAkJQkMyNzRCMzExNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3
NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCAqLzsg
fTsKIAkJQkMyNzVCNzkxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzVCNzgx
MUM1RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovOyB9OwotCQlCQzI3
NUNCMzExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NUNCMjExQzVFODVDMDBD
OTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgKi87IH07CiAJCUJDMjk5MzVEMTdBMURE
NTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI5OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJ
bnB1dFR5cGUuY3BwICovOyB9OwogCQlCQzJDQkY0RTE0MEYxQUJEMDAzODc5QkUgLyogSlNXZWJH
TENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMyQ0JGNEIxNDBGMUE2NTAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCAq
LzsgfTsKIAkJQkMyQ0JGN0IxNDBGMUQ1ODAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyQ0JG
N0ExNDBGMUQ1ODAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwICovOyB9OwpAQCAt
NjQ4MCw2ICs2NDUzLDggQEAKIAkJMEMzRjFGNTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5p
Zm9ybUxvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbi5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0Qjkg
LyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNlbGVjdGlvbkluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBs
YXRmb3JtQ0FGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRm
b3JtQ0FGaWx0ZXJzLmg7IHBhdGggPSBjYS9QbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1D
QUZpbHRlcnNNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQ
bGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgcGF0aCA9IGNhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcxMzQsMTIgKzcxMDksNiBAQAog
CQkyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7
IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkU5NEY0MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQg
LyogSlNGaWxlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmls
ZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFNzEyOTM5Q0I4
MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRGF0YVZpZXcuY3BwOyBwYXRoID0gY2FudmFzL0RhdGFWaWV3LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERhdGFWaWV3Lmg7IHBhdGggPSBj
YW52YXMvRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRTkx
MjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBE
YXRhVmlldy5pZGw7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3Q3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NFNkQxMjkzQUQ2QjAw
QzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdD
RTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQu
aDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3Vy
Y2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYlJl
c291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDEx
MjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTc2NTQsOCArNzYyMyw2IEBACiAJCTQ5QjM3NjBCMTVDNkM2ODQwMDU5MTMx
RCAvKiBBcnJheVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODAxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50OEFycmF5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
SW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMRnJhbWVidWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NjksNyAr
NzYzNiw2IEBACiAJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEJ1ZmZlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xCdWZmZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBQTEwNDJEMzJFMDAw
OUQ0NDcgLyogV2ViR0xCdWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQnVm
ZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0NyAvKiBJbnQ4QXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDhBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50OEFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUUxMDQyRDMyRTAw
MDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFGMTA0MkQz
MkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5
RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJH
TEZyYW1lYnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc3MjUsMzAgKzc2OTEsNiBAQAogCQk0OUVDRUI2
NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbi5oOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFQ0VCNjUxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9ucy5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRl
ck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NjE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQzkxMDUwM0My
MzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
QXJyYXlCdWZmZXJWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyog
QXJyYXlCdWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEFycmF5QnVmZmVyLmlkbDsg
cGF0aCA9IGNhbnZhcy9BcnJheUJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRENGMTA1MDNDMjMwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IEZsb2F0MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQzMkFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDIxMDUwM0MyMzAw
MDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDMyQXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL0ludDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0RENTEwNTAzQzIzMDAwOTlGQUIgLyogSW50MTZBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MTZBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50MTZB
cnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREQ4MTA1MDNDMjMw
MDA5OUZBQiAvKiBVaW50OEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50OEFy
cmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQzMkFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWlu
dDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RERTEwNTAz
QzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVp
bnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50MTZBcnJheS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVm
ZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZm
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGMzEwNTA3MEM0MDAw
OTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY0
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0MzJBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJ
bnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50
MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY3MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
RUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQxNkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDE2QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4QXJy
YXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQzEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1VpbnQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MzJBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQxNkFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkYxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Yx
OTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0YxQTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZl
clZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0MxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODIzOCw5ICs4MTgw
LDYgQEAKIAkJNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBNTEyODBFOEE0MDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQkM1RUFEMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4
dHVyZUZsb2F0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9FU1Rl
eHR1cmVGbG9hdC5jcHA7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDYxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1Rl
eHR1cmVGbG9hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBPRVNUZXh0dXJl
RmxvYXQuaDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDcxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9h
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0LmlkbDsgcGF0aCA9
IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODk3OCw3ICs4OTE3LDYgQEAKIAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtl
eWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxQzJF
QTMxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRpbWluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRUaW1pbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFDMkVBNTEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3Vy
Y2VMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c291cmNlTG9hZFRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MjQz
RDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYgLyogUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY1MTJFREMxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3Vy
Y2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjUxMkVERDE1
NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05MTEzLDkgKzkwNTEsNiBAQAogCQk5MDAxNzczRjEyRTAzNDc4
MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5pZGw7IHBhdGggPSBjYW52YXMvT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMDE3ODdF
MTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYy
IC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVaW50OENsYW1wZWRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkxMDg5RDMwMTRDMzM1Q0Qw
MDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJOTFBMzkwNTgxNEMwRjRCOTAwRjY3OTAxIC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBVaW50OENsYW1wZWRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDhDbGFtcGVkQXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCQzBENzlGODI5MDBD
N0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJF
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDVC
MjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzNDIsNyAr
MTEyNzcsNiBAQAogCQlCQzI3NEIyRTE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI3NEIzMDE0
MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2QyAv
KiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyQ3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyOTkzNUMxN0ExREQ1ODAwQkNF
ODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbG9ySW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyQ0JGNEIxNDBGMUE2NTAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTENvbnRleHRFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY3QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJH
TENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQ29udGV4dEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0
MDI1LDggKzEzOTU5LDYgQEAKIAkJNDk0ODRGQUUxMDJDRjAxRTAwMTg3REQzIC8qIGNhbnZhcyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNEQ0Mx
MDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyLmlkbCAqLywKLQkJCQk0OUVFQ0RDOTEwNTAz
QzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLywKIAkJCQk2RTRFOTFBNzEwRjdG
QjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTZFNEU5
MUE4MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oICovLAogCQkJ
CTQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgKi8sCkBAIC0x
NDA0Nyw5ICsxMzk3OSw2IEBACiAJCQkJNDk0ODRGQkUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgKi8sCiAJCQkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1N0eWxlLmNwcCAqLywKIAkJCQk0OTQ4NEZDMDEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzU3R5bGUuaCAqLywKLQkJCQkyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZp
ZXcuY3BwICovLAotCQkJCTJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICov
LAotCQkJCTJFOTdDQ0U5MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8sCiAJCQkJ
RkI5MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaCAqLywKIAkJCQlGQjkxMzkyMTE2
QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5pZGwgKi8sCiAJCQkJQTAyNDU3NEUxNkNFQUEyNzAw
MEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmNwcCAqLywKQEAgLTE0MDU4LDExICsxMzk4Nyw2IEBA
CiAJCQkJNzcyODY5NEIxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5NEMxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYy5oICovLAogCQkJCTc3Mjg2OTREMTRGODg4MjUwMEY0ODREQyAvKiBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaWRsICovLAotCQkJCTQ5RUVDRENGMTA1MDNDMjMw
MDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaWRsICovLAotCQkJCTZFQkM1RDgwMTM4QjRDNEUwMEEw
Q0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZB
QiAvKiBJbnQxNkFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0REMjEwNTAzQzIzMDAwOTlGQUIgLyog
SW50MzJBcnJheS5pZGwgKi8sCi0JCQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhB
cnJheS5pZGwgKi8sCiAJCQkJN0U1RDdBNzMxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJ
bmRleFVpbnQuY3BwICovLAogCQkJCTdFNUQ3QTc0MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVt
ZW50SW5kZXhVaW50LmggKi8sCiAJCQkJOTAwMTc3M0QxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0
YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovLApAQCAtMTQwNzcsMTAgKzE0MDAxLDYgQEAKIAkJCQk3
N0ExN0E2RTEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwICovLAog
CQkJCTc3QTE3QTZGMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5oICov
LAogCQkJCTc3QTE3QTcwMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5p
ZGwgKi8sCi0JCQkJNDlFRUNEREUxMDUwM0MyNDAwMDk5RkFCIC8qIFVpbnQxNkFycmF5LmlkbCAq
LywKLQkJCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWludDMyQXJyYXkuaWRsICovLAot
CQkJCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50OEFycmF5LmlkbCAqLywKLQkJCQk5
MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFtcGVkQXJyYXkuaWRsICovLAogCQkJ
CUE3RDIwRjZCMTA3RjQzOEIwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8uaCAqLywKIAkJCQlB
N0QyMEYzQjEwN0YzNzM4MDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmlkbCAqLywKIAkJCQk0
OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuY3BwICovLApAQCAtMTY2NDUs
MTAgKzE2NTY1LDYgQEAKIAkJQTgzQjc5MDgwQ0NBRkYyQjAwMEIwODI1IC8qIEhUTUwgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQ5RUVDRUYyMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKLQkJCQk0OUVFQ0VGMzEwNTA3MEM0
MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oICovLAotCQkJCTQ5RUVDRjE5MTA1MDcyRjMwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8sCi0JCQkJNDlFRUNGMUExMDUwNzJGMzAw
MDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi8sCiAJCQkJQkU4RUYwM0UxNzFDOEZGOTAw
OUI0OEMzIC8qIEpTQXVkaW9UcmFjay5jcHAgKi8sCiAJCQkJQkU4RUYwM0YxNzFDOEZGOTAwOUI0
OEMzIC8qIEpTQXVkaW9UcmFjay5oICovLAogCQkJCUJFOEVGMDQwMTcxQzhGRjkwMDlCNDhDMyAv
KiBKU0F1ZGlvVHJhY2tMaXN0LmNwcCAqLywKQEAgLTE2NjYyLDggKzE2NTc4LDYgQEAKIAkJCQk0
OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8s
CiAJCQkJNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCAqLywKIAkJCQk0OUVFRDEzRjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCAqLywKLQkJCQkyRTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNE
YXRhVmlldy5jcHAgKi8sCi0JCQkJMkU5N0NFNkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZp
ZXcuaCAqLywKIAkJCQkyRTA4ODhEMjExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5j
cHAgKi8sCiAJCQkJMkUwODg4RDMxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuaCAq
LywKIAkJCQlGQjkxMzkyOTE2QUU0RkMwMDAxRkU2ODIgLyogSlNET01QYXRoLmNwcCAqLywKQEAg
LTE2Njc4LDEwICsxNjU5Miw2IEBACiAJCQkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzBBIC8qIEpT
RVhURHJhd0J1ZmZlcnMuaCAqLywKIAkJCQk3NzI4Njk4MTE0RkQ5QURBMDBGNDg0REMgLyogSlNF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwICovLAogCQkJCTc3Mjg2OTgyMTRGRDlBREEw
MEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovLAotCQkJCTQ5RUVD
RUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNF
RjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCi0JCQkJNkVCQzVFQUQx
MzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLywKLQkJCQk2RUJDNUVBRTEz
OEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLywKIAkJCQlCQzk3RTQxMDEwOTE1
NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM5N0U0MTEx
MDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uaCAqLywKIAkJCQkxQTRBMkRF
QjBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1MQW5jaG9yRWxlbWVudC5jcHAgKi8sCkBAIC0xNjgz
NSwxMiArMTY3NDUsNiBAQAogCQkJCUU0NDYxNDBGMENENjgyNjkwMEZBREE3NSAvKiBKU0hUTUxW
aWRlb0VsZW1lbnQuaCAqLywKIAkJCQlBNzc5NzkyNDBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFn
ZURhdGEuY3BwICovLAogCQkJCUE3Nzk3OTI1MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0
YS5oICovLAotCQkJCTQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3Bw
ICovLAotCQkJCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCAqLywK
LQkJCQk0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCAqLywKLQkJ
CQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggKi8sCi0JCQkJNDlD
N0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAqLywKLQkJCQk0OUM3Qjk4
MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQlDRDI3RjZFMjE0NTc2
NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIuY3BwICovLAogCQkJCUNEMjdGNkUzMTQ1
NzY3NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5oICovLAogCQkJCUU0NDYxNDEwMENE
NjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3IuY3BwICovLApAQCAtMTY4NzMsMTQgKzE2Nzc3
LDYgQEAKIAkJCQlFNDQ2MTQxMzBDRDY4MjY5MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8s
CiAJCQkJMDc4NDYzNDAxNDVCMTUxQTAwQTU4REYxIC8qIEpTVHJhY2tFdmVudC5jcHAgKi8sCiAJ
CQkJMDc4NDYzNDExNDVCMTUxQTAwQTU4REYxIC8qIEpTVHJhY2tFdmVudC5oICovLAotCQkJCTQ5
RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLywKLQkJCQk0OUVF
Q0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovLAotCQkJCTQ5RUVDRUZD
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGRDEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovLAotCQkJCTQ5RUVDRUZBMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZCMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKLQkJCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZD
NDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi8sCi0JCQkJOTEwODlEMzAxNEMzMzVDRDAw
NUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQkxNUM3NzA5MjEwMEQzQ0E4
MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmNwcCAqLywKIAkJCQkxNUM3NzA5MTEwMEQzQ0E4
MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmggKi8sCiAJCQkJQkU4RUYwNDYxNzFDOTAxNDAw
OUI0OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgKi8sCkBAIC0xODc4MCw2ICsxODY3Niw4IEBACiAJ
CQkJQTc1RTQ5NzUxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAg
Ki8sCiAJCQkJQTc1RTQ5NzQxMDc1MkFDQjAwQzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oICovLAogCQkJCUJDNTNEOTEwMTE0MzEwQ0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGllbnRE
YXRhLmggKi8sCisJCQkJMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAgKi8sCisJCQkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAogCQkJCUUxQTY0M0ZDMEVDMDk3QTAwMDc3
OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlFMUE2NDNGMTBFQzA5
NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oICovLAogCQkJCUYzNDc0MkU2
MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAgKi8sCkBAIC0x
ODgzNSw4ICsxODczMyw2IEBACiAJCUJDNEVERUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20g
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUJDMjc1Q0Iy
MTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLywKLQkJCQk4NjI0
M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCAqLywKIAkJ
CQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQlD
RERFNjkxRDE3MURGODkxMDBBNDREODkgLyogSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAgKi8sCiAJ
CQkJRkRFQUFBRUYxMkIwMkVFNDAwRENGMzNCIC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3Vz
dG9tLmNwcCAqLywKQEAgLTE4ODYyLDcgKzE4NzU4LDYgQEAKIAkJCQlBRDcyNkZFQTE2RDlGNDBC
MDAzQTRFNkQgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmggKi8sCiAJCQkJRTFBRDE0
RTcxMjk3Mzc3NDAwQUNBOTg5IC8qIEpTQ1NTU3R5bGVSdWxlQ3VzdG9tLmNwcCAqLywKIAkJCQlC
QzIwRkI3RTBDMEU4RTZDMDBEMTQ0N0YgLyogSlNDU1NWYWx1ZUN1c3RvbS5jcHAgKi8sCi0JCQkJ
MkU5N0NDRjYxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwICovLAogCQkJ
CTQxNjJBNDUzMTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcCAqLywKIAkJCQkzMUZCMUE2QjEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VN
b3Rpb25FdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJNTkwRTFCNEExMUU0RUY3MDAwNjlGNzg0IC8q
IEpTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgKi8sCkBAIC0yMTMyMSw3ICsyMTIx
Niw2IEBACiAJCQkJQkM2NDY0MUMxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRh
VHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5QTEzMTYzNkU2MDAwOUE3
RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTJFOTdDQ0VC
MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3MzJC
MEIxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGNTVCM0RCNjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKQEAgLTIxODMwLDYgKzIxNzI0LDcgQEAKIAkJCQk4OTNDNDgwRjEyNDhCRDNB
MDAyQjNEODYgLyogRmlsZUVudHJ5U3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODMx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERjM2
OUYxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMDk5RDA5MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBODhBOTA1MTc1NTNDRDcwMDBDNzRGOSAvKiBGaWxlSWNv
bkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkUxMjUxRjEyRDAwM0VGMjY5IC8q
IEZpbGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFG
RDFGNyAvKiBGaWxlTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjIzOSw5ICsyMjEzNCw2IEBA
CiAJCQkJMUM4MUJBMEEwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBKU0Fic3RyYWN0
V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVDQTEyQjAzRjUwMDAzQTU4M0EgLyog
SlNBbmFseXNlck5vZGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjAxMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YxQzEwNTA3
MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2
MjQzRDAxMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjVERjMxREIwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkRBMTVFOUUxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZERjdFOUM0MTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlv
QnVmZmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtMjIzMDIsNyArMjIxOTQsNiBAQAog
CQkJCTFBRTgyRjkwMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCNThDRUI2OTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFz
ZVN5bmMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBK
U0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTYyQTQ1ODEwMTE0NjQ3MDBERkYzRUQg
LyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRB
MTVFRDIxMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMUZCMUE2NjEyMEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMjM3NSw4ICsyMjI2Niw2IEBACiAJCQkJODk4Nzg1QjMxMjJDQTJBNzAw
M0FBQkRBIC8qIEpTRmlsZVN5c3RlbUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkRB
ODQ0RTEyMjRBMDcxMDA2MEQwMDYgLyogSlNGaWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4OTNDNDdCQzEyMzhBMEE5MDAyQjNEODYgLyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAotCQkJCTQ5RUVDRjAzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkQ5RDI3QjE0RUFDMDg2MDA5MEQ3NUUg
LyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MDlFQkRDMDE2QjdGMzhFMDBD
QkEzRkMgLyogSlNGb250TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVBQzEyQjAz
RUUxMDAzQTU4M0EgLyogSlNHYWluTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjQ3Nyw5ICsy
MjM2Niw2IEBACiAJCQkJQTc3OTc5MjkwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzZEQjEwQkYwNTk4MDBBMDI3NkUgLyogSlNJbmplY3Rl
ZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMEU3NzFGMTBDMDBEQjEwMEEwMjc2
RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNG
MDcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlFRUNGMDUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlDN0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0Mx
RkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjcyOSwxMCAr
MjI2MTUsNiBAQAogCQkJCUUxN0I0OTIxMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE3NTBENUQwQTkwREVFMTAwMEZGMjE1IC8qIEpT
VHJlZVdhbGtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1
IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMEQxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBCMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
OTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk5
MTA4OUQzMjE0QzMzNjAwMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUFBNEZBRDIxNzVENUNCMzAwNzQzODczIC8qIEpTVUlSZXF1ZXN0RXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3MDkzMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlk
aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOEVGMDRCMTcxQzkwMTQwMDlCNDhDMyAv
KiBKU1ZpZGVvVHJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtMjQ3MzIsNyArMjQ2MTQsNiBAQAog
CQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5N0JDNkEzMTE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjQ2NDFEMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRh
c2V0RE9NU3RyaW5nTWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJFOTdDQ0VBMTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTczMkIwQTEzNkEx
NjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1
QjNEQjUxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjU1QjNEQjcxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVUaW1lSW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMjUzODgsOSArMjUyNjksNiBAQAogCQkJCTFDODFCQTA5MEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZEQTE1RUM5MTJCMDNGNTAwMDNBNTgzQSAvKiBKU0FuYWx5c2VyTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwMDEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJh
eUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzI3NUNCMzExQzVFODVDMDBDOTIwNkMg
LyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YxQjEw
NTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjVERjMxREEwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzJFRDZCQzBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZEQTE1RTlEMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjU0NzAsOCArMjUzNDgsNiBAQAogCQkJCTFBRTgyRjhGMENB
QUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OURE
NjlBMTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjU4Q0VCNkExMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTJFOTdDRTZGMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJFOTdDQ0Y3MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERG
RjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQxMTJCMDNGOTQwMDNBNTgz
QSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NTQzLDggKzI1NDE5LDYg
QEAKIAkJCQk4OTg3ODVGNDEyMkUxRUFDMDAzQUFCREEgLyogSlNGaWxlUmVhZGVyU3luYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4OTg3ODVCMjEyMkNBMkE3MDAzQUFCREEgLyogSlNGaWxlU3lz
dGVtQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODkzQzQ3QkIxMjM4QTBBOTAwMkIz
RDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVD
RjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjZEOUQyN0MxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVBQjEyQjAzRUUxMDAzQTU4M0EgLyogSlNHYWlu
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTgwREE2MzBFOUM0NzAzMDAwRDZGNzUgLyog
SlNHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjAzLDYgKzI1NDc3LDcgQEAK
IAkJCQlBNjE0OEE3ODEyRTQxRTNCMDA0NEE3ODQgLyogSlNIVE1MS2V5Z2VuRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGFi
ZWxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjIzMEExQ0U2M0IwMEI0MkIy
NSAvKiBKU0hUTUxMZWdlbmRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMDk5RDA4
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFFMkFCMjUwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExJRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFN0IxMDBBMTlENjA2MDA3RkI4QzUgLyogSlNI
VE1MTGlua0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFBRDEzOUIxMjk1RDkyNjAw
QUNBOTg5IC8qIEpTSFRNTExpbmtFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjU2NTcsOSArMjU1MzIsNiBAQAogCQkJCUYzMTYzOTZFMTMyOTQ4NzYwMEE2NDlDQiAvKiBKU0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QTBFNzcxRTEwQzAw
REIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0E3NEVDQkQxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0ludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDQxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3Qjk5NTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1
RkFFRDEwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQzVGQUVFNzBEQ0ZEQTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2
MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTk0MSwxMCAr
MjU4MTMsNiBAQAogCQkJCTFBNzUwRDVDMEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJl
ZVdhbGtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlEMDA5REEyQjQ4MDA5
NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjBDMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVD
RjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjA4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUFBNEZBRDMxNzVENUNCMzAwNzQzODczIC8qIEpT
VUlSZXF1ZXN0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTVDNzcwOTQxMDBEM0NBODAw
NUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCRThFRjA0
QTE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIGNsYXNzIENTU1ZhbHVlOwogY2xh
c3MgSlNET01XcmFwcGVyOwogY2xhc3MgU2NyaXB0Q29udHJvbGxlcjsKIAotdHlwZWRlZiBIYXNo
TWFwPHZvaWQqLCBKU0M6OldlYWs8SlNET01XcmFwcGVyPiA+IERPTU9iamVjdFdyYXBwZXJNYXA7
Cit0eXBlZGVmIEhhc2hNYXA8dm9pZCosIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0PiA+IERPTU9i
amVjdFdyYXBwZXJNYXA7CiB0eXBlZGVmIEpTQzo6V2Vha0dDTWFwPFN0cmluZ0ltcGwqLCBKU0M6
OkpTU3RyaW5nLCBQdHJIYXNoPFN0cmluZ0ltcGwqPiA+IEpTU3RyaW5nQ2FjaGU7CiAKIGNsYXNz
IERPTVdyYXBwZXJXb3JsZCA6IHB1YmxpYyBSZWZDb3VudGVkPERPTVdyYXBwZXJXb3JsZD4gewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1
c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5o
IgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlC
dWZmZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNvbnN0cnVjdEpTQXJyYXlCdWZmZXIoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3Rv
ciA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0K
LSAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCkK
LSAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsgLy8gTmFO
LytpbmYvLWluZiByZXR1cm5zIDAsIHRoaXMgaXMgaW50ZW5kZWQgYnkgV2ViSURMCi0gICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXI7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKQotICAgICAgICBi
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgp
LCAxKTsKLSAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBh
IHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCks
IGJ1ZmZlci5nZXQoKSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBl
ci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Fy
cmF5QnVmZmVyVmlld0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXJfaAotI2RlZmluZSBKU0FycmF5QnVmZmVyVmll
d0hlbHBlcl9oCi0KLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlIDxpbnRl
cnByZXRlci9DYWxsRnJhbWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9UeXBlZEFycmF5QmFzZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBj
b25zdCBjaGFyKiB0b29MYXJnZVNpemUgPSAiU2l6ZSBpcyB0b28gbGFyZ2UgKG9yIGlzIG5lZ2F0
aXZlKS4iOwotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotYm9vbCBjb3B5VHlwZWRB
cnJheUJ1ZmZlcihDKiB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogc291cmNlLCB1bnNpZ25lZCBz
b3VyY2VMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZp
ZXdUeXBlIHNvdXJjZVR5cGUgPSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoc291cmNl
VHlwZSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldyk7Ci0KLSAgICBpZiAodGFyZ2V0
LT5nZXRUeXBlKCkgPT0gc291cmNlVHlwZSkgewotICAgICAgICBpZiAoIXRhcmdldC0+c2V0KHN0
YXRpY19jYXN0PEMqPihzb3VyY2UpLCBvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRhcmdldC0+Y2hlY2tJ
bmJvdW5kRGF0YShvZmZzZXQsIHNvdXJjZUxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHN3aXRjaCAoc291cmNlVHlwZSkgewotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpU
eXBlSW50ODoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsg
KytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0
PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFyPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDg6Ci0gICAgY2Fz
ZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OENsYW1wZWQ6Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0
KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFy
PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlC
dWZmZXJWaWV3OjpUeXBlSW50MTY6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
b3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChU
KShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxzaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0
ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVV
aW50MTY6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxU
eXBlZEFycmF5QmFzZTx1bnNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDMyOgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8
aW50PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJy
YXlCdWZmZXJWaWV3OjpUeXBlVWludDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0
LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50PiAqPihzb3VyY2Up
LT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpU
eXBlRmxvYXQzMjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0
aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19j
YXN0PFR5cGVkQXJyYXlCYXNlPGZsb2F0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQ2NDoKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAg
dGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPGRv
dWJsZT4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1ib29sIHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJh
eUFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDKiBpbXBsKQotewotICAgIFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IGFycmF5ID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQo
MCkpOwotICAgIGlmICghYXJyYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5
QnVmZmVyVmlldzo6Vmlld1R5cGUgYXJyYXlUeXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICBp
ZiAoYXJyYXlUeXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPT0gMikKLSAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IGFzT2JqZWN0KGV4ZWMtPmFy
Z3VtZW50KDApKS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKLQotICAgIGlmICghKGNvcHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGlt
cGwsIGFycmF5LmdldCgpLCBsZW5ndGgsIG9mZnNldCkpKQotICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91dCBvZiByYW5nZS4iKSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLUpT
Qzo6SlNWYWx1ZSBzZXRXZWJHTEFycmF5SGVscGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDKiBp
bXBsKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1
cm4gSlNDOjp0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIGlmIChzZXRXZWJHTEFycmF5V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBU
PihleGVjLCBpbXBsKSkKLSAgICAgICAgLy8gdm9pZCBzZXQoaW4gV2ViR0w8PkFycmF5IGFycmF5
LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKLQotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgp
KSB7Ci0gICAgICAgIC8vIHZvaWQgc2V0KGluIHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9u
YWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAgICAgSlNDOjpKU09iamVjdCogYXJy
YXkgPSBKU0M6OmFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgdWludDMyX3Qg
b2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAyKQotICAg
ICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICAg
ICAgdWludDMyX3QgbGVuZ3RoID0gYXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLSAgICAgICAgaWYgKCFpbXBsLT5jaGVja0lu
Ym91bmREYXRhKG9mZnNldCwgbGVuZ3RoKSkKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IGFycmF5LT5nZXQoZXhlYywg
aSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgIGlt
cGwtPnNldChpICsgb2Zmc2V0LCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEpTQzo6dGhyb3dUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgYXJndW1lbnQiKTsK
LX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNvbnN0cnVjdG9ycy4K
LS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0aHJvd24gYSBKYXZh
U2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1QYXNzUmVm
UHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc291cmNl
ID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghc291cmNl
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUgc291
cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAgIGlmIChzb3VyY2VUeXBlID09IEFycmF5
QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVpbnQz
Ml90IGxlbmd0aCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+Z2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICBSZWZQdHI8
Qz4gYXJyYXkgPSBDOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgaWYgKCFhcnJh
eSkgewotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9v
TGFyZ2VTaXplKSk7Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBpZiAoIShj
b3B5VHlwZWRBcnJheUJ1ZmZlcjxDLCBUPihhcnJheS5nZXQoKSwgc291cmNlLmdldCgpLCBsZW5n
dGgsIDApKSkgewotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLS8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlD
b25zdHJ1Y3RvcnMuCi0vLyBJZiB0aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUg
dGhyb3duIGEgSmF2YVNjcmlwdCBleGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFt
ZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJyYXlCdWZm
ZXJBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICgh
YnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVj
LT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMp
IDogMDsKLSAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMikKLSAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMikudG9VSW50
MzIoZXhlYyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSBvZmZzZXQpICUgc2l6ZW9mKFQpKSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9m
ZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplLiIpKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVM
ZW5ndGgoKSAtIG9mZnNldCkgLyBzaXplb2YoVCk7Ci0gICAgfQotICAgIFJlZlB0cjxDPiBhcnJh
eSA9IEM6OmNyZWF0ZShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5KQot
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VT
aXplKSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFt
ZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgLy8gVGhlcmUgYXJlIDMgY29uc3RydWN0b3JzOgotICAgIC8vCi0g
ICAgLy8gIDEpIChpbiBpbnQgc2l6ZSkKLSAgICAvLyAgMikgKGluIEFycmF5QnVmZmVyIGJ1ZmZl
ciwgW09wdGlvbmFsXSBpbiBpbnQgb2Zmc2V0LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGludCBs
ZW5ndGgpCi0gICAgLy8gIDMpIChpbiBzZXF1ZW5jZTxUPikgLSBUaGlzIGVuZHMgdXAgYmVpbmcg
YSBKUyAiYXJyYXktbGlrZSIgb2JqZWN0Ci0gICAgLy8gICAgCi0gICAgLy8gRm9yIHRoZSAwIGFy
Z3MgY2FzZSwganVzdCBjcmVhdGUgYSB6ZXJvLWxlbmd0aCB2aWV3LiBXZSBjb3VsZAotICAgIC8v
IGNvbnNpZGVyIHJhaXNpbmcgYSBTeW50YXhFcnJvciBmb3IgdGhpcyBjYXNlLCBidXQgbm90IGFs
bAotICAgIC8vIEphdmFTY3JpcHQgRE9NIGJpbmRpbmdzIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVu
ICJuZXcKLSAgICAvLyA8VHlwZT5BcnJheSgpIiBhbmQgd2hhdCBvY2N1cnMgd2hlbiBhIHByZXZp
b3VzbHktY29uc3RydWN0ZWQKLSAgICAvLyBBcnJheUJ1ZmZlclZpZXcgaXMgcmV0dXJuZWQgdG8g
SmF2YVNjcmlwdDsgZS5nLiwgZnJvbQotICAgIC8vICJhcnJheS5zdWJzZXQoKSIuCi0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBDOjpjcmVhdGUoMCk7
Ci0gICAgCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8v
IEludmFsaWQgZmlyc3QgYXJndW1lbnQKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09i
amVjdCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDPiB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJW
aWV3V2l0aEFycmF5QnVmZmVyQXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAgICAgIGlmICh2aWV3
KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgCi0gICAgICAgIHZpZXcgPSBjb25zdHJ1
Y3RBcnJheUJ1ZmZlclZpZXdXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAg
ICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHJldHVybiB2aWV3OwotCi0gICAgICAgIEpTQzo6
SlNPYmplY3QqIHNyY0FycmF5ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAg
ICB1aW50MzJfdCBsZW5ndGggPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgUmVmUHRyPEM+IGFycmF5
ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgICAgICBpZiAoIWFycmF5KSB7
Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9v
TGFyZ2VTaXplKSk7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
IEpTQzo6SlNWYWx1ZSB2ID0gc3JjQXJyYXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIGFy
cmF5LT5zZXQoaSwgdi50b051bWJlcihleGVjKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGFycmF5OwotICAgIH0KLQotICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpOwotICAgIFJlZlB0cjxDPiByZXN1bHQ7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKQot
ICAgICAgICByZXN1bHQgPSBDOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIEpTVHlwZSwgdHlwZW5hbWUgV2ViQ29yZVR5cGU+Ci1zdGF0aWMgSlND
OjpKU1ZhbHVlIHRvSlNBcnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkNvcmVUeXBlKiBvYmplY3QpCi17Ci0gICAg
aWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotCi0gICAgaWYgKEpT
RE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCBvYmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIGV4ZWMtPmhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG9iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4g
Y3JlYXRlV3JhcHBlcjxKU1R5cGU+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9D
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MiArMjksMTIgQEAKICNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkF1ZGlv
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9C
dWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTT2ZmbGlu
ZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNs
dWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlND
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTQgQEAKICNpbmNsdWRlICJCbG9i
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpT
RGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIldlYktpdEJsb2JC
dWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEK
ICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3Jh
cHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBydWxl
KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxk
KGV4ZWMpLCBydWxlKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCF2YWx1ZS0+aXND
U1NPTVNhZmUoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVy
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHZhbHVlKTsK
KyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCB2YWx1ZSk7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUg
IkpTQ3J5cHRvLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNDEsMTIgKzQxLDEyIEBA
IEpTVmFsdWUgSlNDcnlwdG86OmdldFJhbmRvbVZhbHVlcyhFeGVjU3QKICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwog
CiAgICAgSlNWYWx1ZSBidWZmZXIgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBBcnJheUJ1ZmZl
clZpZXcqIGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcik7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZp
ZXcoYnVmZmVyKTsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1w
bCgpLT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LCBlYyk7CisgICAgaW1wbCgpLT5n
ZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LmdldCgpLCBlYyk7CiAKICAgICBpZiAoZWMp
IHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTUgKzMxLDIwIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8aGVhcC9TbG90Vmlz
aXRvci5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5j
dGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
TG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRl
IDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvTnVsbFB0ci5oPgpAQCAtMTI4LDYgKzEzMywxNiBAQCBjbGFzcyBET01T
dHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFz
T2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMsIEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7CiAg
ICAgfQogCisgICAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQtPnZt
KCktPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKKyAgICB9
CisgICAgCisgICAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdvcmxkOwor
ICAgIH0KKwogICAgIGlubGluZSBKU0RPTVdyYXBwZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkKiwgdm9pZCopIHsgcmV0dXJuIDA7IH0KICAgICBpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBw
ZXIqLCBKU0M6OldlYWtIYW5kbGVPd25lciosIHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2
b2lkKiwgSlNET01XcmFwcGVyKikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzOSw2ICsxNTQsMTMg
QEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIGRvbU9iamVjdC0+d3JhcHBl
cigpOwogICAgIH0KIAorICAgIGlubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVm
ZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7CisgICAg
fQorCiAgICAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQqIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFw
cGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQog
ICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE0Nyw2ICsxNjksMTQg
QEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisg
ICAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkK
KyAgICB7CisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxK
U0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgY29udGV4dCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9i
amVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+
aXNOb3JtYWwoKSkKQEAgLTE1NSwyNCArMTg1LDMyIEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01D
bGFzcz4gaW5saW5lIEpTRE9NV3JhcHBlciogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0KQorICAgIGlubGluZSBib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVy
KiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKICAgICB7Ci0gICAgICAg
IGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxk
LCBkb21PYmplY3QpKQorICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIs
IHdyYXBwZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QpCisgICAgeworICAg
ICAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIo
d29ybGQsIGRvbU9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAg
cmV0dXJuIHdvcmxkLT5tX3dyYXBwZXJzLmdldChkb21PYmplY3QpOwogICAgIH0KIAotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3Jh
cHBlcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERP
TUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAg
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2Jq
ZWN0KTsKICAgICAgICAgdm9pZCogY29udGV4dCA9IHdyYXBwZXJDb250ZXh0KHdvcmxkLCBkb21P
YmplY3QpOwogICAgICAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2Jq
ZWN0LCB3cmFwcGVyLCBvd25lciwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIEpTQzo6UGFzc1dlYWs8SlNET01XcmFwcGVyPiBwYXNzV2Vhayh3cmFwcGVyLCBvd25lciwg
Y29udGV4dCk7CisgICAgICAgIEpTQzo6UGFzc1dlYWs8SlNDOjpKU09iamVjdD4gcGFzc1dlYWso
d3JhcHBlciwgb3duZXIsIGNvbnRleHQpOwogICAgICAgICB3ZWFrQWRkKHdvcmxkLT5tX3dyYXBw
ZXJzLCAodm9pZCopZG9tT2JqZWN0LCBwYXNzV2Vhayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIp
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNs
YXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlm
IChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xOTUsNyArMjMzLDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlz
dDsKICAgICB7CiAgICAgICAgIGlmICghZG9tT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNo
ZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgaWYgKEpT
Qzo6SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVj
KSwgZG9tT2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxXcmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZG9tT2Jq
ZWN0KTsKICAgICB9CkBAIC0zMjMsNiArMzYxLDI1IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAg
ICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICBpZiAoSlNDOjpKU1Zh
bHVlIHJlc3VsdCA9IGdldEV4aXN0aW5nV3JhcHBlcjxKU0M6OkpTQXJyYXlCdWZmZXI+KGV4ZWMs
IGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBidWZmZXItPnJl
ZigpOworICAgICAgICBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIgPSBKU0M6OkpTQXJyYXlC
dWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0
dXJlKCksIGJ1ZmZlcik7CisgICAgICAgIGNhY2hlV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IGJ1ZmZlciwgd3JhcHBlcik7CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKworICAg
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAg
eworICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIHZpZXctPndyYXAoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBh
c3NSZWZQdHI8VD4gcHRyKQogICAgIHsKQEAgLTM3Niw2ICs0MzMsMzIgQEAgY2xhc3MgRE9NU3Ry
aW5nTGlzdDsKIAogICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKIAorICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b0FycmF5QnVmZmVyVmlldyhKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3KiB3
cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1
ZSk7CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gd3JhcHBlci0+aW1wbCgpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxKU0M6OkludDhBcnJheT4gdG9JbnQ4QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZhbHVlKTsgfQor
ICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9JbnQxNkFycmF5KEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2
QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQzMkFycmF5
PiB0b0ludDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZl
VHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVWludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZhbHVlKTsg
fQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVWludDhD
bGFtcGVkQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBh
c3NSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VaW50MTZBcnJheShKU0M6OkpTVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2
YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQz
MkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmll
dzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpT
Qzo6RmxvYXQzMkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odmFsdWUpOyB9
CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvRmxvYXQ2NEFycmF5
KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6
OkZsb2F0NjRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxK
U0M6OkRhdGFWaWV3PiB0b0RhdGFWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTQzo6SlNEYXRhVmlldyogd3JhcHBlciA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpT
RGF0YVZpZXcqPih2YWx1ZSk7CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7CisgICAgfQorCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzOwogCiAgICAgdGVt
cGxhdGU8PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmll
d0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKLQot
I2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVt
IERhdGFWaWV3QWNjZXNzVHlwZSB7Ci0gICAgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIs
Ci0gICAgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQKLX07Ci0KLUpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERhdGFWaWV3
KiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHdyYXA8SlNEYXRhVmlldz4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBvYmplY3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YVZp
ZXdDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhVmlldyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpIHx8ICFleGVjLT5hcmd1bWVudCgwKS5p
c09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLQotICAg
IFJlZlB0cjxEYXRhVmlldz4gdmlldyA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJh
eUJ1ZmZlckFyZ3VtZW50PERhdGFWaWV3LCBjaGFyPihleGVjKTsKLSAgICBpZiAoIXZpZXcuZ2V0
KCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAg
ICBKU0RhdGFWaWV3Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNEYXRhVmll
d0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgdmll
dy5nZXQoKSkpKTsKLX0KLQotc3RhdGljIEpTVmFsdWUgZ2V0RGF0YVZpZXdNZW1iZXIoRXhlY1N0
YXRlKiBleGVjLCBEYXRhVmlldyogaW1wLCBEYXRhVmlld0FjY2Vzc1R5cGUgdHlwZSkKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxz
ZTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSAmJiAodHlwZSA9PSBBY2Nlc3NE
YXRhVmlld01lbWJlckFzRmxvYXQzMiB8fCB0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNG
bG9hdDY0KSkgewotICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jv
b2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1
bHQ7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBBY2Nlc3NEYXRhVmlld01lbWJlckFz
RmxvYXQzMjoKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0OiB7Ci0gICAg
ICAgIGRvdWJsZSB2YWx1ZSA9ICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMy
KSA/IGltcC0+Z2V0RmxvYXQzMihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKSA6IGltcC0+
Z2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLSAgICAgICAgcmVzdWx0
ID0gc3RkOjppc25hbih2YWx1ZSkgPyBqc05hTigpIDoganNOdW1iZXIodmFsdWUpOwotICAgICAg
ICBicmVhazsKLSAgICB9IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1KU1ZhbHVlIEpTRGF0YVZpZXc6OmdldEZsb2F0MzIoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXREYXRhVmlld01lbWJlcihleGVjLCBzdGF0
aWNfY2FzdDxEYXRhVmlldyo+KGltcGwoKSksIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMy
KTsKLX0KLQotSlNWYWx1ZSBKU0RhdGFWaWV3OjpnZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZ2V0RGF0YVZpZXdNZW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8RGF0YVZp
ZXcqPihpbXBsKCkpLCBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBA
CiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAjaW5jbHVkZSAi
SlNUcmFja0N1c3RvbS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpT
Vm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRl
cnByZXRlci9DYWxsRnJhbWUuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDcgKzU2LDcgQEAgSlNWYWx1ZSBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIAog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBMb2NhdGlvbiogbG9jYXRpb24gPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmxvY2F0aW9uKCk7Ci0gICAgaWYgKEpTRE9NV3Jh
cHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBsb2Nh
dGlvbikpCisgICAgaWYgKEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJy
ZW50V29ybGQoZXhlYyksIGxvY2F0aW9uKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAg
ICBKU0xvY2F0aW9uKiBqc0xvY2F0aW9uID0gSlNMb2NhdGlvbjo6Y3JlYXRlKGdldERPTVN0cnVj
dHVyZTxKU0xvY2F0aW9uPihleGVjLCBnbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdCgpLCBs
b2NhdGlvbik7CkBAIC04Myw3ICs4Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmEKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgZG9jdW1lbnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVk
V3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvY3VtZW50KTsKICAgICBpZiAod3JhcHBlcikK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAg
aWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVy
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2ZW50KTsK
KyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBldmVudCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1
c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAK
ICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKLSNp
bmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YQogICAgIGlmICghY29sbGVjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAg
SlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIGNvbGxlY3Rpb24pOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBl
cihjdXJyZW50V29ybGQoZXhlYyksIGNvbGxlY3Rpb24pOwogCiAgICAgaWYgKHdyYXBwZXIpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0lt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKIAogI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICgh
aW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFw
cGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdl
RGF0YSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgaW1hZ2VEYXRhKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAogI2luY2x1ZGUgIkluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNs
dWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2lu
Y2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXku
aCIKLSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgog
I2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJK
U1N0b3JhZ2UuaCIKLSNpbmNsdWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50
MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdFZh
bHVlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2Rl
Lmg+CkBAIC02Nyw2ICs1OSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3QuaD4KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlRXZlbnQuaCIKIAot
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtMzksNiArMzgs
NyBAQAogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdl
RXZlbnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRl
ICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQu
aCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5
QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhT
ZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDcgKzY2LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAg
IGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoSlNET01X
cmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9i
amVjdCkpCisgICAgaWYgKEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJy
ZW50V29ybGQoZXhlYyksIG9iamVjdCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAg
c3dpdGNoIChvYmplY3QtPnBhdGhTZWdUeXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7CiAgICAgaWYg
KHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDcgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIAogICAgIGlmICghdHJhY2spCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAg
ICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgdHJhY2spOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihj
dXJyZW50V29ybGQoZXhlYyksIHRyYWNrKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0
dXJuIHdyYXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxNCBAQAogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0VYVERyYXdCdWZmZXJzLmgi
CiAjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRlICJK
U0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIkpTSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5o
IgogI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgogI2luY2x1ZGUgIkpTT0VT
VGV4dHVyZUZsb2F0LmgiCiAjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAjaW5j
bHVkZSAiSlNPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgi
CiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiSlNX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKQEAgLTg1LDEwICs4MSw4IEBACiAjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5
cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogI2lmIEVOQUJMRShW
SURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAj
aW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmgiCkBAIC01MCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8aW50ZXJw
cmV0ZXIvU3RhY2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCkBAIC0xMjcsOSArMTI3LDEwIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVx
dWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0RPTUZvcm1E
YXRhKHZhbCksIGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVm
ZmVyOjpzX2luZm8pKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFs
KSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXJWaWV3
OjpzX2luZm8pKQotICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXJWaWV3KHZh
bCksIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpT
QXJyYXlCdWZmZXJWaWV3OjpzX2luZm8pKSB7CisgICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiB2aWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsKTsKKyAgICAgICAgICAgIGltcGwo
KS0+c2VuZCh2aWV3LmdldCgpLCBlYyk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaW1w
bCgpLT5zZW5kKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVKU0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAj
aW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0SGFzaFRhYmxl
TWFwLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTc1LDYgKzc2
LDcgQEAgaW5saW5lIHZvaWQgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YShKUwogICAgIFdlYkNv
cmVKU0NsaWVudERhdGEqIHdlYkNvcmVKU0NsaWVudERhdGEgPSBuZXcgV2ViQ29yZUpTQ2xpZW50
RGF0YTsKICAgICB2bS0+Y2xpZW50RGF0YSA9IHdlYkNvcmVKU0NsaWVudERhdGE7IC8vIH5WTSBk
ZWxldGVzIHRoaXMgcG9pbnRlci4KICAgICB3ZWJDb3JlSlNDbGllbnREYXRhLT5tX25vcm1hbFdv
cmxkID0gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUodm0sIHRydWUpOworICAgIHZtLT5tX3R5cGVk
QXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
cigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPGhl
YXAvUGFzc1dlYWsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCitXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcigpCisgICAgOiBtX293bmVyKCkKK3sKK30KK1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVy
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUJ1ZmZlciogbmF0aXZlKQorewor
ICAgIHJldHVybiBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KAorICAgICAgICB0b0pTKGV4ZWMsIGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIG5hdGl2ZSkpOworfQorCiti
b29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cygKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlcioganNBcnJheUJ1
ZmZlciA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAg
ICBpZiAoIWpzQXJyYXlCdWZmZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIEFycmF5QnVmZmVyKiByb290ID0ganNBcnJheUJ1ZmZlci0+aW1wbCgp
OworICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKK30KKwordm9p
ZCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6ZmluYWxp
emUoCisgICAgSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihoYW5k
bGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSBzdGF0aWNf
Y2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3Js
ZCwganNBcnJheUJ1ZmZlci0+aW1wbCgpLCBqc0FycmF5QnVmZmVyKTsKKyAgICBqc0FycmF5QnVm
ZmVyLT5pbXBsKCktPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyIDogcHVibGljIEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVi
bGljOgorICAgIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgfldl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6QXJyYXlCdWZmZXIqKTsKKyAgICAKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKCkgeyByZXR1cm4gJm1fb3duZXI7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBKU0Fy
cmF5QnVmZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworICAgIH07CisKKyAgICBKU0FycmF5QnVmZmVyT3duZXIgbV9vd25l
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpA
QCAtMTgwLDIxICsxODAsMjIgQEAgc3ViIEZvckFsbFBhcmVudHMKIAogICAgIG15ICRyZWN1cnNl
OwogICAgICRyZWN1cnNlID0gc3ViIHsKKyAgICAgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hp
ZnQ7CiAgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gc2hpZnQ7CiAKICAgICAgICAgZm9y
IChAeyRjdXJyZW50SW50ZXJmYWNlLT5wYXJlbnRzfSkgewogICAgICAgICAgICAgbXkgJGludGVy
ZmFjZU5hbWUgPSAkXzsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0
LT5QYXJzZUludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICBteSAkcGFyZW50
SW50ZXJmYWNlID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJG91dGVySW50ZXJmYWNlLCAkaW50
ZXJmYWNlTmFtZSk7CiAKICAgICAgICAgICAgIGlmICgkYmVmb3JlUmVjdXJzaW9uKSB7CiAgICAg
ICAgICAgICAgICAgJiRiZWZvcmVSZWN1cnNpb24oJHBhcmVudEludGVyZmFjZSkgZXEgJ3BydW5l
JyBhbmQgbmV4dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICYkcmVjdXJzZSgkcGFyZW50
SW50ZXJmYWNlKTsKKyAgICAgICAgICAgICYkcmVjdXJzZSgkb3V0ZXJJbnRlcmZhY2UsICRwYXJl
bnRJbnRlcmZhY2UpOwogICAgICAgICAgICAgJiRhZnRlclJlY3Vyc2lvbigkcGFyZW50SW50ZXJm
YWNlKSBpZiAkYWZ0ZXJSZWN1cnNpb247CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgJiRyZWN1
cnNlKCRpbnRlcmZhY2UpOworICAgICYkcmVjdXJzZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlKTsK
IH0KIAogc3ViIEZpbmRTdXBlck1ldGhvZApAQCAtMjM4LDYgKzIzOSw3IEBAIHN1YiBJRExGaWxl
Rm9ySW50ZXJmYWNlCiBzdWIgUGFyc2VJbnRlcmZhY2UKIHsKICAgICBteSAkb2JqZWN0ID0gc2hp
ZnQ7CisgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5h
bWUgPSBzaGlmdDsKIAogICAgIHJldHVybiB1bmRlZiBpZiAkaW50ZXJmYWNlTmFtZSBlcSAnT2Jq
ZWN0JzsKQEAgLTI0OCw3ICsyNTAsNyBAQCBzdWIgUGFyc2VJbnRlcmZhY2UKIAogICAgICMgU3Rl
cCAjMTogRmluZCB0aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRoICdpbnRlcmZhY2UnCiAgICAg
bXkgJGZpbGVuYW1lID0gJG9iamVjdC0+SURMRmlsZUZvckludGVyZmFjZSgkaW50ZXJmYWNlTmFt
ZSkKLSAgICAgICAgb3IgZGllKCJDb3VsZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNl
IFwiJGludGVyZmFjZU5hbWVcIiFcbiIpOworICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5k
IElETCBmaWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiLCByZWFjaGFibGUgZnJv
bSBcIiIgLiAkb3V0ZXJJbnRlcmZhY2UtPm5hbWUgLiAiXCIhXG4iKTsKIAogICAgIHByaW50ICIg
IHwgIHw+ICBQYXJzaW5nIHBhcmVudCBJREwgXCIkZmlsZW5hbWVcIiBmb3IgaW50ZXJmYWNlIFwi
JGludGVyZmFjZU5hbWVcIlxuIiBpZiAkdmVyYm9zZTsKIApAQCAtMjc3LDYgKzI3OSwxMCBAQCBz
dWIgU2tpcEluY2x1ZGVIZWFkZXIKIAogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdOdW1iZXIuaCBk
b2VzIG5vdCBleGlzdC4KICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAg
ICAKKyAgICAjIFR5cGVkIGFycmF5cyBhbHJlYWR5IGluY2x1ZGVkIGJ5IEpTRE9NQmluZGluZy5o
LgorICAgIHJldHVybiAxIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOworICAg
IAogICAgIHJldHVybiAwOwogfQogCkBAIC0zNjgsNyArMzc0LDcgQEAgc3ViIElzVHlwZWRBcnJh
eVR5cGUKICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJBcnJheUJ1ZmZlciIpIG9yICgkdHlw
ZSBlcSAiQXJyYXlCdWZmZXJWaWV3IikpOwogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIlVp
bnQ4QXJyYXkiKSBvciAoJHR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFycmF5Iikgb3IgKCR0eXBlIGVx
ICJVaW50MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDMyQXJyYXkiKSk7CiAgICAgcmV0dXJu
IDEgaWYgKCgkdHlwZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQxNkFycmF5Iikg
b3IgKCR0eXBlIGVxICJJbnQzMkFycmF5IikpOwotICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEg
IkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5IikpOworICAgIHJldHVy
biAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFy
cmF5Iikgb3IgKCR0eXBlIGVxICJEYXRhVmlldyIpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
NjA5LDYgKzYxNSw3IEBAIHN1YiBJc1dyYXBwZXJUeXBlCiAgICAgcmV0dXJuIDAgaWYgJG9iamVj
dC0+R2V0U2VxdWVuY2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0Vu
dW1UeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5
cGUpOworICAgIHJldHVybiAwIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwog
ICAgIHJldHVybiAwIGlmICR3ZWJDb3JlVHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVybiAwIGlm
ICR0eXBlIGVxICJhbnkiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgbXkgJGlu
Y2x1ZGVzUmVmID0gc2hpZnQ7CiAKICAgICByZXR1cm4gaWYgU2tpcEluY2x1ZGVIZWFkZXIoJHR5
cGUpOwotCisgICAgCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxl
LXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3Bl
Y2lhbCBjYXNlcy4KICAgICBpZiAoJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKQEAgLTIy
NSw4ICsyMjUsNiBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1Jl
Zi0+eyJKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCRpc0Nh
bGxiYWNrICYmICRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkgewogICAgICAg
ICAkaW5jbHVkZXNSZWYtPnsiSlMke3R5cGV9LmgifSA9IDE7Ci0gICAgfSBlbHNpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICRpbmNsdWRlc1Jl
Zi0+eyI8cnVudGltZS8ke3R5cGV9Lmg+In0gPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMg
ZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAgICAgICAgICRpbmNsdWRlc1Jl
Zi0+eyIke3R5cGV9LmgifSA9IDE7CkBAIC02ODIsMTEgKzY4MCw3IEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogICAgIH0KIAogICAgIGlmICgkaGFzUGFyZW50ICYmICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgewotICAgICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGludGVyZmFjZU5hbWUpKSB7Ci0gICAg
ICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lLyRpbnRlcmZhY2VOYW1lLmg+In0gPSAx
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJm
YWNlTmFtZS5oIn0gPSAxOwotICAgICAgICB9CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGlu
dGVyZmFjZU5hbWUuaCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgJGhlYWRlckluY2x1ZGVzeyI8
cnVudGltZS9KU09iamVjdC5oPiJ9ID0gMTsKQEAgLTk2MiwyMiArOTU2LDYgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7CiAgICAg
fQogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkg
YW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJB
cnJheUJ1ZmZlciIpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IGNvbnN0IEpTQzo6VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjoi
KTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQ4IikgaWYgJGlt
cGxUeXBlIGVxICJJbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlw
ZWRBcnJheUludDE2IikgaWYgJGltcGxUeXBlIGVxICJJbnQxNkFycmF5IjsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiSW50
MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDgi
KSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhDbGFt
cGVkQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQx
NiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDE2QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiVHlwZWRBcnJheVVpbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDMyQXJyYXki
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0MzIiKSBpZiAk
aW1wbFR5cGUgZXEgIkZsb2F0MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJUeXBlZEFycmF5RmxvYXQ2NCIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQ2NEFycmF5IjsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIjtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiICAgIGludHB0cl90IG1fc3RvcmFnZUxlbmd0aDtcbiIpOwotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQqIG1fc3RvcmFnZTtcbiIpOwotICAgIH0KLQogICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9y
CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xODY2LDEyICsx
ODQ0LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwotICAgICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBu
ZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IGRlc2NyaXB0b3IoJiR7Y2xhc3NOYW1lfTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFz
c05hbWV9LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFzc05hbWV9LCBtX3N0b3Jh
Z2VMZW5ndGgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdm0u
cmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihpbXBsKCksIGRlc2NyaXB0b3IpO1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2UgPSBpbXBsKCktPmRh
dGEoKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdl
TGVuZ3RoID0gaW1wbCgpLT5sZW5ndGgoKTtcbiIpOwotICAgICAgICB9CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTIzNzEsNyArMjM0Mywx
MSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBh
cmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVk
ZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJh
eVR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKSBhbmQgbm90ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSBlcSAiQXJyYXlCdWZmZXIiKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFsdWUuZ2V0KCkiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFs
dWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVk
Qnl9LmgifSA9IDE7CkBAIC0yNTIzLDEzICsyNDk5LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVk
VGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoZXhlYykpO1xuIik7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5uYW1lIGVxICJzZXQiIGFuZCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkdmll
d1R5cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9Owot
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShzZXRXZWJHTEFycmF5SGVscGVyPCRpbXBsVHlwZSwgJHZpZXdUeXBlPihl
eGVjLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV4
dDsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+
KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQ
cm9wZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChpbXBsLT5pc1JlYWRPbmx5KCkpIHtcbiIpOwpAQCAtMzA4NCw3ICszMDUzLDcg
QEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CisgICAgICAgIGlmICgk
YXJnVHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlU
eXBlKCRhcmdUeXBlKSBhbmQgbm90ICRhcmdUeXBlIGVxICJBcnJheUJ1ZmZlciIpKSB7CiAgICAg
ICAgICAgICBwdXNoIEBhcmd1bWVudHMsICIkbmFtZS5nZXQoKSI7CiAgICAgICAgIH0gZWxzaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5v
dCAkaW50ZXJmYWNlTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVu
dHMsICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CkBAIC0zMzY2LDYgKzMzMzUsNyBAQCBz
dWIgR2V0TmF0aXZlVHlwZQogICAgIG15ICRzdmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3It
PkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkdHlwZSk7CiAgICAgcmV0dXJuICIke3N2Z05hdGl2
ZVR5cGV9KiIgaWYgJHN2Z05hdGl2ZVR5cGU7CiAgICAgcmV0dXJuICJSZWZQdHI8RE9NU3RyaW5n
TGlzdD4iIGlmICR0eXBlIGVxICJET01TdHJpbmdMaXN0IjsKKyAgICByZXR1cm4gIlJlZlB0cjwk
e3R5cGV9PiIgaWYgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpIGFuZCBu
b3QgJHR5cGUgZXEgIkFycmF5QnVmZmVyIjsKICAgICByZXR1cm4gJG5hdGl2ZVR5cGV7JHR5cGV9
IGlmIGV4aXN0cyAkbmF0aXZlVHlwZXskdHlwZX07CiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNv
ZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CkBAIC0zNTA1LDYgKzM0NzUsMTAgQEAg
c3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01TdHJp
bmdMaXN0LmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gInRvRE9NU3RyaW5nTGlz
dChleGVjLCAkdmFsdWUpIjsKICAgICB9CisgICAgCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICByZXR1cm4gInRvJHR5cGUoJHZhbHVl
KSI7CisgICAgfQogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkhUTUxPcHRpb25FbGVtZW50Lmgi
LCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJIVE1MT3B0aW9uRWxlbWVudCI7CiAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVu
dCI7CkBAIC0zNTc0LDcgKzM1NDgsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIsICRjb25kaXRpb25hbCk7CiAg
ICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgJHZhbHVlKSI7CiAgICAgfQot
CisgICAgCiAgICAgbXkgJGdsb2JhbE9iamVjdDsKICAgICBpZiAoJHRoaXNWYWx1ZSkgewogICAg
ICAgICAkZ2xvYmFsT2JqZWN0ID0gIiR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpIjsKQEAgLTM2
MTUsMTQgKzM1ODksMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIH0gZWxzaWYgKCR0eXBl
IGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIsICRjb25kaXRpb25h
bCk7CiAgICAgICAgIHJldHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKSI7CisgICAgfSBlbHNpZiAo
JGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgRG8g
bm90aGluZyAtIGFsbCBoZWFkZXJzIGFyZSBhbHJlYWR5IGluY2x1ZGVkLgogICAgIH0gZWxzZSB7
CiAgICAgICAgICMgRGVmYXVsdCwgaW5jbHVkZSBoZWFkZXIgd2l0aCBzYW1lIG5hbWUuCiAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvJHR5cGUuaD4iLCAkY29uZGl0aW9uYWwp
IGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiR0eXBlLmgiLCAkY29u
ZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUp
OwotICAgICAgICB9CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRp
dGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsK
ICAgICB9CiAKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1h
dGVkVHlwZSgkdHlwZSk7CkBAIC00MTA1LDMwICs0MDc3LDYgQEAgRU5ECiB9CiAKIEVORAotICAg
ICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRl
cmZhY2UsICJUeXBlZEFycmF5IikpIHsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTQXJy
YXlCdWZmZXJWaWV3SGVscGVyLmgifSA9IDE7Ci0gICAgICAgICAgICBteSAkdmlld1R5cGUgPSAk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9OwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2Nv
bnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhl
YylcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxs
ZWUoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8
JGludGVyZmFjZU5hbWU+IGFycmF5ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3PCRpbnRlcmZh
Y2VOYW1lLCAkdmlld1R5cGU+KGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKCFhcnJheS5nZXQoKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICAvLyBFeGNlcHRpb24gaGFzIGFscmVhZHkgYmVlbiB0aHJvd24u
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpz
Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpKTtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICR7aW50ZXJmYWNlTmFtZX0qIG9iamVjdClc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRvSlNBcnJheUJ1ZmZlclZpZXc8JHtj
bGFzc05hbWV9PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmluZGV4
U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVl
IHZhbHVlKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7
Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGltcGwoKS0+c2V0KGlu
ZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG5cbiIpOwotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2lmICgh
SGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgJiYgKCEkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0aW5nTmFtZWRDb25z
dHJ1Y3RvcikpIHsKICAgICAgICAgICAgIG15ICRvdmVybG9hZGVkSW5kZXhTdHJpbmcgPSAiIjsK
ICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ICYmICRmdW5jdGlv
bi0+e292ZXJsb2FkZWRJbmRleH0gPiAwKSB7CkBAIC00MjA3LDcgKzQxNTUsNyBAQCBzdWIgR2Vu
ZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKIAogICAgIG15ICRjb25zdHJ1Y3RvckNsYXNz
TmFtZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1lZENv
bnN0cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAgICAgbXkgJGxlYXN0Q29u
c3RydWN0b3JMZW5ndGggPSAwOwotICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3Rv
clRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0
cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgeworICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpKSB7
CiAgICAgICAgICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMTsKICAgICB9IGVsc2lmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgewogICAgICAgICBt
eSBAY29uc3RydWN0b3JzID0gQHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChB
cnJheUJ1ZmZlciogYXIKICAgICBhcHBlbmRCeXRlc0RhdGEoYXJyYXlCdWZmZXItPmRhdGEoKSwg
YXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLXZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVu
ZChBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldykKK3ZvaWQgQmxvYkJ1aWxkZXI6OmFw
cGVuZChQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3KQogewogICAg
IEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkJsb2IuY29u
c3RydWN0b3IuQXJyYXlCdWZmZXJPclZpZXciLCBCbG9iQ29uc3RydWN0b3JBcnJheUJ1ZmZlclZp
ZXcsIEJsb2JDb25zdHJ1Y3RvckFycmF5QnVmZmVyT3JWaWV3TWF4KTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFN0cmluZyYgZW5kaW5nKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICB2
b2lkIGFwcGVuZChKU0M6OkFycmF5QnVmZmVyKik7Ci0gICAgdm9pZCBhcHBlbmQoSlNDOjpBcnJh
eUJ1ZmZlclZpZXcqKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3Pik7CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihjb25zdCBT
dHJpbmcmIGNvbnRlbnRUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKLSAgICBDdXN0b21Db25zdHJ1
Y3Rvcih1bnNpZ25lZCBsb25nIGxlbmd0aCksCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MsCi0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJs
ZQotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXIgewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGJ5dGVMZW5ndGg7Ci0gICAgQXJyYXlCdWZmZXIgc2xpY2UobG9uZyBiZWdpbiwg
b3B0aW9uYWwgbG9uZyBlbmQpOwotfTsKLQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBK
U05vU3RhdGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRl
cmZhY2UgQXJyYXlCdWZmZXJWaWV3IHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgQXJyYXlCdWZm
ZXIgYnVmZmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVPZmZz
ZXQ7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLX07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFt
ZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRh
dGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hl
Y2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVy
Zmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3Ro
OwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2Fm
ZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi0gICAgOiBBcnJh
eUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVM
ZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVu
ZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwot
I2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9p
ZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFyIHRlbXAgPSAqcDsKLSAg
ICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9y
MTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKLX0KLQotc3RhdGlj
IHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAg
KyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQotc3RhdGljIHZvaWQgZmxp
cEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKLSAg
ICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsK
LSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVz
SWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKLXsK
LSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgZmxpcEJ5dGVzRm9y
MTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBmbGlw
Qnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAg
ICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
LXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJ
TkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgZG8g
bm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBh
IGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQg
bG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2Yo
VCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRs
ZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYmV5b25k
UmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRo
ZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hp
dGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCi0gICAgVmFsdWU8
VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7Ci0gICAgZmxpcEJ5dGVz
SWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAg
bWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRl
bXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBn
ZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQotdWludDhfdCBEYXRh
Vmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0K
LQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGlu
dDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MTZfdCBEYXRh
Vmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9m
ZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8Zmxv
YXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6
OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRE
YXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0
YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMp
OwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7
Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxv
YXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0K
LXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9p
ZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwot
ICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0KLSNpbmNsdWRlIDxydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3Mg
RGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBj
b25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNl
dCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MTZfdCBnZXRV
aW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdl
dFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDE2X3QgZ2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGlu
dDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQz
MihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRv
dWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBkb3VibGUg
Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhf
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQz
Ml90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAg
ICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZs
b2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZv
aWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25l
ZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8
fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZUxl
bmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YVZp
ZXdfaApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4
dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IoQXJy
YXlCdWZmZXIgYnVmZmVyLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aCksCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAg
ICBKU05vU3RhdGljVGFibGVzCi1dIGludGVyZmFjZSBEYXRhVmlldyA6IEFycmF5QnVmZmVyVmll
dyB7Ci0gICAgLy8gQWxsIHRoZXNlIG1ldGhvZHMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZXkg
d291bGQgcmVhZCBvciB3cml0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdmlldy4KLQotICAgIFtS
YWlzZXNFeGNlcHRpb25dIGJ5dGUgZ2V0SW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwot
ICAgIFtSYWlzZXNFeGNlcHRpb25dIG9jdGV0IGdldFVpbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9m
ZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHNob3J0
IGdldEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0
bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdW5z
aWduZWQgc2hvcnQgZ2V0VWludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwg
Ym9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gbG9uZyBnZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFs
IGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgZ2V0VWludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgLy8gVXNlIGN1c3RvbSBj
b2RlIHRvIGhhbmRsZSBOYU4gY2FzZS4KLSAgICBbQ3VzdG9tLCBTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZz
ZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbQ3VzdG9tLCBTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQg
bG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAgICBb
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBi
eXRlIHZhbHVlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQ4KHVuc2lnbmVk
IGxvbmcgYnl0ZU9mZnNldCwgb2N0ZXQgdmFsdWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCwgc2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDE2KHVuc2lnbmVk
IGxvbmcgYnl0ZU9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4g
bGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgc2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBsb25nIHZhbHVlLCBvcHRp
b25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxvbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RmxvYXQzMih1bnNp
Z25lZCBsb25nIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRs
ZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHNldEZsb2F0NjQodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLX07Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIENvbXB1
dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4
dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1U
eXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwK
LSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9ZmxvYXQsCi0gICAgSW1w
bGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDMyQXJyYXkgOiBBcnJh
eUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQg
PSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAg
IEZsb2F0MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
c3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0K
LSAgICBnZXR0ZXIgZmxvYXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBz
ZXQoRmxvYXQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0g
ICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3Jr
ZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAg
Q3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAg
SlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tD
b25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1kb3VibGUsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDY0QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewot
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA4OwotCi0gICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEZsb2F0NjRBcnJheSBz
dWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgZG91
YmxlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0NjRBcnJh
eSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0
KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0g
ICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4
QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhB
cnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDhBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAot
ICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0
dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVz
LAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBU
eXBlZEFycmF5PXNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwot
XSBpbnRlcmZhY2UgSW50OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGJ5dGUgKHVuc2lnbmVkIGxvbmcgaW5k
ZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9w
dGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEw
IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAg
IEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVj
dG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpT
R2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3Rv
bVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXNo
b3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50MTZB
cnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19Q
RVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7Ci0gICAgSW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlv
bmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBl
bmQpOwotCi0gICAgZ2V0dGVyIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8v
IHZvaWQgc2V0KEludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRv
dyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXks
Ci0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3Qs
Ci0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90
Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1pbnQsCi0gICAgSW1wbGVtZW50YXRpb25O
YW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsK
LSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQzMkFycmF5IHN1
YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgbG9uZyAo
dW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQzMkFycmF5IGFycmF5
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVu
Y2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lk
IHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXku
aWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50
OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAg
Q29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIs
Ci0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0g
ICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVk
QXJyYXk9dW5zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0g
aW50ZXJmYWNlIFVpbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAg
ICBnZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQo
VWludDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8v
IHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4
dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1U
eXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwK
LSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgY2hhciwK
LSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQ4Q2xhbXBl
ZEFycmF5IDogVWludDhBcnJheSB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJf
RUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5n
dGg7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBv
cHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgb2N0
ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gRklYTUU6IE1pc3Npbmcgb3RoZXIg
c2V0dGVycyEKLSAgICAvLyB2b2lkIHNldChVaW50OENsYW1wZWRBcnJheSBhcnJheSwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+
IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsK
LX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJh
eS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwot
ICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0
cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAg
IEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1
c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5
PXVuc2lnbmVkIHNob3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRl
cmZhY2UgVWludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVk
IGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVu
ZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAg
Z2V0dGVyIHVuc2lnbmVkIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZv
aWQgc2V0KFVpbnQxNkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5k
b3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5
LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0
LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05v
dENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgaW50LAotICAgIEltcGxl
bWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDMyQXJyYXkgOiBBcnJheUJ1
ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVp
bnQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHVuc2lnbmVkIGxvbmcgKHVuc2ln
bmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDMyQXJyYXkgYXJyYXksIG9w
dGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxs
b25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0
KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCAr
NDEsNyBAQCBuYW1lc3BhY2UgewogCiBib29sIGlzSW50ZWdlckFycmF5KEFycmF5QnVmZmVyVmll
dyogYXJyYXkpCiB7Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSB0eXBlID0gYXJyYXkt
PmdldFR5cGUoKTsKLSAgICByZXR1cm4gdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4
Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgKLSAgICAg
ICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OENsYW1wZWQKLSAgICAg
ICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQxNgotICAgICAgICAgICB8
fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQxNgotICAgICAgICAgICB8fCB0eXBl
ID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDMyCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJy
YXlCdWZmZXJWaWV3OjpUeXBlVWludDMyOworICAgIHJldHVybiBKU0M6OmlzSW50KGFycmF5LT5n
ZXRUeXBlKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJEYXRh
Vmlldy5oIgogI2ltcG9ydCAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW1wb3J0ICJG
bG9hdENvbnZlcnNpb24uaCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgpAQCAtNDcsNiAr
NDYsNyBAQAogI2ltcG9ydCAiV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBv
cnQgPHJ1bnRpbWUvRGF0YVZpZXcuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4K
ICNpbXBvcnQgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDhB
cnJheS5oPgpAQCAtOTI0LDcgKzkyNCw3IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKICAgICAgICAgdW5zaWduZWQga2V5VVJJU2l6ZSA9IGtleVVSSS5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhcik7CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERhdGFC
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKDQgKyBrZXlVUklTaXplLCAxKTsKICAgICAgICAg
UmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRh
QnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAgICAgaW5pdERh
dGFWaWV3LT5zZXRVaW50MzIoMCwga2V5VVJJU2l6ZSwgdHJ1ZSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIGluaXREYXRhVmlldy0+c2V0PHVpbnQzMl90PigwLCBrZXlVUklTaXplLCB0cnVl
KTsKIAogICAgICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJy
YXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgNCwga2V5VVJJLmxlbmd0aCgpKTsKICAgICAgICAg
a2V5VVJJQXJyYXktPnNldFJhbmdlKGtleVVSSS5jaGFyYWN0ZXJzKCksIGtleVVSSS5sZW5ndGgo
KSAvIHNpemVvZih1bnNpZ25lZCBjaGFyKSwgMCk7CkBAIC0xMjA2LDExICsxMjA2LDExIEBAIGJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAvLyBVc2UgYSBEYXRh
VmlldyB0byByZWFkIHVpbnQzMiB2YWx1ZXMgZnJvbSB0aGUgYnVmZmVyLCBhcyBVaW50MzJBcnJh
eSByZXF1aXJlcyB0aGUgcmVhZHMgYmUgYWxpZ25lZCBvbiA0LWJ5dGUgYm91bmRhcmllcy4gCiAg
ICAgUmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXRE
YXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAgICB1aW50MzJf
dCBvZmZzZXQgPSAwOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgc3RhdHVz
ID0gdHJ1ZTsKIAotICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0
VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGlu
aXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9m
ZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBrZXlVUklMZW5ndGggPiBpbml0RGF0
YS0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4g
aW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8
VWludDE2QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1
ZmZlciwgb2Zmc2V0LCBrZXlVUklMZW5ndGgpOwpAQCAtMTIyMCw5ICsxMjIwLDkgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleVVSSSA9IFN0cmluZyhr
ZXlVUklBcnJheS0+ZGF0YSgpLCBrZXlVUklMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
KTsKICAgICBvZmZzZXQgKz0ga2V5VVJJTGVuZ3RoOwogCi0gICAgdWludDMyX3Qga2V5SURMZW5n
dGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50
MzJfdCBrZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRy
dWUsICZzdGF0dXMpOwogICAgIG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBr
ZXlJRExlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZz
ZXQgKyBrZXlJRExlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlJREFycmF5ID0gVWludDE2QXJyYXk6
OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBrZXlJRExlbmd0aCk7CkBAIC0xMjMyLDkg
KzEyMzIsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAg
a2V5SUQgPSBTdHJpbmcoa2V5SURBcnJheS0+ZGF0YSgpLCBrZXlJRExlbmd0aCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBrZXlJRExlbmd0aDsKIAotICAgIHVpbnQz
Ml90IGNlcnRpZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0
cnVlLCBlYyk7CisgICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXct
PmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsK
LSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0YS0+bGVu
Z3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBp
bml0RGF0YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNlcnRpZmlj
YXRlID0gVWludDhBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGNlcnRpZmlj
YXRlTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDdXN0b21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDkgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
KyNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotfQot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1c3RvbUZpbHRlclJlbmRlcmVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208592</attachid>
            <date>2013-08-12 21:44:56 -0700</date>
            <delta_ts>2013-08-12 22:56:31 -0700</delta_ts>
            <desc>WebCore almost links</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>628717</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxMiBA
QAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQg
YWxsb2NhdGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nngg
c3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSlNDVHlwZWRBcnJh
eVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAg
KEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBl
Rm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZn
L0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAg
IChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlND
OjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6
OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNv
dW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNl
KToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURl
YWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGlu
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAg
ICogcnVudGltZS9EYXRhVmlldy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmNwcC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Ynl0ZUxlbmd0
aCk6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1l
L0Zsb2F0MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvRmxvYXQ2NEFycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6ZGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpzZXRSYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb1Jh
bmdlKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpsZW5ndGgpOgorICAg
ICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAo
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Oml0ZW0pOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmNoZWNrSW5ib3VuZERhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmdldFR5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHZW5lcmljVHlwZWRB
cnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6Ojo6c3ViYXJyYXkpOgorICAgICAgICAq
IHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6
OmFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnNldEFycmF5QnVm
ZmVyKToKKyAgICAgICAgKiBydW50aW1lL0ludDE2QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0ludDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0ludDhBcnJheS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyOjpKU0FycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpwdXQpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXI6OmltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RB
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAg
KEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlND
OjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFW
aWV3UHJvdG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgor
ICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY1NldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jU2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2
NEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRl
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXpl
KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2ts
eSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhR
dWlja2x5QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlj
a2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAg
ICAgICAgKEpTQzo6OjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6OjpnZXRDYWxs
RGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAg
ICAgICAoSlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlVW5pbml0aWFsaXpl
ZCk6CisgICAgICAgIChKU0M6Ojo6dmFsaWRhdGVSYW5nZSk6CisgICAgICAgIChKU0M6Ojo6c2V0
V2l0aFNwZWNpZmljVHlwZSk6CisgICAgICAgIChKU0M6Ojo6c2V0KToKKyAgICAgICAgKEpTQzo6
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgIChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6OjpkZWZpbmVP
d25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAo
SlNDOjo6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjo6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKEpTQzo6Ojpjb3B5QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6OjpzbG93RG93
bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6OjpnZXRUeXBlZEFycmF5SW1wbCk6Cisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jU2V0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3Vi
YXJyYXkpOgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVz
ZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnR5cGVkQXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQx
NkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTVWludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyOjp0b0pTKToKKyAgICAgICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5n
SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAg
ICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6Rmxv
YXRUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBl
ZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNW
YWx1ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRB
cnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5
cGVkQXJyYXlEZXNjcmlwdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9Gb3JUeXBlKToKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6Omlz
VHlwZWRWaWV3KToKKyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAgICAgICAoSlNDOjpp
c0ludCk6CisgICAgICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlNDOjppc1NpZ25lZCk6
CisgICAgICAgIChKU0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5
cy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6CisgICAgICAgICog
cnVudGltZS9VaW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhBcnJheS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6
CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTA4ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXN0b3JpbmcgdXNlIG9mIFN0YWNrSXRlcmF0b3Ig
aW5zdGVhZCBvZiBJbnRlcnByZXRlcjo6Z2V0U3RhY2t0cmFjZSgpLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBEYXRlQ29uc3RydWN0b3IubHV0LmggXAogICAg
IERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVycm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBK
U0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBK
U0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0jZGVmaW5lIEpTQ1R5
cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJG
bG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJheS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhDbGFtcGVkQXJyYXku
aCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIAot
I2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0eXBlKSBcCi1jbGFzcyBKUyMjbmFtZSMjQXJyYXkg
OiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeyBcCi1wdWJsaWM6IFwKLSAgICB0eXBlZGVm
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7IFwKLSAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5
KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4gaW1wbCkgXAotICAgIHsgXAotICAgICAg
ICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJh
eShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOyBcCi0gICAgICAgIHJldHVybiBwdHI7IFwKLSAg
ICB9XAotXAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6
UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKLSAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7XAotICAgIHN0YXRpYyBj
b25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAotXAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtcCi0gICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7XAot
ICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XAotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJyYXlU
eXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJheSMjbmFtZTtcCi0gICAg
dWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0b3JhZ2U7XAotICAgIFJl
ZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0gICAgSlMjI25hbWUjI0Fy
cmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPG5hbWUjI0Fy
cmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1wKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19O1wKLVwKLWNvbnN0IENs
YXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUgIkFycmF5IiAsICZCYXNl
OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25hbWUjI0FycmF5KSB9O1wK
LVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5PiBp
bXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpXAotICAgICwg
bV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1wKLSAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbywg
T0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNF
VE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAotICAgIHZtLnJlZ2lzdGVy
VHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlwdG9yKTtcCi0gICAgbV9z
dG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxlbmd0aCA9IG1faW1wbC0+
bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKLX1cCi1cCi1ib29sIEpTIyNu
YW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVwK
LXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNB
cnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAg
ICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wKLSAg
ICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJvb2wg
SlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmpl
Y3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCi0gICAgICAgIHJldHVy
biB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
IyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPCB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+
Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAgIHJldHVybiB0cnVlO1wK
LSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wKLSAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pO1wKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVy
KGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAotICAgIH1cCi0gICAgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1c
Ci1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwKLXtcCi0gICAgbV9pbXBs
LT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAotXAotdm9pZCBKUyMjbmFt
ZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7XAotICAg
IHJldHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aDsgKytp
KVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUjI0FycmF5OjpnZXRCeUlu
ZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTtcCi0gICAgdHlwZSByZXN1bHQgPSBtX2ltcGwtPml0
ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJlc3VsdCkpXAotICAgICAg
ICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVzdWx0KTtcCi19XAotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMjI25hbWUjI0FycmF5
KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnQz
MihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxs
RnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gYnVm
ZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAgaWYgKCFidWZmZXIpIFwK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3Io
Y2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRp
dmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIyNuYW1lIyNB
cnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShVaW50OCwgdWludDhfdCk7
Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDE2
LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90KTsKLVRZUEVEX0FSUkFZ
KEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZfdCk7Ci1UWVBFRF9BUlJB
WShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBmbG9hdCk7Ci1UWVBFRF9B
UlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5o
IgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkBAIC0yMzgsMTYg
KzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjbGVhclNhbXBs
aW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7CiAjZW5kaWYKICAgICAg
ICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4QXJyYXkiLCBj
b25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXks
IDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MTZBcnJheSIs
IGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMyQXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RK
U0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIklu
dDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQzMkFycmF5Iiwg
Y29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVu
Y3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7Ci0K
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMo
KSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsg
KytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwg
anNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3QjZCNTNG
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2
REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZp
ZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8q
IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OworCQkwRjJC
NjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
ICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFNzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsg
fTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmll
d1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3Bw
ICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07CisJCTBG
MkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8q
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUx
QzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgw
MENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJCTBGNDY4MEQ0MTRCQkQy
NDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcy
IC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVy
blZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEw
MDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0Mx
RkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0Mx
RkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0
NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMzQ5LDcgKzQwMCw2
IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBB
MzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDQjE2MjM3
RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQg
LyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
Y3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI0
LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdB
OEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQg
LyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3QURCNUYz
MDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThB
RjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQwMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4
Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3QURCNUYz
MDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJCTBGMjM1QkVBMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcvREZHT1NS
RXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1
MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGgg
PSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkFB
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBBN0FFM0Yg
LyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0
YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIxN0I2QjVB
QjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmll
dy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNG
bG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkND
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDYxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRv
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFkYXB0b3Jz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMx
RjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NCw2ICsxMzUyLDcgQEAK
IAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUFGMTYxM0MxRkIw
MENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFj
dFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBGRUEwQTJFMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUu
Y3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3
QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUZD
OUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4
OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3QjVCNDE3
QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRB
cnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJy
YXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhE
MDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAu
Y3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQg
LyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FE
QjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdB
OEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBq
c2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywK
IAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAq
LywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmgg
Ki8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2VzLm1ha2Ug
Ki8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0
b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKQEAgLTI1
NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMu
aCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEsOCBAQAogCQkJCTBGREIy
Q0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovLAogCQkJCUJDQTYy
REZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlCQzhGM0ND
RjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAorCQkJCTBGMkI2NkIwMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAw
QTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3MTM1RTAwMkM3RTgyIC8q
IERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3MTM1RTAwMkM3RTgyIC8q
IERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBAQAogCQkJCUY2OTJBODVE
MDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAogCQkJCUMyRDU4QzMz
MTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCURERjdB
QkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkwRjJC
NjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJ
MEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAq
LywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCiAJ
CQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3BwICovLApAQCAtMjky
MCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJh
eS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8s
CiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAotCQkJCUE3
QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJ
CQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rp
b24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTREQTgxOEUwRDk5RkQyMDAw
QjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIw
OCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNB
cnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5o
ICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0
MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0
MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5
RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3ICszMDQ4LDMyIEBACiAJ
CQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAogCQkJCTE0
QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCiAJCQkJODY1QTMwRjAx
MzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QkQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJFMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJOTc4OEZDMjIxNDcxQUQw
QzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4
Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2
IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVu
Y3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9u
LmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25JbmxpbmVz
LmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJ
CQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovLAogCQkJCTE0REUw
RDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8sCiAJCQkJQThFODk0
MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJCQkJQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlC
Qzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywK
KwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8sCisJCQkJ
MEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2
NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCTY1RUE0Qzk5MDky
QUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0QzlBMDkyQUY5RTIwMDkz
RDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRBMDAyRTM1ODcgLyogSlNO
YW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJCQkJMEY5MTlEMDkxNTdF
RTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBB
MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0
NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBGMkI2NkNDMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCTBGMkI2NkNE
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkw
RjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgKi8s
CisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAg
Ki8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywK
IAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAorCQkJCTBG
MkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2
RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQlCQzIyQTM5QTBFMTZF
MTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMTRGMjUyNTYwRDA4
REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJCQkxNDQyNTY1RjE1RURF
OThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1MSw2ICszMTg2LDggQEAK
IAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCiAJCQkJMEY3NzAw
OTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8sCiAJCQkJMEY3NzAw
OEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAorCQkJCTBGMkI2NkQ2
MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAg
Ki8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAog
CQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAq
LywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENEMjkzMzEwMEI1QjRGRiAv
KiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAvKiBUcmFj
aW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLywK
LQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLywKLQkJ
CQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLywK
KwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8s
CisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGlu
ZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAq
LywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICov
LAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAog
CQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2
NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlB
N0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1MzgsMTIg
KzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5
cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyog
QXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0
OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZERjE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFDMTdC
NkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFu
dFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBB
U1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQg
LyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Njcz
OUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2
NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1LDYgKzM3
MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyogQ2FsbElk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUw
MEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICszNzEyLDcg
QEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJCQkJMEZEQjJDRUExNzQ4
OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFE
MkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIy
MDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3
OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQ
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8q
IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyog
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJCQlBN0Q4OUNGODE3QTBC
OENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5
Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2
QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYgKzM4MDks
NyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAw
MTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3
QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIy
QUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1
QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQjE1
MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVy
YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg0
LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUz
MiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURG
NzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEz
MjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM2
OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
QTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVy
aWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAw
MEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZl
SklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBACiAJCQkJMEYyMUMyN0Mx
NEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0
IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAw
NUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQzkxNzNE
QTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9y
bWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUwMDlERjc0
NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjQx
NzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExK
SVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRB
NSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1Miw2IEBACiAJCQkJ
QTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlD
MDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5
RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVF
OTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgz
NUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2
RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVF
MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlND
VGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxNCw3IEBACiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1
NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2ICs0MDI2
LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0YWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUsNyBAQAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAwMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkz
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAu
aCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJCQlBN0U1QUIzODE3OTlF
NEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJF
MzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1cC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50
ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAv
KiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0MDg5LDcg
QEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcw
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAogCQkJCUMyMTEyMkUzMTVE
RDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmpl
Y3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyog
TWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIgLyogTmFt
ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVj
dG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5v
ZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3IEBACiAJCQkJMEYzNEIx
NEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQw
MiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAogCQkJCTE0NzRDMzNCMTZB
QTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMz
MkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYw
NDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2
QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYw
QUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5NCw3IEBA
CiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291
cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEy
RUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICov
LApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyog
U3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFC
NTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3Ry
aW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAogCQkJCUMyRkUxOEE0MTZC
QUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyog
U3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkw
MEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAt
NDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5r
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkg
LyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcw
MzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlC
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlw
ZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFk
ZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4
QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAv
KiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMw
MDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAy
RkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdn
ZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3
Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkx
NEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1
MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJE
OSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2
QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1
QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENB
MDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1
NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZE
RTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0
OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1
MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3
MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2
OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRh
Vmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyog
SlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4NzMsNyBA
QAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBK
U1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTYsNyBA
QAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEy
QjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyArNDk0NywyMSBAQAog
CQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdo
aXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAw
MTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEy
MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAx
NTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZE
NEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQw
MkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0
OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQy
NTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5k
ZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFz
c0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJldHVybiBp
c1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGlu
ZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05
OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAog
aW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBlSW50ODoK
ICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoK
KyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAg
Y2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVy
biBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlw
ZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJy
YXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICByZXR1
cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAg
IGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNh
c2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVy
biBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2Ug
VHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBU
eXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4g
SklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIs
NiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAg
ICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5
TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50
MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6
CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6
CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgp
OworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRB
cnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkg
KzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAg
aWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU0Z1bmN0aW9uOjpzX2luZm8pKQogICAgICAg
ICByZXR1cm4gU3BlY0Z1bmN0aW9uOwogICAgIAotICAgIGlmIChjbGFzc0luZm8tPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKGNsYXNz
SW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUlu
dDg6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBl
ZEFycmF5SW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7Ci0gICAgICAg
IGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVj
VWludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFy
cmF5VWludDE2OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZBcnJheTsKLSAgICAgICAg
Y2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJh
eTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgIHJldHVybiBT
cGVjRmxvYXQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0QXJyYXk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gU3BlY0lu
dDhBcnJheTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFy
cmF5OworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7
CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKKyAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVk
QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFy
cmF5OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJh
eTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJh
eTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJh
eTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgaWYgKGNs
YXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmlu
ZyhBcnJhCiAgICAgfQogfQogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5
OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDg7CisgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDMyOworICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7CisgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2Fz
ZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiB2b2lk
IEFycmF5TW9kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dCh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29udmVyc2lvbigpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIGNvbnN0IGNoYXIqIGFycmF5Q2xhc3NUb1N0cmlu
ZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhBcnJheTo6
U3BlY3VsYXRpb24pOwogY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6
OkNvbnZlcnNpb24pOwogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJyYXlUeXBlKEFycmF5OjpU
eXBlKTsKKwogY2xhc3MgQXJyYXlNb2RlIHsKIHB1YmxpYzoKICAgICBBcnJheU1vZGUoKQpAQCAt
MzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6
OlN0cmluZzsKICAgICB9CiAgICAgCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvVHlwZWRBcnJheVR5cGUodHlwZSgpKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjY3LDM3ICsy
NjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25B
cmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQz
Ml90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0yODczLDQ2ICsyODQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQx
Nl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVk
QXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgxLDM3ICsyNTgxLDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY2FzZSBB
cnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25Bcmd1bWVudHMo
bm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQzMl90KSwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBA
IC0yODcyLDQ2ICsyODQ4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQx
NkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUg
dHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgz
LDMyICs1ODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAg
ICAgfQogfQogICAgIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklU
Ojp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRj
aCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAg
ICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQxNkFycmF5
RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpV
aW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlw
dG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBB
cnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIHJl
dHVybiAmbV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJh
eTo6RmxvYXQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0MzJBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHJl
dHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogSklUQ29tcGlsZXI6Okp1bXAgU3BlY3Vs
YXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFy
cmF5TW9kZSBhcnJheU1vZGUsIEluZGV4aW5nVHlwZSBzaGFwZSkKIHsKICAgICBzd2l0Y2ggKGFy
cmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKQEAgLTY5NCw4ICs2NjgsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0eXBlZEFy
cmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgCiAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0KG1fY3VycmVudE5vZGUp
OwogICAgICAgICByZXR1cm47CkBAIC03MjcsMjIgKzY5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAg
ICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5mbzsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6
OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
IGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigp
KTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVU
b0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2Rl
KiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
Tm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlw
ZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAg
IHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBl
KSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJl
c3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAg
ICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlz
U2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0Lmxv
YWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzOSwxMiArMjYwNSwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVs
dDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlw
ZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxl
bWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBp
ZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFs
dWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnBy
KCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3Vu
ZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJy
YXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5
cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7
CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3Nyw4
ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5h
c051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVk
KHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAg
ICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2NjEsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJl
Zyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0Ns
YW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkg
PT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwg
c2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3Jh
dGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVy
VXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChp
c0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlw
ZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9w
KHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBA
IC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAg
ICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1f
aml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6
OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihm
cHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0
OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAg
ICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5t
X2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAg
c3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsK
ICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3LDEwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVf
dCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNT
RVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhP
ZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0Ogog
ICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7
CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVn
KTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9w
ZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcg
cHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJU
KGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5NywxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNl
VXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2Rl
LCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAg
ICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5t
X2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAg
ICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7Cisg
ICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1l
bnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUo
dmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDksNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2Uo
dGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2Ny
aXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRP
ZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9z
dG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0MTI2LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFy
cmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE5MSwx
NiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAg
ICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlw
ZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1
bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwot
ICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0
aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY0
LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBl
bGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJy
YXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBH
UFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsK
KyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJh
eVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsK
KyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25F
eHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAg
LTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2Up
OwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJl
ZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJl
ZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJy
YXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51
bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlU
b2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9Owog
CitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZl
ckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXAp
CisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50
RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisg
ICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZpbmUgR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOwor
CisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYWRkaXRpb25hbCBy
ZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJlbmNlcyBmcm9tIHRoZSBo
ZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhlIG9iamVjdCBrbm93cyBp
dHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28KKy8vIGhhdmUgdGhlIGlu
dmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJhY2sgaW50byB0aGUgR0MK
Ky8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291
bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7CitwdWJsaWM6CisgICAgR0NJ
bmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBvaW50ZXIoMCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgpCisgICAgeworICAgICAg
ICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2Vs
bHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2Vz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpOworICAgIH0K
KyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6ZV90IGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkpOworICAgICAgICBpZiAo
aGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICAg
ICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2ZWN0b3JP
ZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gSXQncyBnZW5lcmFsbHkg
bm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2luY2UgaWYgdGhpcworICAg
IC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0aGlzIG9iamVjdCB0byB0
aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6OmFkZFJl
ZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwq
KTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgd2Ugd2lz
aCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwgYW5kIGZhbHNlIGlmIHdl
IGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAvLyBhbmQgaWYgaXQgZG9l
cyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBkb24ndCB3YW50CisgICAg
Ly8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0IGNhbiByZXR1cm4gZmFs
c2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUgR0MncyBsaXN0LgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAgICBib29sIGZpbHRlcklu
Y29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1cm4gMTsgfQorICAgIAor
ICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJuICEobV9lbmNvZGVkUG9p
bnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0FueUluY29taW5nKCkgY29u
c3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9vbCBoYXNTaW5nbGV0b24o
KSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNWZWN0b3JPZkNlbGxzKCk7
IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2Vs
bCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PFZlY3RvcjxKU0NlbGwqPio+KG1fZW5jb2RlZFBvaW50ZXIpOworICAgIH0KKyAgICAKKyAgICAv
LyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwqLgorICAgIC8vIFNpbmds
ZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIGNlbGxz
LgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9v
bCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKiBj
ZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBtX2VuY29kZWRQ
b2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0b25GbGFnKCk7
CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVChoYXNT
aW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNlbGwp
KTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpTQ2Vs
bCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+YXBw
ZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAgICAg
IG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOworICAg
ICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
aWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0ZXJJ
bmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikKK3sK
KyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aGlzLT5pc0Rl
ZmVycmVkKCkpOworICAgICAgICBBU1NFUlQodGhpcy0+cmVmQ291bnQoKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVk
KCkpOworICAgICAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZp
bHRlckZ1bmN0aW9uKHNpbmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIAorICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJU
KCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnNldElzRGVmZXJyZWQo
ZmFsc2UpOworICAgIH0KKyAgICAgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0
b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2
ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2
ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAg
ICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAKKyAgICBp
ZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7Cisg
ICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIHJldHVybiB0aGlzLT5z
ZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24g
PSB2ZWN0b3JPZkNlbGxzKCktPmF0KDApOworICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7Cisg
ICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNpbmdsZXRvbikg
fCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorI2RlZmlu
ZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291
bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVCA9IHNvbWUgc3VidHlwZSBvZiBHQ0lu
Y29taW5nUmVmQ291bnRlZCwgbXVzdCBzdXBwb3J0IGEgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkK
Ky8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291
bnRlZFNldCB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICB+
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3IHRvIHRoaXMgc2V0LgorICAgIGJvb2wgYWRkUmVmZXJl
bmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9OworICAgIAorcHJpdmF0ZToKKyAg
ICBzdGF0aWMgYm9vbCByZW1vdmVBbGwoSlNDZWxsKik7CisgICAgc3RhdGljIGJvb2wgcmVtb3Zl
RGVhZChKU0NlbGwqKTsKKyAgICAKKyAgICBWZWN0b3I8VCo+IG1fdmVjdG9yOworICAgIHNpemVf
dCBtX2J5dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29t
aW5nUmVmQ291bnRlZFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
c19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZN
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0
ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNv
bWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jv
b2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGws
IFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2Vs
bCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3ZlY3Rvci5hcHBlbmQob2JqZWN0KTsK
KyAgICBtX2J5dGVzICs9IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zl
Y3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAg
ICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAg
ICAgICBpZiAoIW9iamVjdC0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92ZURlYWQpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYnl0ZXMgLT0gc2l6ZTsKKyAgICAgICAg
bV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9yLmxhc3QoKTsKKyAgICAgICAgbV92ZWN0b3IucmVtb3Zl
TGFzdCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZUFsbChKU0NlbGwqKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBIZWFwOjppc01h
cmtlZChjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29t
aW5nUmVmQ291bnRlZFNldElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29weVZp
c2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKICNpbmNsdWRlICJHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGlu
ZXMuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgpAQCAtMzU4LDYgKzM1OSwx
NCBAQCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQCiAgICAgbV9kZmdD
b2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQgSGVhcDo6YWRkUmVmZXJl
bmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAobV9hcnJh
eUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAgICAgICAgY29sbGVjdElm
TmVjZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShidWZmZXItPmdjU2l6ZUVz
dGltYXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9i
amVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7CiAgICAgUHJvdGVjdENv
dW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5lbmQoKTsKQEAgLTYyMSwx
NCArNjMwLDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6OmV4dHJhU2l6ZSgpCit7
CisgICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlCdWZmZXJzLnNpemUoKTsK
K30KKwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNp
emUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1vcnlVc2FnZTsKKyAgICBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBleHRy
YVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsKLSAgICByZXR1cm4gbV9v
YmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHkoKTsKKyAgICBy
ZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2FwYWNpdHko
KSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVjdGVkR2xvYmFsT2JqZWN0
Q291bnQoKQpAQCAtNzQ1LDYgKzc1OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7Cisg
ICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAg
ICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxv
Y2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpA
QCAtOTI0LDEyICs5NDMsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkK
ICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgo
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAg
ICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgp
OwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRl
ZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNs
dWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQu
aCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNz
UmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0
cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAg
ICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVy
biBtX2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3Bp
ZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEZWZlckdDRm9yQVdoaWxlOwogICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lOwogICAgICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmll
bmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAK
ICAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVj
cmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVw
dGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsK
QEAgLTI0NSw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0
b3IgbV9ibG9ja0FsbG9jYXRvcjsKICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsK
ICAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90
IG1fZXh0cmFNZW1vcnlVc2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIEpT
QyAgewogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFi
bGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNv
bnN0cnVjdG9yVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQ
cm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52
bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBj
b25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0
dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRhVmlld1RhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
KiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25z
dCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxlOyB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1
b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGlu
Z1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0
IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICAgICAg
SnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxl
bWVudFNpemUpOworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAg
ICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFp
bnMgaW5kZWNpbmcgdHlwZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5
ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKQEAgLTUwMyw4ICs1MDMsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJp
Y0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAg
SnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5
cGVkQXJyYXlSb3VuZGluZyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3Qg
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRB
cnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlC
ZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU0OSwzNSArMTU0OSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+
dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJy
YXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBl
ID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYg
KGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNl
IAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CkBAIC0xNjE4LDM1ICsxNTk2LDEyIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
SW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigp
LCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZB
cnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXksIFRy
dW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3Vu
ZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBl
ZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRV
aW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJh
eURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAg
IENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZv
ckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAg
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCB0eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsx
NjIzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50
KHR5cGUpKTsKKyAgICAKICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlw
ZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAg
Ly8gY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwg
YmFzZSwgYW5kIHByb3BlcnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAg
ICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0
b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBU
cnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJy
YXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVk
KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBU
aW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0g
ICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChp
c1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwg
cHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0
UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCCiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxl
bWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAg
IGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5j
aDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsK
ICAgICAgICAgCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZw
UmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheUdldEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNp
emVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5
VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAK
ICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNj
cmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3Ro
T2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFn
ZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0
ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewog
ICAgIGNhc2UgNDoKICAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwg
VGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVn
VDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNp
Z25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlw
ZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CkBAIC0xODA4LDggKzE3NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRj
aCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRv
ci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkp
OworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFy
bHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihj
bGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIs
MTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAg
IC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwg
ZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUg
dW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9y
YWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAg
ICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVu
dFNpemUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVz
cyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNT
aWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9v
QmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4
ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgz
Niw3ICsxNzk3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0Qgog
ICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2Ug
MToKICAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBw
cm9wZXJ0eSwgVGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAg
QEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIHJldHVybiBz
bG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVt
ZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
VHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAg
CiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAg
CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBl
YXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWws
IEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gp
OwpAQCAtMTg5OCw5ICsxODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVk
QXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2Ug
YXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVj
dHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVT
Y3JhdGNoKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgY29udmVydERvdWJsZVRv
RmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFz
ZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJBcnJheUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50
cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3
cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3Vs
dCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKIApAQCAtNDIs
MTMgKzQxLDkgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFi
bGUgPSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7
IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0g
ICAgICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9CisgICAgYm9v
bCBpc05ldXRlcmFibGUgPSAhbV9waW5Db3VudDsKIAotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRl
cmFibGUpCisgICAgaWYgKGlzTmV1dGVyYWJsZSkKICAgICAgICAgbV9jb250ZW50cy50cmFuc2Zl
cihyZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQp
OwpAQCAtNTYsMzYgKzUxLDEzIEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVm
ZmVyQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9m
aXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZp
ZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0Fy
ZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJy
ZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCk7IGktLTspIHsK
KyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlC
dWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7CisgICAgICAgIGlmICh2aWV3KQor
ICAgICAgICAgICAgdmlldy0+bmV1dGVyKCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEFycmF5QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAg
ICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAg
dmlldy0+bV9uZXh0VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAg
ICAgICAgbV9maXJzdFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0g
dmlldzsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcq
IHZpZXcpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2
aWV3LT5tX25leHRWaWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0g
dmlldy0+bV9wcmV2VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmll
dy0+bV9wcmV2Vmlldy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1f
Zmlyc3RWaWV3ID09IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0Vmll
dzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Cit9IC8v
IG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAK
ICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTUgKzI2LDE3IEBA
CiAjaWZuZGVmIEFycmF5QnVmZmVyX2gKICNkZWZpbmUgQXJyYXlCdWZmZXJfaAogCi0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2lu
Y2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyOwog
Y2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJy
YXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJD
b250ZW50cyk7CkBAIC00NSw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGlubGlu
ZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisgICAgCiAgICAgdm9pZCogZGF0YSgpIHsgcmV0
dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXpl
SW5CeXRlczsgfQogCkBAIC04NiwxMiArODgsMTMgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0
aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJy
YXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRC
eXRlU2l6ZSk7CkBAIC05OSwxNCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCog
ZGF0YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5l
IHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgc2l6ZV90IGdj
U2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0OwogCiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7CisgICAgCisgICAg
aW5saW5lIHZvaWQgcGluKCk7CisgICAgaW5saW5lIHZvaWQgdW5waW4oKTsKIAotICAgIHZvaWQg
YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZm
ZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1
ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVk
Vmlld3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVy
Q29udGVudHMmKTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5t
X2RhdGE7IH0KIAogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQpAQCAtMTE5LDggKzEyNCwxMSBAQCBw
cml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7
CiAgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCBy
aWdodCk7CiAKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OwogICAgIEFycmF5QnVmZmVyQ29udGVu
dHMgbV9jb250ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OworCitwdWJs
aWM6CisgICAgV2VhazxKU0FycmF5QnVmZmVyPiBtX3dyYXBwZXI7CiB9OwogCiBpbnQgQXJyYXlC
dWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCkBAIC0xNTksNiAr
MTY3LDEyIEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiB9CiAKK1Bhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRh
dGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250
ZW50cyhjb25zdF9jYXN0PHZvaWQqPihkYXRhKSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNy
ZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVy
OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVt
ZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyAr
MTg4LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBB
cnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi0g
ICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9waW5Db3VudCgwKQogewogICAgIGNvbnRlbnRz
LnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAtMTk0LDYgKzIwOCwxMSBAQCB1bnNpZ25lZCBB
cnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVudHMubV9z
aXplSW5CeXRlczsKIH0KIAorc2l6ZV90IEFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBzaXplb2YoQXJyYXlCdWZmZXIpICsgc3RhdGljX2Nh
c3Q8c2l6ZV90PihieXRlTGVuZ3RoKCkpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBB
cnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAogewogICAgIHJldHVy
biBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7CkBAIC0yMTgs
MTUgKzIzNywyMyBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAg
ICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lk
IEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBBcnJh
eUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGlj
eSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKLSAgICAvLyBEbyBub3Qg
YWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBX
aHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJn
dW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBz
byB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkg
cmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICAvLyBEbyBub3QgYWxsb3cgMzEtYml0IG92ZXJm
bG93IG9mIHRoZSB0b3RhbCBzaXplLgogICAgIGlmIChudW1FbGVtZW50cykgewogICAgICAgICB1
bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAg
ICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAg
ICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplCisgICAg
ICAgICAgICB8fCB0b3RhbFNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgICAgICByZXN1bHQubV9kYXRhID0g
MDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0LDYgKzI4MSw2IEBAIEFy
cmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiB1c2luZyBKU0M6OkFycmF5QnVmZmVyOwotdXNpbmcgSlNDOjpBcnJheUJ1ZmZlckNvbnRl
bnRzOwogCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDI4ICszMCwzNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZz
ZXQpCi0gICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICwgbV9idWZmZXIoYnVmZmVyKQot
ICAgICwgbV9wcmV2VmlldygwKQotICAgICwgbV9uZXh0VmlldygwKQorQXJyYXlCdWZmZXJWaWV3
OjpBcnJheUJ1ZmZlclZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZz
ZXQpCisgICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKKyAgICAgICAgLCBtX2J1ZmZlcihi
dWZmZXIpCiB7CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNo
YXIqPihtX2J1ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAwOwotICAgIGlmIChtX2J1
ZmZlcikgCi0gICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwogfQogCiBBcnJheUJ1ZmZl
clZpZXc6On5BcnJheUJ1ZmZlclZpZXcoKQogewotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAg
bV9idWZmZXItPnJlbW92ZVZpZXcodGhpcyk7CisgICAgaWYgKCFtX2lzTmV1dGVyYWJsZSkKKyAg
ICAgICAgbV9idWZmZXItPnVucGluKCk7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQogewot
ICAgIG1fYnVmZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOworICAgIGlmIChmbGFnID09
IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05ldXRlcmFi
bGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAgZWxzZQor
ICAgICAgICBtX2J1ZmZlci0+cGluKCk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEFycmF5
QnVmZmVyVmlld19oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCisjaW5jbHVkZSAiVHlw
ZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bGltaXRzLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM2LDYxICszNiw1NSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAorY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0dsb2JhbE9i
amVjdDsKK2NsYXNzIEV4ZWNTdGF0ZTsKKwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGlj
IFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlw
ZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVV
aW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAg
ICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQz
MiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0g
ICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOworICBwdWJsaWM6CisgICAg
dmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwogCisgICAgYm9vbCBp
c05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9idWZmZXIgfHwgbV9i
dWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyOwogICAgIH0KIAog
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJl
c3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0CiAgICAgeworICAg
ICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJl
dHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVu
Z3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykgeyBt
X2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldE5l
dXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5nZUltcGwoY29uc3QgY2hh
ciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQot
ICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0ZU9mZnNldCwgc2l6ZV90
IHJhbmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlT2Zm
c2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNp
Z25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8vIEhlbHBlciB0byB2ZXJp
ZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBpcwogICAgIC8vIHdp
dGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgYm9vbCB2
ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRpYyBib29sIHZlcmlmeVN1
YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAgICAgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0ZU9mZnNldCAlIHNpemVv
ZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMSwxMSArOTUsMjggQEAgcHJv
dGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKKyAgICAKKyAgcHJvdGVjdGVkOgorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZl
clZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29sIHNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBh
cnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwogCiAgICAgLy8gSW5wdXQgb2Zmc2V0IGlz
IGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwogICAgIC8vIG91
dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVm
ZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBj
bGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNpZ25lZCAqbnVt
RWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51bUVsZW1lbnRzKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFYIC0gYXJyYXlCeXRlT2Zm
c2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBtYXhPZmZzZXQpIHsKQEAg
LTExOSwxOSArMTMwLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3Rk
OjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRoaXMgaXMg
dGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBv
ZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVuc2lnbmVkIG1fYnl0ZU9m
ZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwogCi1wcml2YXRlOgorICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9wcmV2VmlldzsKLSAgICBB
cnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFycmF5QnVmZmVyVmlldzo6
c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBieXRlT2Zmc2V0KQpAQCAt
MTc2LDcgKzE4Myw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJvUmFuZ2VJbXBsKHVuc2kK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9m
ZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5z
aWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3Ojpj
YWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJh
eVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAgaWYgKHN0YXJ0IDwgMCkK
ICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGFzaEVudHJ5OworY2xhc3MgSlNBcnJheUJ1
ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxlOwogCiBzdHJ1Y3QgTWV0aG9kVGFibGUgewpAQCAt
OTYsNiArOTcsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgYm9vbCAo
KkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgR2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOworICAgIAor
ICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5kV2FzdGVNZW1vcnkpKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSBzbG93RG93bkFuZFdhc3RlTWVtb3J5
OworICAgIAorICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ICgqR2V0VHlw
ZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0VHlwZWRBcnJheUltcGwg
Z2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9NRU1CRVJfQ0hFQ0tFUiht
ZW1iZXIpIFwKQEAgLTEzOSw2ICsxNDYsOCBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAg
ICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRl
ZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5LCBc
CisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwKICAgICB9LCBcCiAgICAg
Q2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAvLyB3YXlzIHdpdGhvdXQgcmVwZWF0
aW5nIHRoZSBsaXN0LgogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVS
VFlfTkFNRShtYWNybykgXAogICAgIG1hY3JvKEFycmF5KSBcCisgICAgbWFjcm8oQXJyYXlCdWZm
ZXIpIFwKICAgICBtYWNybyhCb29sZWFuKSBcCiAgICAgbWFjcm8oRGF0ZSkgXAogICAgIG1hY3Jv
KEVycm9yKSBcCkBAIC01NSw2ICs1Niw5IEBACiAgICAgbWFjcm8oYXBwbHkpIFwKICAgICBtYWNy
byhhcmd1bWVudHMpIFwKICAgICBtYWNybyhiaW5kKSBcCisgICAgbWFjcm8oYnVmZmVyKSBcCisg
ICAgbWFjcm8oYnl0ZUxlbmd0aCkgXAorICAgIG1hY3JvKGJ5dGVPZmZzZXQpIFwKICAgICBtYWNy
byhieXRlY29kZSkgXAogICAgIG1hY3JvKGJ5dGVjb2RlSW5kZXgpIFwKICAgICBtYWNybyhieXRl
Y29kZXMpIFwKQEAgLTExMiw2ICsxMTYsNyBAQAogICAgIG1hY3JvKHByb3BlcnR5SXNFbnVtZXJh
YmxlKSBcCiAgICAgbWFjcm8ocHJvdG90eXBlKSBcCiAgICAgbWFjcm8oc2V0KSBcCisgICAgbWFj
cm8oc2xpY2UpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNybyhzb3VyY2VDb2RlKSBc
CiAgICAgbWFjcm8oc3RhY2spIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuY3BwOjE1Mzc3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgordW5pb24gVmFsdWUgeworICAgIFQgZGF0YTsKKyAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07
Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxEYXRhVmlldz4g
RGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3Qp
KTsKKyAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YVZpZXc+IERh
dGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIGlmIChieXRlT2Zmc2V0ID4g
YnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOworICAgIENo
ZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgp
OworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hl
Y2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7CisgICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZs
b3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZm
ZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworRGF0YVZpZXc6OkRhdGFWaWV3KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQp
CisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKworc3RhdGljIGJvb2wgbmVl
ZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQVShCSUdfRU5ESUFOKQor
ICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVybiAhbGl0dGxlRW5kaWFu
OworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQor
eworICAgIGNoYXIgdGVtcCA9ICpwOworICAgICpwID0gKnE7CisgICAgKnEgPSB0ZW1wOworfQor
CitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0
ZXMocCwgcCArIDEpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciog
cCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDMpOworICAgIHN3YXBCeXRlcyhwICsgMSwgcCAr
IDIpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKK3sKKyAg
ICBzd2FwQnl0ZXMocCwgcCArIDcpOworICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOworICAg
IHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOworICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwor
fQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNp
emUsIGJvb2wgbGl0dGxlRW5kaWFuKQoreworICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRs
ZUVuZGlhbikpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoc2l6ZSkgeworICAgIGNh
c2UgMToKKyAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAyOgorICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIDQ6CisgICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Qg
RGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRl
T2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVj
dGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhh
dCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KKyAgICBWYWx1ZTxUPiB2YWx1ZTsKKyAg
ICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRy
ZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7CisgICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFs
dWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICByZXR1cm4gdmFsdWUuZGF0
YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5z
aWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
V2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQg
Y2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5h
bGlnbmVkIHN0b3Jlcy4KKyAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7CisgICAgdGVtcFZhbHVlLmRh
dGEgPSB2YWx1ZTsKKyAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVv
ZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFz
ZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOworfQor
CitpbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOworfQorCit1aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90Pihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCitpbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFu
LCBlYyk7Cit9CisKK3VpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwor
aW50MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVybiBnZXREYXRhPGludDMy
X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1aW50MzJfdCBEYXRhVmll
dzo6Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2Zsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICByZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBl
Yyk7Cit9CisKK2RvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdl
dERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBE
YXRhVmlldzo6c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1
aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmll
dzo6c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVP
ZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0
VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpzZXRJ
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0
LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0YVZpZXc6OnNldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0RmxvYXQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQoreworICAgIEFy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7CisgICAgbV9ieXRlTGVuZ3RoID0gMDsKK30KKworfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsMzkgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RGF0YVZpZXcuaCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0Rh
dGFWaWV3LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAotbmFtZXNwYWNlIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7Ci0gICAgY2hh
ciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5n
dGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAg
ICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE9mZnNldChi
eXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tl
ZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwotICAgIGlmIChj
aGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdldCgpID4gYnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7Ci19CituYW1l
c3BhY2UgSlNDIHsKIAogRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKICAgICA6
IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02NiwxNzkgKzM3LDE4IEBA
IERhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUKIHsKIH0KIAotc3RhdGlj
IGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdf
RU5ESUFOKQotICAgIHJldHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0
dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBj
aGFyKiBxKQotewotICAgIGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0
ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAg
ICBzd2FwQnl0ZXMocCwgcCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJp
dHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhw
ICsgMSwgcCArIDIpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciog
cCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCAr
IDYpOwotICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywg
cCArIDQpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwg
c2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5
dGVzKGxpdHRsZUVuZGlhbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkg
ewotICAgIGNhc2UgMToKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSAyOgotICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRz
KHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLVQgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5n
ZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBk
YXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVj
dHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2
YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPiht
X2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZO
ZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4g
dmFsdWUuZGF0YTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNl
dERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkg
ewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2Ug
aXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1
cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVt
cFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0
ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hh
cio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2Yo
VCkpOwotfQotCi1pbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOwotfQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1
aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3Ojpn
ZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFz
c1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgp
CiB7Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJu
IGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVp
bnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQz
Ml90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6
OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhf
dCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQot
Ci12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8
aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lk
IERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVp
bnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQg
RGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMy
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRh
Vmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7CiB9CiAKLXZvaWQg
RGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitKU0FycmF5QnVmZmVyVmlldyog
RGF0YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7CisgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICAgICAgZXhlYywg
Z2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVEYXRhVmlldyksIGJ1ZmZlcigp
LCBieXRlT2Zmc2V0KCksCisgICAgICAgIGJ5dGVMZW5ndGgoKSk7CiB9CiAKLXZvaWQgRGF0YVZp
ZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5
dGVMZW5ndGggPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMTUzNzc0KQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oOjE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFWaWV3X2gKKyNkZWZpbmUgRGF0YVZpZXdfaAor
CisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwor
CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5n
dGg7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBz
bGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgaW50OF90IGdldEludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHVpbnQ4X3QgZ2V0VWlu
dDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludDE2X3QgZ2V0
SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdl
dEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQxNl90IGdldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIHVp
bnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7IH0KKyAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDMyX3QgZ2V0VWludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGZs
b2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIGZsb2F0IGdl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OyB9CisgICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFVp
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OyB9CisgICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNl
dFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAorICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Cisg
ICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZs
b2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAgICB2b2lkIHNldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOworCitwcml2YXRlOgorICAgIERhdGFWaWV3KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIGJvb2wgYmV5
b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+
PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldERhdGEodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB1
bnNpZ25lZCBtX2J5dGVMZW5ndGg7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc2ICsyNiw2NyBAQAogI2lmbmRlZiBEYXRhVmll
d19oCiAjZGVmaW5lIERhdGFWaWV3X2gKIAotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJW
aWV3Lmg+CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBC
eXRlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIERh
dGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZh
bHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50
MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90
IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0
ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUg
Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZs
b2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVp
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMy
KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3Vi
bGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFs
dWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNl
dCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0g
ICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0
ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ieXRlTGVuZ3RoOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKICAgICB9CiAKLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOwotCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCopOworICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5s
aW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4g
Ynl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1f
Ynl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLQorICAgIFQgZ2V0KHVuc2lnbmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJv
b2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAg
ICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAg
ICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAqc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2Yo
VCkgPD0gYnl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5k
aWFuKAorICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtX2Jhc2VBZGRyZXNzKSArIG9mZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4p
OworICAgIH0KKyAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0
YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVz
KSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNl
dCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2Fz
dDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9Cisg
ICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsK
KyAgICB9CiAKK3ByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogfTsKIAotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERh
dGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQz
MkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw4MSArMjYsOSBAQAogI2lmbmRlZiBGbG9h
dDMyQXJyYXlfaAogI2RlZmluZSBGbG9hdDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJh
eUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgRmxvYXQzMkFycmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gY3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJh
eSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGly
ZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKGluZGV4ID49IFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQ
dHI8RmxvYXQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQ
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25z
dDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gVHlwZUZsb2F0MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9h
dDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVy
Y2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBh
c3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJB
cnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJh
eTo6Y3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3Jl
YXRlPEZsb2F0MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVh
dGVVbmluaXRpYWxpemVkPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5
OjpGbG9hdDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJy
YXk+IEZsb2F0MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlND
OjpGbG9hdDMyQXJyYXk7CiAKICNlbmRpZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTEsOTggKzEwLDI1IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAogI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAogI2RlZmlu
ZSBGbG9hdDY0QXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQ2NEFy
cmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4gewotcHVibGljOgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShjb25z
dCBkb3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5
IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVk
LiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2Ny
aXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICB1c2luZyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNp
Z25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5
cGVkQXJyYXlCYXNlPGRvdWJsZT46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZs
b2F0NjRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlw
ZUZsb2F0NjQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDY0QXJyYXkoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT47Ci19OwotCi1QYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5
PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5Ojpj
cmVhdGUoY29uc3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihhcnJheSwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVh
dGU8RmxvYXQ2NEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVh
dGVVbmluaXRpYWxpemVkPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQ2NEFycmF5
OjpGbG9hdDY0QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxkb3VibGU+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0NjRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpT
Qzo6RmxvYXQ2NEFycmF5OwogCiAjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNp
bmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVy
aWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgor
ICAgIEdlbmVyaWNUeXBlZEFycmF5VmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3Jl
YXRlKGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUqIGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisg
ICAgeworICAgICAgICByZXR1cm4gc2V0SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRSYW5nZShjb25z
dCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5zaWdu
ZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAgZGF0
YUxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIG9m
ZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgemVyb1JhbmdlKHVuc2lnbmVkIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB6ZXJvUmFuZ2VJbXBsKG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSwgbGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB6ZXJvRmlsbCgpIHsgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsg
fQorICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xl
bmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKKyAgICB9CisKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpbmRleCA8IHRoaXMtPmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGEo
KVtpbmRleF07CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihpbmRleCA8IHRoaXMtPmxlbmd0aCgpKTsKKyAgICAgICAgZGF0YSgpW2luZGV4XSA9
IEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGVja0lu
Ym91bmREYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgcG9zKSBjb25zdAorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiAo
b2Zmc2V0IDw9IGxlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zIDw9IGxlbmd0aAor
ICAgICAgICAgICAgLy8gY2hlY2sgb3ZlcmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBv
cyA+PSBvZmZzZXQpOworICAgIH0KKyAgICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFy
cmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEdlbmVy
aWNUeXBlZEFycmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKKyAg
ICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV9sZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
R2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogQXJyYXlCdWZm
ZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAw
LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJl
c3VsdCA9IGNyZWF0ZShsZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXks
IGxlbmd0aCAqIHNpemVvZihBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUo
CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJyYXlC
dWZmZXI6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YoQWRhcHRvcjo6VHlwZSkp
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRl
KGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJldHVy
biBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNv
bnN0Cit7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIHRoaXMtPmxlbmd0aCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsK
KyAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlcigpLCBi
eXRlT2Zmc2V0KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVy
KCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pT
QXJyYXlCdWZmZXJWaWV3KiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OndyYXAoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBBZGFwdG9yOjpKU1ZpZXdUeXBlOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCks
IGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShBZGFwdG9yOjp0eXBlVmFsdWUpLCB0
aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNz
IEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVjdHVy
ZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0aCgp
IHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1YmxpY0xl
bmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhXb3Jk
OyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50eXBl
ZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIqIGJ1
ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3RhdGlj
IEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkpIC0g
MTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90IHB1
YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRoZSBh
cnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcgdGhl
IHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAgdWlu
dDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5
IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRoaXMs
IGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAgc3Ry
dWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBidWZmZXI7CisgICAgICAgIH0gdHlwZWRB
cnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc3ICsyNiw5IEBACiAjaWZuZGVmIElu
dDhBcnJheV9oCiAjZGVmaW5lIEludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQot
Y2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PiB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJh
eT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8g
U2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2ls
bCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5
IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAgICB1c2luZyBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVm
UHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50OEFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1QYXNzUmVmUHRy
PEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29uc3QgaW50OF90
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxp
bnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDhBcnJheT4obGVuZ3RoKTsK
LX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0K
LVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBj
b25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50OEFycmF5PihzdGFydCwgZW5kKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNp
bmcgSlNDOjpJbnQ4QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTM5NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBA
IC0yNiw3NyArMjYsOSBAQAogI2lmbmRlZiBJbnQxNkFycmF5X2gKICNkZWZpbmUgSW50MTZBcnJh
eV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50MTZBcnJheSA6IHB1YmxpYyBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQxNl90
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBl
ZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJh
c2U8aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJh
eT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmll
d1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDE2Owot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8v
IE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFz
cyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4g
SW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQxNl90KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90
Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPElu
dDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
VHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDE2QXJyYXk+KGxlbmd0
aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQot
ewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0K
LQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQxNkFycmF5Pihz
dGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJh
eXMuaCIKIAogdXNpbmcgSlNDOjpJbnQxNkFycmF5OwogCiAjZW5kaWYgLy8gSW50MTZBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgpAQCAtMjcsNzQgKzI2LDkgQEAKICNpZm5kZWYgSW50MzJBcnJheV9oCiAjZGVm
aW5lIEludDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0
aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhl
c2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4K
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50Pjo6
c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotCi0gICAg
aW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsK
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
bGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0
byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ+OwotfTsK
LQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVh
dGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IElu
dDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDMyQXJyYXk+
KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
OiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwot
fQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDMyQXJyYXk+
KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgogCiB1c2luZyBKU0M6OkludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBJbnQzMkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKworSlNB
cnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBKU0Fy
cmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9CisK
K0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNB
cnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVj
dHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVj
dC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRlTGVu
Z3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTQXJy
YXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0
cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkgYnVm
ZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
Ym9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpT
QXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7
CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAg
ICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAK
KyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
YXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZm
ZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZlciog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAor
ICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworcHJpdmF0ZToKKyAgICBBcnJheUJ1
ZmZlciogbV9pbXBsOworfTsKKworaW5saW5lIEFycmF5QnVmZmVyKiB0b0FycmF5QnVmZmVyKEpT
VmFsdWUgdmFsdWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogd3JhcHBlciA9IGpzRHluYW1pY0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT5pbXBsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBw
cm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisK
K0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVh
dGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3Rv
dHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjb25zdHJ1Y3RvciA9Cisg
ICAgICAgIGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7
CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBjb25z
dHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCAxKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgY29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBidWZmZXIpOworICAgIAor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworQ29uc3RydWN0VHlwZSBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoCisgICAgSlNDZWxsKiwg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBDb25zdHJ1Y3RU
eXBlSG9zdDsKK30KKworQ2FsbFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDYWxs
RGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZl
LmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAgcmV0dXJuIENhbGxUeXBlSG9z
dDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisKKyNpbmNs
dWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlOworCitjbGFzcyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IgOiBw
dWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1
bmN0aW9uIEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
SlNBcnJheUJ1ZmZlclByb3RvdHlwZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1
Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxE
YXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVj
LT5jYWxsZWUoKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzRHlu
YW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRo
aXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJSZWNlaXZlciBvZiBzbGljZSBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlci4iKSk7
CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJTbGljZSByZXF1aXJlcyBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMyX3QgYmVnaW4gPSBleGVj
LT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAK
KyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsK
KyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhpc09iamVj
dC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBu
ZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5pbXBsKCktPnNsaWNlKGJlZ2luLCBlbmQpOworICAgIGlm
ICghbmV3QnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IoY2FsbGVlLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1
Y3R1cmUoKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBuZXdCdWZmZXIpOworICAgIAorICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUpCit9OworCitKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVmZmVyUHJv
dG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+c2xpY2Us
IGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKK30KKworSlNBcnJheUJ1
ZmZlclByb3RvdHlwZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKAorICAgIEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0FycmF5QnVmZmVyUHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0FycmF5QnVmZmVyUHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJl
KiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAor
I2RlZmluZSBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyUHJvdG90eXBlIDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYs
IFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyUHJvdG90eXBl
KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAK
KyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1
ZmZlclByb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3
LmgiCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIs
ICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZp
ZXcpCit9OworCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3Ry
dWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJf
dCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBt
b2RlKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAs
IG1fYnV0dGVyZmx5KDApCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7Cisg
ICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAg
ICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAg
IGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAg
ICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3Zl
Y3Rvcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2
NF90KTsgaS0tOykKKyAgICAgICAgICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQor
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFu
IDJHQi4KKyAgICBpZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8g
ZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJv
RmlsbCkgeworICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSku
Z2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUo
bV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFw
LnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVt
ZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2Rl
ID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCisgICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXIt
PmRhdGEoKSkgKyBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9t
b2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hl
YWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQo
KSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1
ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1
ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFz
ZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1f
dmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgp
KQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZm
ZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2
bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2Uo
dGhpcywgYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90
LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAg
ICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAg
ICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZl
cigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9i
amVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhp
c09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMo
CisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNP
YmplY3QtPmJ1ZmZlcigpKSwKKyAgICAgICAgICAgIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNl
bGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAg
ICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAor
ICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikg
eworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcg
dG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVm
aW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAg
fHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSBy
ZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6
OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQ
cm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGgg
YXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlC
dWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZp
ZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBB
U1NFUlQodGhpc09iamVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2Jq
ZWN0LT5tX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+
bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVj
dC0+bV92ZWN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNk
ZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisv
LyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0
aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAy
KSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmll
dyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNz
IGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4g
Zm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMg
YXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZwor
Ly8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRh
IGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlv
bi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0
aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRo
YXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50
IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJh
eUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJsZSwgZGVzcGl0ZSBoYXZpbmcgYSAiY29uc3Ry
dWN0b3IiIGFuZCBhCisvLyBwcm90b3R5cGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUg
ZGlmZmVyZW50IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hl
dGhlciB0aGUgdXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUg
YmFja2luZworLy8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmls
aXRpZXMuCitlbnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBl
ZCBhcnJheS4gQiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2Nh
dGVkIGluIGNvcGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNz
IGlzCisgICAgLy8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgor
ICAgIEZhc3RUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhh
dCBzdGlsbCBhdHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIg
aXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAg
Ly8gYnVmZmVyIHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBm
YXN0Q2FsbG9jKCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZl
bmVzcyBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVz
cywgYW5kIHRoZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92
ZXJzaXplVHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVz
ZWQgaW4gc29tZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFj
a2VkIHRvIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRo
ZQorICAgIC8vIG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2
aWV3LiBWIHBvaW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25v
d3Mtd2hhdCwgYW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9l
cyBub3Qgb3duIHRoZSB2ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8g
V2hlbiBXZWJDb3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBh
YmxlIHRvIGdldCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlclZpZXcgYW5kIGxpdHRsZSBlbHNl
LiBUaGlzIHJlcXVpcmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQg
dGhlbiBhY2Nlc3NpbmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBK
U0FycmF5QnVmZmVyVmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBp
biB0aGUgTWV0aG9kVGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2Yg
dGhvc2UgaGFzIG5vIG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNp
bmsKKy8vIGNvZGUgaW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVu
aWVudC4KKworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOworICAgIAorICAg
IHN0YXRpYyBzaXplX3Qgc2l6ZU9mKHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNp
emUpCisgICAgeworICAgICAgICByZXR1cm4gKGxlbmd0aCAqIGVsZW1lbnRTaXplICsgc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSAtIDEpCisgICAgICAgICAgICAmIH4oc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAtIDEpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIGNsYXNzIENvbnN0cnVjdGlvbkNv
bnRleHQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0
KTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBlbnVtIEluaXRpYWxpemF0aW9uTW9k
ZSB7IFplcm9GaWxsLCBEb250SW5pdGlhbGl6ZSB9OworICAgICAgICAKKyAgICAgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3Qg
ZWxlbWVudFNpemUsIEluaXRpYWxpemF0aW9uTW9kZSA9IFplcm9GaWxsKTsKKyAgICAgICAgCisg
ICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAgICAgICAgICBWTSYsIFN0cnVjdHVyZSos
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fc3RydWN0dXJlOyB9CisgICAgICAgIAorICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgICAgIHZv
aWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgICAgIHVpbnQzMl90
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgICAgIFR5cGVkQXJyYXlN
b2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseTsgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgICAgICB2b2lkKiBt
X3ZlY3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgICAgIFR5cGVkQXJyYXlN
b2RlIG1fbW9kZTsKKyAgICAgICAgQnV0dGVyZmx5KiBtX2J1dHRlcmZseTsKKyAgICB9OworICAg
IAorICAgIEpTQXJyYXlCdWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAg
c3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFsbG9j
YXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLCBuYXRpdmUgdmlldywgYW5kIEpTIGJ1ZmZl
cjsgYWxzbworICAgIC8vIG1vdmVzIHRoZSBkYXRhIGludG8gdGhlIEMgaGVhcCBpZiBuZWNlc3Nh
cnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAK
KyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAg
QXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBp
bXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJl
dHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgc3RhdGljIEpTX0VY
UE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZm
ZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0aCk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisg
ICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJh
eU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Fy
cmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19o
CisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnlJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJy
YXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnkodGhpcyk7
Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcigpCit7
CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0dXJuIGJ1
dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKCkKK3sK
KyAgICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7Cit9CisK
K2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIG1fbGVuZ3Ro
ID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0
KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAgICAgICBB
U1NFUlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVk
QXJyYXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IGRl
bHRhID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1
bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZp
c2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgpAQCAtMjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQ2Vs
bDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJh
eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldy
aXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9UeXBlVHJhaXRzLmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBDb3B5VmlzaXRvcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3
OwogY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTEzNCw3ICsxMzUsNyBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJl
LnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZWRBcnJheU5vbmU7Cisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IE5v
dFR5cGVkQXJyYXk7CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CkBAIC0xNTIsNiArMTUzLDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHNsb3dEb3duQW5kV2Fz
dGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlC
dWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgor
I2luY2x1ZGUgIkRhdGFWaWV3LmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmll
dzo6c19pbmZvID0geworICAgICJEYXRhVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9OworCitKU0RhdGFWaWV3OjpKU0RhdGFWaWV3KFZN
JiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRl
eHQpCit7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBw
YXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAg
ICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dWludDhfdD4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3IoCisgICAgICAg
ICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3Ro
IG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2
bSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBKU0RhdGFWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkgSlNEYXRhVmlldyh2bSwgY29u
dGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFsaXplZChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitib29sIEpTRGF0YVZpZXc6OnNl
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJF
QUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQ
dHI8RGF0YVZpZXc+IEpTRGF0YVZpZXc6OnR5cGVkSW1wbCgpCit7CisgICAgcmV0dXJuIERhdGFW
aWV3OjpjcmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworfQorCitib29s
IEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcq
PihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0
LT5tX2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkg
eworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+
bV9sZW5ndGgpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0Rh
dGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBv
YmplY3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3
Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dHlwZWRJbXBsKCk7Cit9CisKK1N0
cnVjdHVyZSogSlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywKKyAgICAgICAg
Tm9uQXJyYXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNEYXRhVmlld19oCisjZGVmaW5lIEpTRGF0YVZpZXdfaAorCisjaW5jbHVkZSAi
RGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSlNE
YXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAg
dW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCisgICAgLy8gRHVtbXkgbWV0aG9kcywgd2hpY2gg
ZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2UgYXJlIGp1c3QgaW4gcGxhY2UgdG8KKyAgICAvLyBw
bGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gd2UgZG8gZWxzZXdoZXJlLgorICAg
IHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIGJvb2wgc2V0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIAorICAgIFBhc3NSZWZQdHI8RGF0YVZpZXc+IHR5cGVkSW1wbCgpOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlRGF0
YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0aWMgdm9p
ZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVm
ZmVyVmlldyopOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAor
ICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJv
ci5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5j
bHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTRGF0YVZpZXdQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5
cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZv
ciBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oCitAYmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJ
bnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jR2V0VWludDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IGdldEludDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgZ2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRGbG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9h
dDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIHNldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1Nl
dEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAg
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jU2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVp
bnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQ
cm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlw
ZSogSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCit7CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisg
ICAgICAgIEpTRGF0YVZpZXdQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBl
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0
dXJlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30K
KworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xv
dDxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVj
KSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+
KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxK
U0RhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVl
IGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0g
anNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICgh
ZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3
LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVh
c3Qgb25lIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVk
IGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBp
ZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENv
dW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50
b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAg
IAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFWaWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91
bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYg
KG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZh
bHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNE
YXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhv
ZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFu
ZCB2YWx1ZSkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBs
aXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICBpZiAoc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUpID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgeworICAgICAgICBsaXR0bGVF
bmRpYW4gPSBleGVjLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIGlmIChieXRlT2Zmc2V0ID49IGRhdGFW
aWV3LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICBpZiAo
bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFs
dWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAgIAorICAgICpyZWludGVycHJldF9jYXN0PHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXctPnZlY3Rv
cigpKSArIGJ5dGVPZmZzZXQpID0gdmFsdWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gZ2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50
MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDMyQWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jR2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRh
PFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZ2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0
MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gZ2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldElu
dDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQxNkFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY1NldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0
YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gc2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MzJB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gc2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NChFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQ2NEFkYXB0b3I+KGV4ZWMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmgiCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90
b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rh
dGFWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gK
KworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0Rh
dGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRh
Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpT
RGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgICAgIEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEpTRmxvYXQzMkFycmF5X2gKKyNkZWZpbmUgSlNGbG9hdDMy
QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9h
dDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0
NjRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zs
b2F0NjRBcnJheV9oCisjZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdf
aAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBh
cnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8v
CisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRz
IHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250
YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlND
ZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxl
bWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQor
Ly8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRo
IHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMg
dXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIg
ZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFz
ZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIg
R0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNo
IG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0
aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJl
YWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUg
b2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9u
IHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRl
bXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlw
ZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisv
LyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBB
ZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50
OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsK
Ky8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGlu
dDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4
X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6
IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5
QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjx0
eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVm
UHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBz
aXplT2YobV9sZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAK
KyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlw
ZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBh
cmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0Cisg
ICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBj
YW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwg
bV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkp
CisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1
cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVp
Y2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6
dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAor
ICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBy
ZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5z
aWduZWQgaSwgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwg
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1
ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkp
OworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGksIEpTVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VRdWlj
a2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9
IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYg
b2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5T
ZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhl
CisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVSYW5nZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2ls
bCB0aHJvdyBvbiBlcnJvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAg
Ym9vbCBzZXRXaXRoU3BlY2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
c3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAg
Ly8gdGhlbiBpdCB3aWxsIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChF
eGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICAKKyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0eXBlZElt
cGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoYnVm
ZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbywgTm9uQXJyYXkpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAg
IHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFw
dG9yOjp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlv
bk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5
VG9rZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5k
IG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRo
YXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQg
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZl
clZpZXcqKTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitpbmxpbmUgUGFzc1Jl
ZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gdG9OYXRpdmVUeXBlZFZpZXcoSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKiB3cmFwcGVyID0g
anNEeW5hbWljQ2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKj4odmFsdWUpOworICAg
IGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPnR5
cGVkSW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5j
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRl
cm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFz
ZTsKKworcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBjcmVhdGUoCisg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgSlNPYmplY3QqIHByb3RvdHlwZSwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3JJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXNfaAorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHBy
b3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDMpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmll
d0NsYXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6
Y3JlYXRlKAorICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAorICAgIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAg
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSwgbmFtZSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
U3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5l
cmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYy0+YXJn
dW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25l
IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAg
IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT50eXBl
ZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUpOworICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1p
Y0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVj
LT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVu
dCgyKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgo
KSAtIG9mZnNldCkgJSBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZm
ZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBl
bGVtZW50IHNpemUuIikpOworICAgICAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpIC0gb2Zmc2V0KSAvIFZpZXdDbGFzczo6ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1
cmUsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdD
bGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFy
cmF5QnVmZmVyIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBl
dmVyeXRoaW5nIGJ1dCBEYXRhVmlldywgd2UgYWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9m
OgorICAgIC8vIC0gQW5vdGhlciBhcnJheS4gVGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2Yg
dGhhdCBhcnJheS4KKyAgICAvLyAtIEFuIGludGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBl
ZCBhcnJheSBvZiB0aGF0IGxlbmd0aCBhbmQgemVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAg
ICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5h
cmd1bWVudCgwKSkpIHsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0OworICAgICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9CisgICAgICAgICAgICBvYmplY3QtPmdldChleGVj
LCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBWaWV3Q2xhc3MqIHJl
c3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxl
bmd0aCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0LT5z
ZXQoZXhlYywgb2JqZWN0LCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBpbnQgbGVuZ3RoID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSZXF1
ZXN0ZWQgbGVuZ3RoIGlzIG5lZ2F0aXZlLiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0NvbnN0cnVjdFR5cGUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENv
bnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXc8Vmlld0NsYXNzPjsKKyAg
ICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK0NhbGxUeXBlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0Ns
YXNzPjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxW
aWV3Q2xhc3M+OworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisg
ICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUpKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1
bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVj
LT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1
Y3Rpb25Db250ZXh0IGNvbnRleHQoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVu
Z3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlv
bkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2Vk
QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFy
cmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAg
ICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3Ro
IG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwt
PmJ1ZmZlcigpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJl
LCBidWZmZXIsIGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZt
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NS
ZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojp2YWxpZGF0ZVJhbmdlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQs
IGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5k
IGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBl
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTog
dGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8v
IGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhl
cmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBv
ZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwg
b3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8g
dGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVv
cGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdv
bid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWlu
KGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2Uo
ZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdl
ZCB1bmV4cGVjdGVkbHkuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5KG9mZnNldCArIGksIG90aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8v
IFRoZSBzdXBlciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUg
c2FtZSB0eXBlLgorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBz
dGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQs
IG90aGVyLT50eXBlZFZlY3RvcigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5
cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUo
ZXhlYywganNDYXN0PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAg
ICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhl
YywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBj
YXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBl
KGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogewor
ICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNh
c2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4
ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNl
dFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChp
bmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhp
c09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
KyAgICAgICAgLy8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8g
c3RvcmUgdG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3Qg
bW9kZS4gSSB3aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5k
ZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJl
amVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4
ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAv
LyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0
eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNl
OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAg
IH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0
eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJv
cGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkg
eworICAgICAgICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dp
bmcgYW55dGhpbmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVp
Y2tseShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5E
RVgpIHsKKyAgICAgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KAorICAgICAgICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlm
aWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
Pm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5j
b3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVj
dC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJh
eToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAor
ICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBl
ZEFycmF5VmVjdG9yQ29weVRva2VuCisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkodGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRo
aXNPYmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFs
bG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShu
ZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRo
aXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHko
b2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFz
ZTo6Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3Qp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhp
cyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFj
ZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZN
LCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0
IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hh
dAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJy
byBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMg
d2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcwor
ICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3Rwcmlu
dCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNp
emUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAg
Ly8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRl
ZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0
IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAv
LyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUg
dGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGlu
ZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8g
dGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHBy
b3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlz
T2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09i
amVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcmVjb3Jk
LCBpbiB0aGUgYnV0dGVyZmx5LCB3aGF0IG91ciBvZmZzZXQgaXMuCisgICAgCisgICAgaWYgKHRo
aXNPYmplY3QtPm1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheQorICAgICAgICAmJiAhdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkgJiYgc2l6ZSA+PSBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSB7CisgICAg
ICAgIC8vIFJldXNlIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBpZiBhdCBhbGwgcG9zc2libGUu
CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ID0KKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEluZGV4aW5nSGVhZGVyKj4odGhpc09iamVjdC0+bV92ZWN0b3IpLT5idXR0ZXJmbHkoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5LCAqaGVhcC0+dm0oKSwgdGhpc09iamVjdCwgdGhpc09iamVjdC0+c3RydWN0dXJlKCks
CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSwgZmFsc2UsIDAsIDApOworICAgIH0KKworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
OworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0
VHlwZWRBcnJheToKKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZSh0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICAvLyBGSVhN
RTogY29uc2lkZXIgZG9pbmcgc29tZXRoaW5nIGxpa2UgInN1YnRyYWN0aW5nIiBmcm9tIGV4dHJh
IG1lbW9yeQorICAgICAgICAvLyBjb3N0LCBzaW5jZSByaWdodCBub3cgdGhpcyBjYXNlIHdpbGwg
Y2F1c2UgdGhlIEdDIHRvIHRoaW5rIHRoYXQgd2UgcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gdGhl
IHdob2xlIGJ1ZmZlci4KKyAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZUFkb3B0
ZWQodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgdGhpc09iamVjdC0+YnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPnNldEFycmF5
QnVmZmVyKGJ1ZmZlci5nZXQoKSk7CisgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBidWZmZXIt
PmRhdGEoKTsKKyAgICB0aGlzT2JqZWN0LT5tX21vZGUgPSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cisg
ICAgaGVhcC0+YWRkUmVmZXJlbmNlKHRoaXNPYmplY3QsIGJ1ZmZlci5nZXQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5
QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBy
ZXR1cm4gdGhpc09iamVjdC0+dHlwZWRJbXBsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUgOiBwdWJs
aWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAgICBFeGVjU3RhdGUqLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaAorI2RlZmluZSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaAorCisjaW5jbHVkZSAiRXhjZXB0
aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgiCisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZpZXdDbGFz
cyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFy
cmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhw
ZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBKU09iamVjdCogc291
cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwor
ICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0
LiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7CisgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUlu
dDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAg
ICAgICBvZmZzZXQgPSAwOworICAgIAorICAgIHVuc2lnbmVkIGxlbmd0aCA9IHNvdXJjZUFycmF5
LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0aGlzT2JqZWN0LT5zZXQoZXhl
Yywgc291cmNlQXJyYXksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y1N1YmFycmF5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBWaWV3Q2xhc3Mq
IHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUgYSB0eXBlZCBhcnJh
eSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVj
dGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlz
T2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRl
ciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhp
c0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdh
dGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAg
ICAgYmVnaW4gPSB0aGlzTGVuZ3RoIC0gYmVnaW47CisgICAgaWYgKGVuZCA8IDApCisgICAgICAg
IGVuZCA9IHRoaXNMZW5ndGggLSBlbmQ7CisgICAgCisgICAgLy8gQ2xhbXAgdGhlIGluZGljZXMg
dG8gdGhlIGJvdW5kcyBvZiB0aGUgYXJyYXkuCisgICAgQVNTRVJUKGJlZ2luID49IDApOworICAg
IEFTU0VSVChlbmQgPj0gMCk7CisgICAgYmVnaW4gPSBzdGQ6Om1pbihiZWdpbiwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4odGhpc0xlbmd0aCkpOworICAgIGVuZCA9IHN0ZDo6bWluKGVuZCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odGhpc0xlbmd0aCkpOworICAgIAorICAgIC8vIENsYW1wIGVuZCB0byBi
ZWdpbi4KKyAgICBlbmQgPSBzdGQ6Om1heChiZWdpbiwgZW5kKTsKKyAgICAKKyAgICBBU1NFUlQo
ZW5kID49IGJlZ2luKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBiZWdpbjsKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSBlbmQgLSBiZWdpbjsKKyAgICAKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFy
cmF5QnVmZmVyID0gdGhpc09iamVjdC0+YnVmZmVyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQobGVu
Z3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIFZpZXdDbGFz
cyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwg
YXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSArIG9mZnNldCAq
IFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCAqIFZpZXdDbGFzczo6ZWxl
bWVudFNpemUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbigKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisg
ICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
U2V0PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJy
YXk8Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+KgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIHByb3Rv
dHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIHByb3Rv
dHlwZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJv
dG90eXBlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDE1ICs0OSwyNiBAQAogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0
aW9uLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NhbGxi
YWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5j
bHVkZSAiSlNPTk9iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9m
aWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpAQCAtMjE0LDYgKzIyNSwzMCBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHJvdG9BY2Nlc3Nvci0+c2V0
U2V0dGVyKGV4ZWMtPnZtKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJp
bmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1
dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJv
dG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Q
cm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZl
clByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQ4QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJv
dG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDMyQXJyYXlQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWlu
dDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDE2QXJyYXlQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRo
aXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQz
MkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5
cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNEYXRhVmlld1Byb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpKSkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVJbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDhBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlSW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUludDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDMyQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVVaW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFy
cmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDhDbGFtcGVkKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuZ2V0KCkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLmdldCgp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5zdHJ1Y3R1cmUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5n
ZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0
KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRh
VmlldyldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRhVmlldzo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0
YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV9hY3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBqc051bGwoKSkpOwpAQCAtMzE4LDYgKzM1MywyNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuSlNPTiwgSlNPTk9iamVjdDo6Y3JlYXRl
KGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLk1hdGgsIE1h
dGhPYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwor
ICAgIAorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ciA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKTsKKyAgICBGaXhl
ZEFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQ4
QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5w
cm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRo
aXMsIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJh
eUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50MzJBcnJheSIpOwor
ICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgpXSA9IEpTVWludDhB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgp
KSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSwgIlVp
bnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4
Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywg
SlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhDbGFtcGVkQXJyYXki
KTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQxNildID0gSlNV
aW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50MTZBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJvdG90eXBlLmdl
dCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgo
VHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNV
aW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWlu
dDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0
b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0MzJBcnJh
eSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0g
SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxvYXQ2NEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90
eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVEYXRhVmlldyldID0gSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGUodGhp
cywgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
RGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCksICJEYXRhVmlldyIpOworICAgIAorICAgIG1fYXJy
YXlCdWZmZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ciwgRG9udEVudW0pOworICAgIAorICAgIGZvciAodW5zaWduZWQgdHlwZWRBcnJheUluZGV4ID0g
TlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0eXBlZEFycmF5SW5kZXgtLTspIHsKKyAgICAg
ICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5kZXhdLnByb3RvdHlwZS0+cHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsK
KyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmll
cihleGVjLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0tPm5hbWUoZXhl
YykpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsK
KyAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0gewogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oZXhlYy0+cHJvcGVydHlOYW1lcygpLk5hTiwganNOYU4o
KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTM5NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTQ2xhc3NSZWYuaCIKICNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQ
cm90b3R5cGUuaCIKQEAgLTE2Niw2ICsxNjcsMTYgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKKyAgICAKKyAgICBXcml0ZUJhcnJpZXI8
SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZTsKKyAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJlOworICAgIAorICAgIHN0
cnVjdCBUeXBlZEFycmF5RGF0YSB7CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gcHJv
dG90eXBlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CisgICAg
fTsKKyAgICAKKyAgICBGaXhlZEFycmF5PFR5cGVkQXJyYXlEYXRhLCBOVU1CRVJfT0ZfVFlQRURf
QVJSQVlfVFlQRVM+IG1fdHlwZWRBcnJheXM7CiAgICAgICAgIAogICAgIHZvaWQqIG1fc3BlY2lh
bFBvaW50ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNpYWwgcG9pbnRlcnMgdXNlZCBi
eSB0aGUgTExJbnQgYW5kIEpJVC4KIApAQCAtMzMwLDYgKzM0MSwxNCBAQCBwdWJsaWM6CiAgICAg
U3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSogcmVn
RXhwU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCk7IH0K
ICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RyaW5nT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSogYXJyYXlCdWZmZXJQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVm
ZmVyUHJvdG90eXBlLmdldCgpOyB9CisgICAgU3RydWN0dXJlKiBhcnJheUJ1ZmZlclN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZWRBcnJheVR5cGUgdHlwZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGVkQXJyYXlzW3RvSW5kZXgodHlwZSld
LnN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CiAKICAgICB2b2lkKiBhY3R1YWxQb2ludGVyRm9yKFNw
ZWNpYWw6OlBvaW50ZXIgcG9pbnRlcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0ludDhBcnJheV9oCisjZGVmaW5lIEpTSW50OEFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50OEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5
X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJh
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQz
MkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50MzJBcnJheV9oCisj
ZGVmaW5lIEpTSW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNl
bmRpZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0
ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsiRnVu
Y3Rpb24iLCAmSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0NvbnN0cnVjdG9yKX0KKworTUFLRV9TX0lORk8oSW50
OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJBcnJh
eSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZEFy
cmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFycmF5
KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJyYXkp
OworTUFLRV9TX0lORk8oRGF0YVZpZXcpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzX2gKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTSW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFy
cmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNv
bnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
VWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1Vp
bnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3I8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zs
b2F0MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0
YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0
ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBlOjpzX2luZm8gPSB7I3R5cGUg
IlByb3RvdHlwZSIsICZKUyMjdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0Vf
U19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9T
X0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKyNkZWZpbmUg
SlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQ4
QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQzMkFycmF5PiBKU0ludDMy
QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBl
ZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5UHJv
dG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0
MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkg
XAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBlIyNBcnJheTo6c19pbmZv
ID0geyN0eXBlICJBcnJheSIsICZKUyMjdHlwZSMjQXJyYXk6OkJhc2U6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQXJyYXkpfQorCitNQUtFX1NfSU5GTyhJbnQ4
KTsKK01BS0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZP
KFVpbnQ4KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYp
OworTUFLRV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lO
Rk8oRmxvYXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5c19o
CisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVk
QXJyYXlBZGFwdG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0lu
dDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBK
U0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRv
cj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFk
YXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9h
dDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJh
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhBcnJheV9oCisj
ZGVmaW5lIEpTVWludDhBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNl
bmRpZiAvLyBKU1VpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNV
aW50OENsYW1wZWRBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRp
ZiAvLyBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNVaW50MTZBcnJheV9oCisjZGVmaW5lIEpTVWludDE2QXJyYXlfaAorCisjaW5j
bHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDMyQXJyYXlfaAorI2RlZmlu
ZSBKU1VpbnQzMkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDkgQEAK
ICNkZWZpbmUgT3BlcmF0aW9uc19oCiAKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJw
cmV0ZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNQcm94eS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJy
YXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0K
K1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIo
KSB7IH0KKworSlNBcnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJh
eUJ1ZmZlciogbmF0aXZlKQoreworICAgIGlmIChKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBuYXRp
dmUtPm1fd3JhcHBlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAKKyAgICBK
U0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4
ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgbmF0aXZlKTsK
KyAgICBuYXRpdmUtPm1fd3JhcHBlciA9IFBhc3NXZWFrPEpTQXJyYXlCdWZmZXI+KHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZWZhdWx0
IGNvbnRyb2xsZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisv
LyBhcnJheSBidWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29yZS4gVGhp
cyBpc24ndCB3aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1c2VzIHdo
ZW4gcnVubmluZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgorLy8KKy8v
IC0gSWYgdGhlIEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZmZXIgc3Rh
eXMgYWxpdmUuCisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBhIEpTQXJy
YXlCdWZmZXIgYWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgaXQg
ZGlkbid0IGRpZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xhc3MgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgewor
cHVibGljOgorICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlC
dWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDEzICsyMzAsMTEgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKQorICAgICAgICAg
ICAgfHwgaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSk7Ci0gICAgfQorICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKiBj
ZWxsKSBjb25zdDsKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNTM5NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSW5saW5lc19o
CiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgogCkBAIC0xMDQsNiArMTA1LDE3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldENvbmMKICAgICAgICAgdm0sIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNp
ZmljVmFsdWVJZ25vcmVkKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpoYXNJbmRleGlu
Z0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgaWYgKGhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgaWYgKCFpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBqc0Nhc3Q8Y29uc3QgSlNB
cnJheUJ1ZmZlclZpZXcqPihjZWxsKS0+bW9kZSgpID09IFdhc3RlZnVsVHlwZWRBcnJheTsKK30K
KwogaW5saW5lIGJvb2wgU3RydWN0dXJlOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogewogICAgIHJldHVybiB0eXBlSW5mbygpLm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQoKSAmJiBnbG9iYWxPYmplY3QoKSA9PSBsZXhpY2FsR2xvYmFs
T2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFk
YXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlBZGFwdG9yc19oCisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19oCisK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8
CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpT
Vmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IElu
dGVncmFsVHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAg
IHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJn
IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9
IHR5cGVWYWx1ZUFyZzsKKworICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2
NF90Pih2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICBy
ZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1Zh
bHVlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcs
IHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJn
Pgorc3RydWN0IEZsb2F0VHlwZWRBcnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBU
eXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1Zp
ZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShk
b3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihRTmFOKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisK
K3N0cnVjdCBJbnQ4QWRhcHRvcjsKK3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJB
ZGFwdG9yOworc3RydWN0IFVpbnQ4QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9y
Oworc3RydWN0IFVpbnQxNkFkYXB0b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBG
bG9hdDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4gY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJy
YXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2
NEFycmF5OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+
IEpTSW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0
b3I+IEpTSW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJB
ZGFwdG9yPiBKU0ludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVp
bnQ4QWRhcHRvcj4gSlNVaW50OEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50OENsYW1wZWRBZGFwdG9yPiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMy
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBK
U0Zsb2F0NjRBcnJheTsKKworc3RydWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5
QWRhcHRvcjxpbnQ4X3QsIEludDhBcnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07Citz
dHJ1Y3QgSW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJ
bnQxNkFycmF5LCBKU0ludDE2QXJyYXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJ
bnQzMkFycmF5LCBUeXBlSW50MzI+IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3Jh
bFR5cGVkQXJyYXlBZGFwdG9yPHVpbnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlw
ZVVpbnQ4PiB7IH07CitzdHJ1Y3QgVWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFk
YXB0b3I8dWludDE2X3QsIFVpbnQxNkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7
IH07CitzdHJ1Y3QgVWludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWlu
dDMyX3QsIFVpbnQzMkFycmF5LCBKU1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1
Y3QgRmxvYXQzMkFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMy
QXJyYXksIEpTRmxvYXQzMkFycmF5LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRB
ZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNG
bG9hdDY0QXJyYXksIFR5cGVGbG9hdDY0PiB7IH07CisKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFw
dG9yIHsKKyAgICB0eXBlZGVmIHVpbnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBl
ZEFycmF5IFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdU
eXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWlu
dDhDbGFtcGVkOworICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAg
ICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2
ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9O
YXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMy
KCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBkb3VibGUgdG9Eb3VibGUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHN0YXRpYyB1aW50OF90IGNsYW1wKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1
NSkKKyAgICAgICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50OF90Pih2YWx1ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBUeXBlZEFycmF5QWRhcHRvcnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5
Q29udHJvbGxlcjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9s
bGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEFycmF5QnVmZmVyOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1Ymxp
YyBSZWZDb3VudGVkPFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNB
cnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlC
dWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0jZGVmaW5l
IFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBDbGFz
c0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUgewotICAgIFR5cGVkQXJyYXlOb25lLAotICAg
IFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJyYXlJbnQxNiwKLSAgICBUeXBlZEFycmF5SW50
MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAgIFR5cGVkQXJyYXlVaW50OENsYW1wZWQsCi0g
ICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBlZEFycmF5VWludDMyLAotICAgIFR5cGVkQXJy
YXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDY0Ci19OwotCi1zdHJ1Y3QgVHlwZWRBcnJh
eURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKCkKLSAgICAgICAgOiBtX2Ns
YXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldCgwKQotICAgICAgICAsIG1fbGVu
Z3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcihjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90IHN0b3JhZ2VPZmZzZXQsIHNpemVfdCBsZW5n
dGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0luZm8oY2xhc3NJbmZvKQotICAgICAgICAsIG1f
c3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQotICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxl
bmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0lu
Zm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNldDsKLSAgICBzaXplX3QgbV9sZW5ndGhPZmZz
ZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWduZWRuZXNzIHsKLSAgICBTaWduZWRUeXBlZEFy
cmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQotfTsKLWVudW0gVHlwZWRBcnJheVJvdW5kaW5n
IHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAgIENsYW1wUm91bmRpbmcKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlwZWRBcnJheURlc2NyaXB0b3JfaAotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5SW5s
aW5lc19oCisjZGVmaW5lIFR5cGVkQXJyYXlJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIgorCisjZW5kaWYgLy8gVHlwZWRBcnJheUlu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBl
LmgiCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBl
KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBO
b3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAg
ICAgICByZXR1cm4gJkpTSW50OEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDg6Cisg
ICAgICAgIHJldHVybiAmSlNVaW50OEFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgorICAgICAgICByZXR1cm4gJkpTVWludDhDbGFtcGVkQXJyYXk6OnNfaW5mbzsKKyAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuICZKU0ludDE2QXJyYXk6OnNfaW5mbzsK
KyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiAmSlNVaW50MTZBcnJheTo6c19p
bmZvOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gJkpTSW50MzJBcnJheTo6
c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQzMkFy
cmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuICZKU0Zs
b2F0MzJBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVy
biAmSlNGbG9hdDY0QXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAg
ICAgcmV0dXJuICZKU0RhdGFWaWV3OjpzX2luZm87CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICBvdXQucHJpbnQo
Ik5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQxNiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDMyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDhDbGFtcGVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQxNiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBvdXQucHJp
bnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0NjQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBU
eXBlZEFycmF5VHlwZV9oCisjZGVmaW5lIFR5cGVkQXJyYXlUeXBlX2gKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENsYXNzSW5mbzsK
KworZW51bSBUeXBlZEFycmF5VHlwZSB7CisgICAgTm90VHlwZWRBcnJheSwKKyAgICBUeXBlSW50
OCwKKyAgICBUeXBlVWludDgsCisgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKKyAgICBUeXBlSW50MTYs
CisgICAgVHlwZVVpbnQxNiwKKyAgICBUeXBlSW50MzIsCisgICAgVHlwZVVpbnQzMiwKKyAgICBU
eXBlRmxvYXQzMiwKKyAgICBUeXBlRmxvYXQ2NCwKKyAgICBUeXBlRGF0YVZpZXcKK307CisKKyNk
ZWZpbmUgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTIFR5cGVEYXRhVmlldworCitpbmxpbmUg
dW5zaWduZWQgdG9JbmRleChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgLSAxOworfQorCitpbmxpbmUgYm9vbCBpc1R5cGVkVmll
dyhUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
Tm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5s
aW5lIHNpemVfdCBlbGVtZW50U2l6ZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAxOworICAgIGNh
c2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgIGNhc2UgVHlwZUZs
b2F0MzI6CisgICAgICAgIHJldHVybiA0OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAg
IHJldHVybiA4OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCitjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRB
cnJheVR5cGUgdHlwZSk7CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5
cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlSW50MTY6
CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlw
ZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFycmF5VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0MzI6Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNTaWduZWQo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5
cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNh
c2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5s
aW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlR5cGVk
QXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5
VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlzX2gKKyNk
ZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlw
ZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFt
cGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBV
aW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+
IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0
b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRB
ZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
VHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50
OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDhBcnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQ4
QXJyYXlfaAogI2RlZmluZSBVaW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1j
bGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD4g
ewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhB
cnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJh
eSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGly
ZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0gICAg
dXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5l
IFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgaW5saW5l
IFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1
cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsK
LQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6
Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYXJyYXksIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRl
PFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDhBcnJheTo6VWludDhBcnJh
eShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50
OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5
KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDhBcnJheTsKIAog
I2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjUgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCiAjaWZuZGVmIFVpbnQ4Q2xhbXBlZEFy
cmF5X2gKICNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAogCi0jaW5jbHVkZSAiVWludDhBcnJh
eS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBVaW50OEFycmF5IHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZSh1bnNp
Z25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRp
cmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1
bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gSXQncyBvbmx5IG5lZWRlZCB0byBwb3Rl
bnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBhcnJheQotICAgIC8vIHdhcyBjcmVhdGVk
IHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gcGF0aHMKLSAgICAv
LyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgIGlubGluZSB2b2lkIHplcm9GaWxsKCk7
Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotICAgIGlubGluZSB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25z
dHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJy
YXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7
Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5Ojpj
cmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4oYXJy
YXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xh
bXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFt
cGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OENs
YW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6emVyb0Zp
bGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7Ci19Ci0KLXZvaWQgVWludDhDbGFt
cGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotewotICAgIGlmIChp
bmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHZh
bHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICBlbHNlIGlmICh2YWx1
ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0gICAgZGF0YSgpW2luZGV4XSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19Ci0KLVVpbnQ4Q2xhbXBlZEFycmF5OjpV
aW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogVWludDhBcnJheShidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWlu
dDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4Q2xhbXBlZEFycmF5PihzdGFydCwg
ZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIK
IAogdXNpbmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQ4Q2xhbXBl
ZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZB
cnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRlZiBVaW50MTZB
cnJheV9oCiAjZGVmaW5lIFVpbnQxNkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1j
bGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGly
ZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3Vs
dHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNl
dDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29u
c3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZp
c2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWlu
dDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90
Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxV
aW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQxNkFycmF5PihsZW5ndGgp
OwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkK
LXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQxNkFy
cmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MTZBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQx
NkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJB
cnJheS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRlZiBVaW50MzJB
cnJheV9oCiAjZGVmaW5lIFVpbnQzMkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1j
bGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGly
ZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3Vs
dHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNl
dDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29u
c3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZp
c2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWlu
dDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90
Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxV
aW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+
IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQzMkFycmF5PihsZW5ndGgp
OwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRl
Z3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkK
LXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQzMkFy
cmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlw
ZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MzJBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQz
MkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNp
bmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1
ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlk
ZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAi
U3Ryb25nSW5saW5lcy5oIgpAQCAtODcsNiArODgsNyBAQCBleHRlcm4gY29uc3QgSGFzaFRhYmxl
IGFycmF5Q29uc3RydWN0b3JUCiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5UHJvdG90eXBl
VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKIGV4
dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBk
YXRhVmlld1RhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlVGFibGU7CiBleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMTQ1LDYgKzE0Nyw3IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGFycmF5Q29uc3RydWN0b3JUYWJs
ZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNvbnN0cnVjdG9yVGFibGUpKQogICAgICwg
YXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheVByb3RvdHlw
ZVRhYmxlKSkKICAgICAsIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAgICwgZGF0YVZpZXdUYWJsZShmYXN0TmV3
PEhhc2hUYWJsZT4oSlNDOjpkYXRhVmlld1RhYmxlKSkKICAgICAsIGRhdGVUYWJsZShmYXN0TmV3
PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQogICAgICwgZGF0ZUNvbnN0cnVjdG9yVGFibGUo
ZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFibGUpKQogICAgICwgZXJy
b3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjplcnJvclByb3RvdHlwZVRh
YmxlKSkKQEAgLTI1OCw2ICsyNjEsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBl
IGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3RhdGUgPSBhZG9w
dFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAorICAgIC8vIElu
aXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0aGF0IFZNIGlu
aXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAgIG1fdHlwZWRB
cnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIo
KSk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtMjg5LDYgKzI5Niw3IEBAIFZNOjp+Vk0oKQogICAgIGFy
cmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYXJyYXlDb25zdHJ1Y3RvclRh
YmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGJvb2xlYW5Qcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFi
bGUoKTsKKyAgICBkYXRhVmlld1RhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsK
ICAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwpAQCAtMzA2LDYgKzMxNCw3
IEBAIFZNOjp+Vk0oKQogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJh
eUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxl
Kj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNo
VGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlKj4oZGF0YVZpZXdUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFz
aFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nh
c3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRl
ICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVk
ZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgpA
QCAtNjksMTMgKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29kZUNhY2hlOwog
ICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBj
bGFzcyBGbG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgRmxvYXQ2NEFycmF5OwogICAgIGNsYXNzIEhh
bmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKLSAgICBjbGFzcyBJbnQ4QXJy
YXk7Ci0gICAgY2xhc3MgSW50MTZBcnJheTsKLSAgICBjbGFzcyBJbnQzMkFycmF5OwogICAgIGNs
YXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNsYXNzIEpT
T2JqZWN0OwpAQCAtOTMsMTAgKzg4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgotICAgIGNsYXNzIFVpbnQ4
QXJyYXk7Ci0gICAgY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2xhc3MgVWludDE2QXJy
YXk7Ci0gICAgY2xhc3MgVWludDMyQXJyYXk7CiAgICAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7
CiAgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOwpAQCAtMjMwLDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZTsKICAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFi
bGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRh
Vmlld1RhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsKICAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMzkwLDYgKzM4Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9maWxlcjsKICAg
ICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVByb2ZpbGVyOwor
ICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xs
ZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAgICBCdW1wUG9p
bnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApAQCAtNDI4LDU1ICs0MjEsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENv
bnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA+IHNfbWluTnVtYmVy
T2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQogICAgICAgICB2b2lkIHJlc2V0TmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA9IDA7IH0K
IAotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0eXBlLCBjYXBpdGFsaXplZFR5
cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNh
cGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAgICAgIEFTU0VSVCghbV8jI3R5cGUjI0FycmF5
RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xh
c3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0gICAgICAgICAgICBtXyMjdHlw
ZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsgXAotICAgICAgICAgICAgQVNTRVJUKG1f
IyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0gICAgICAgIH0gXAotICAg
ICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgdHlwZSMjQXJyYXlEZXNjcmlwdG9yKCkg
Y29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IHJl
dHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9Ci0KLSAgICAgICAgcmVnaXN0ZXJUeXBl
ZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1
bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4
LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4Q2xhbXBl
ZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWlu
dDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MzIs
IFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZs
b2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDY0LCBGbG9h
dDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgotICAgICAgICAKLSAgICAg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVk
QXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9uZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDE2QXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNh
c2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAg
ICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIGJvb2wgY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8IGV4Y2x1c2l2
ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CkBAIC01MTAsMTYgKzQ1NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKICAgICAgICAgT3du
UHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgICAgIFJlZkNvdW50ZWRBcnJheTxTdGFj
a0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwotCi0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IG1faW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9p
bnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQz
MkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50OEFy
cmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50OENsYW1w
ZWRBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDE2
QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQzMkFy
cmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0NjRBcnJh
eURlc2NyaXB0b3I7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzMgQEAKKzIwMTMtMDgtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIEFkZGVk
IHRoZSBub3Rpb24gb2YgYSByZWZlcmVuY2UgY291bnRlZCBvYmplY3QgdGhhdCBjYW4gYmUgbWFy
a2VkIERlZmVycmVkLAorICAgICAgICAgIHdoaWNoIGlzIGxpa2UgYSBzcGVjaWFsLXB1cnBvc2Ug
dXByZWYuCisgICAgICAgIAorICAgICAgICAtIEFkZGVkIGEgY29tbW9uIGJ5dGUgZmxpcHBlci4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6RGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlOjpyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2U6Omhhc09uZVJlZik6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFz
ZTo6cmVmQ291bnQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6Omlz
RGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVk
QmFzZTo6fkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkQmFzZTo6ZGVyZWZCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWRCYXNlOjpzZXRJc0RlZmVycmVkQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkOjpkZXJlZik6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVk
OjpzZXRJc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OkRl
ZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6
On5EZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgICogd3RmL0ZsaXBCeXRlcy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4pOgorICAgICAg
ICAoV1RGOjpmbGlwQnl0ZXMpOgorCiAyMDEzLTA4LTEyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gaXNNYWluVGhyZWFkIGltcGxlbWVudGF0
aW9uIHdpdGggVVNFKFdFQl9USFJFQUQpCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKIAog
LyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4
MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OworCQkwRjJC
NjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3
QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OworCQkwRjJCNjZBNzE3QjZCNEZE
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87
IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUg
LyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVh
ZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLzsgfTsKQEAg
LTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8K
IAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
b0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTQxN0I2QjRGNzAw
QTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFi
bGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE1MTdC
NkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAv
KiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RC
REE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0
aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTAxNzJF
MDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBp
bGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzAsNiArNjM0
LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAg
Ki8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIuaCAqLywK
IAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5oICovLAorCQkJCTBGMkI2
NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovLAogCQkJCUE4
QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJCUE4QTQ3MjdGMTUxQTgy
NUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJQThBNDcyODAxNTFBODI1QTAw
NDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0OCw2ICs2NTMsNyBAQAogCQkJ
CTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovLAogCQkJ
CTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlB
OEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkE1
MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJCQlBOEE0NzJBNjE1MUE4MjVB
MDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3MTUxQTgyNUEwMDQxMjNGRiAv
KiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5ODAwMTQxREE0IC8qIEZ1bmN0
aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3IEBACiAJCQkJQThBNDczRjYx
NTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJheVB0ci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRy
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4MjVCMDA0MTIzRkYgLyog
UGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTcsNiArMTA2NCw3IEBACiAJ
CQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTcxN0I2QjRGRDAwQTdB
RTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDkxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVm
aW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRo
YXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4g
dGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJh
bCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3Ug
Y2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2Fu
IGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZv
ciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW50ID0gMjsKKyAgICAKK3B1
YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ICs9IG5vcm1h
bEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQg
LyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7
CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSgp
CisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgLT0gbm9ybWFs
SW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorCisgICAgYm9v
bCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
KSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVkRmxhZzsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ICY9IH5kZWZlcnJl
ZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
Y2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsK
KyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVycmVkKGJvb2wgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWRCYXNlKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERl
ZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNl
L1dURi93dGYvRmxpcEJ5dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmxpcEJ5
dGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGlu
ZSBib29sIG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQor
eworI2lmIENQVShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQor
ICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBm
bGlwQnl0ZXModWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYp
IDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1
aW50MzJfdCBmbGlwQnl0ZXModWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUg
JiAweDAwMDAwMGZmKSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwg
OCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZh
bHVlICYgMHhmZjAwMDAwMCkgPj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVz
KHVpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAw
MGZmbGx1KSA8PCA1NikKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1
KSA8PCA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAy
NCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAg
ICAgICB8ICgodmFsdWUgJiAweDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4MDAwMGZmMDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1
ZSAmIDB4MDBmZjAwMDAwMDAwMDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
ZmYwMDAwMDAwMDAwMDAwMGxsdSkgPj4gNTYpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
aW5saW5lIFQgZmxpcEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0g
MSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDIpIHsK
KyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVp
bnQxNl90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOwor
ICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3Jp
Z2luYWw7CisgICAgfQorICAgIGlmIChzaXplb2YodmFsdWUpID09IDQpIHsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7
CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1Lndv
cmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAg
fQorICAgIGlmIChzaXplb2YodmFsdWUpID09IDgpIHsKKyAgICAgICAgdW5pb24geworICAgICAg
ICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQ2NF90IHdvcmQ7CisgICAgICAgIH0g
dTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0
ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKFQgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuKQoreworICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlh
bihsaXR0bGVFbmRpYW4pKQorICAgICAgICByZXR1cm4gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICBy
ZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRU
b0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7Cit1c2luZyBX
VEY6OmZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJ
bmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zODIs
MzEgKzM4MiwxOSBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL1RpbWVS
YW5nZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAogICAg
ICQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJh
eUJ1ZmZlclZpZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvRE9NUGF0aC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1
ZmZlcnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYy5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L0ludDhBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0Lmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwg
XAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9VaW50OEFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50
OENsYW1wZWRBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3Rp
dmVJbmZvLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5p
ZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDYg
QEAgX19aTjdXZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUAogX19aTjdXZWJDb3Jl
MTJkZWxldGVDb29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzRLVVJMRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3Jl
MTJpY29uRGF0YWJhc2VFdgotX19aTjdXZWJDb3JlMTJ0b1VpbnQ4QXJyYXlFTjNKU0M3SlNWYWx1
ZUUKIF9fWk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTEwcm9vdE9iamVjdEV2CiBfX1pON1dlYkNv
cmUxM0FYT2JqZWN0Q2FjaGUxOHJvb3RPYmplY3RGb3JGcmFtZUVQTlNfNUZyYW1lRQogX19aTjdX
ZWJDb3JlMTNBWE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRFCkBAIC05MDcsNyAr
OTA2LDYgQEAgX19aTjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9f
Wk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0Y29y
ZUVQMjhOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi1fX1pON1dlYkNvcmU0dG9KU0VQTjNK
U0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOUzBfMTFBcnJheUJ1ZmZlckUK
IF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmpl
Y3RFUE5TXzEwQ2xpZW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVF
UE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEzRE9NU3RyaW5nTGlzdEUKIF9fWk43V2ViQ29y
ZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE0Q2xp
ZW50UmVjdExpc3RFCkBAIC0yNzQzLDcgKzI3NDEsNiBAQCBfX1pON1dlYkNvcmUxNkhUTUxNZWRp
YUVsZW1lbnQxNnJldHVyblRvCiBfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTJpc0Z1
bGxzY3JlZW5FdgogX19aTjdXZWJDb3JlMTBUaW1lUmFuZ2VzM2FkZEVkZAogX19aTjdXZWJDb3Jl
MTJ0b1RpbWVSYW5nZXNFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTE0dG9GbG9hdDMyQXJy
YXlFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0UKIF9fWk5LN1dlYkNvcmUxMFRp
bWVSYW5nZXM3bmVhcmVzdEVkCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0RhdGFWaWV3X2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfRGF0YVZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pT
QXJyYXlCdWZmZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyX2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJWaWV3X2gKKyNk
ZWZpbmUgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Rh
dGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVf
RldEX0pTRGF0YVZpZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX0pTVHlwZWRBcnJheXNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9K
U1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1R5cGVkQXJyYXlzLmg+
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNv
cmVfRldEX1R5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRB
cnJheUNvbnRyb2xsZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlDb250
cm9sbGVyLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNv
cmVfRldEX1R5cGVkQXJyYXlJbmxpbmVzc19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJy
YXlJbmxpbmVzc19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVHlwZWRBcnJheXNfaAorI2Rl
ZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VHlwZWRBcnJheXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxNSArMjYsMTIgQEAKICNkZWZpbmUgUmVhbHRpbWVBbmFseXNlcl9oCiAK
ICNpbmNsdWRlICJBdWRpb0FycmF5LmgiCisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXku
aD4KKyNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIAotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBGbG9hdDMyQXJyYXk7Ci1jbGFzcyBVaW50OEFy
cmF5OwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQnVzOwpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNiArMjQyLDggQEAKIAkJMEM0NTM0
MjcxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM0NTM0MjUxMENEQkJGQTAw
ODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovOyB9OwogCQkwQzQ1MzQyODEw
Q0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLzsgfTsKIAkJMEYwOTA4N0YxNDQ0RkRCMjAw
MDI4OTE3IC8qIFNjcm9sbGJhclRoZW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcxNDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJU
aGVtZS5jcHAgKi87IH07CisJCTBGMDk5RDA4MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMDk5RDA5MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJl
bmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZv
LmggKi87IH07CiAJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2
M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi87IH07CiAJCTBGMTMx
NjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNGMTZFRDBDREUwMDM1
Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLzsgfTsKQEAgLTgyOCwxMSArODMwLDYg
QEAKIAkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFD
MTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTJF
OTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0MzkxMTkyMDdEQTAwQjdGNzVE
IC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTJFOTRGNDNDMTE5MjA3REEwMEI3Rjc1RCAv
KiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLzsgfTsK
LQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhG
RiAvKiBEYXRhVmlldy5jcHAgKi87IH07Ci0JCTJFOTdDQ0VCMTI5MzlDQjgwMEM1QzhGRiAvKiBE
YXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi87IH07Ci0JCTJFOTdDQ0Y3
MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAv
KiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLzsgfTsKLQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZG
IC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9
OwotCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkUxMjkzQUQ2QjAwQzVD
OEZGIC8qIEpTRGF0YVZpZXcuaCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8q
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlw
dExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUI0QkNEMjEyMUYwM0UzMDBFQzQ4ODUgLyogQmxv
YlJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUu
Y3BwICovOyB9OwogCQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFu
ZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0
QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi87IH07CkBAIC0x
Mjg4LDggKzEyODUsNiBAQAogCQk0OUIzNzYwRDE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCMzc2
MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLzsgfTsKIAkJNDlDN0I5OTMxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xCdWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLzsgfTsKLQkJNDlD
N0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0ludDhBcnJheS5jcHAgKi87IH07Ci0JCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi87IH07CiAJCTQ5
QzdCOTk3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODQxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi87IH07CiAJCTQ5QzdCOTk4MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMRnJhbWVidWZmZXIuaCAqLzsgfTsKIAkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi87
IH07CkBAIC0xMzUwLDIyICsxMzQ1LDYgQEAKIAkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8q
IEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUNFQjZG
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlF
RUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OwotCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIg
LyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsg
fTsKLQkJNDlFRUNGMDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY0MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjAzMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQz
MkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVD
RjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBK
U0ludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLzsgfTsKLQkJ
NDlFRUNGMDcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTSW50MTZBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyog
SlNVaW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwICovOyB9
OwotCQk0OUVFQ0YwOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNDlFRUNGMEExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVF
Q0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTVWludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
VWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovOyB9
OwotCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkYxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMUIxMDUwNzJGMzAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5jcHAgKi87IH07Ci0JCTQ5RUVDRjFDMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlFRUQxNDIxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDEzQzEwNTE5Njk0MDAwOTlG
QUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKIAkJNDlFRUQxNDMxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwogCQk0OUVFRDE0NDEwNTE5Njk0
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLzsgfTsKQEAgLTE4MjcsOCArMTgw
Niw2IEBACiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0Qy
QTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZF
NjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5o
ICovOyB9OwotCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUQx
MzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKLQkJNkVCQzVFQjAx
MzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNG
bG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1Rl
eHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsg
fTsKIAkJNkVCRjBFNDkxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDYxMkE4OTI2
MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5oICovOyB9OwogCQk2RUJGMEU1NDEyQTg5Mjk4
MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNTIxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0
ZW5zaW9uLmNwcCAqLzsgfTsKQEAgLTI1ODksNyArMjU2Niw2IEBACiAJCTg1RkYzMTVCMEFBRkJG
Q0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtl
eWJvYXJkRXZlbnQubW0gKi87IH07CiAJCTg2MUMyRUE0MTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1
bWVudExvYWRUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODYxQzJFQTMxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRpbWluZy5j
cHAgKi87IH07CiAJCTg2MUMyRUE2MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1p
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYx
QzJFQTUxM0ZCNEZGRjAwMDYyQUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgKi87IH07Ci0J
CTg2MjQzRDAxMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyNDNEMDAxMUJD
MzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi87IH07CiAJCTg2NTEy
RURFMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTEyRURCMTU0QTJB
RUUwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLzsgfTsKIAkJODY1
MTJFREYxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTEyRURDMTU0QTJB
RUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggKi87IH07CiAJCTg2QkE3
NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkE3NjZEMTY2NDI3QTgwMDVCRTVE
MSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTI3MDMsOCArMjY3OSw2IEBACiAJ
CTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAz
NDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwogCQk5MDAxNzg4
MDEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3ODdFMTJFMDM3MDcw
MDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovOyB9OwogCQk5MDAxNzg4
MTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RjEyRTAzNzA3MDA2
NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07Ci0JCTkxMDg5RDMyMTRD
MzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyog
SlNVaW50OENsYW1wZWRBcnJheS5oICovOyB9OwotCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkg
LyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1w
ZWRBcnJheS5jcHAgKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMw
MkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJG
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5
MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
NjU1LDcgKzQ2MjksNiBAQAogCQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzI3NEIyRTE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlLmggKi87IH07CiAJCUJDMjc0QjMxMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZS5jcHAgKi87IH07CiAJCUJDMjc1Qjc5MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLzsg
fTsKLQkJQkMyNzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzVDQjIx
MUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovOyB9OwogCQlCQzI5
OTM1RDE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyOTkzNUMxN0ExREQ1ODAwQkNFODgw
IC8qIENvbG9ySW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmggKi87IH07CiAJCUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29u
dGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCAq
LzsgfTsKQEAgLTY0ODAsNiArNjQ1Myw4IEBACiAJCTBDM0YxRjU5MTBDODg3MTIwMEQ3MkNFMSAv
KiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xV
bmlmb3JtTG9jYXRpb24uaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3Jt
TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDYxN0I5NjhB
MTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0Qjkg
LyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxlY3Rpb25J
bmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNEMTZFRDBDQzgwMDM1
Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBwYXRoID0gY2EvUGxhdGZvcm1DQUZpbHRlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8q
IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1D
QUZpbHRlcnNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTM0LDEyICs3
MTA5LDYgQEAKIAkJMkU3NTg0MUMxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJlYWRlckxvYWRl
ckNsaWVudC5oOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0Zp
bGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaWxl
UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5NEY0M0ExMTkyMDdE
QTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0ND
RTcxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERhdGFWaWV3LmNwcDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAv
KiBEYXRhVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhVmlldy5o
OyBwYXRoID0gY2FudmFzL0RhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOTdDQ0U5MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gRGF0YVZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0RhdGFWaWV3LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRjYxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0
YVZpZXdDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
YXRhVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDRTZE
MTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyU2NyaXB0TG9h
ZGVyQ2xpZW50Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyog
QmxvYlJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJFQjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjU0LDggKzc2MjMsNiBAQAogCQk0OUIzNzYwQjE1QzZD
Njg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBcnJheVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgw
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDhBcnJh
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTgzMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0ludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4NDEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVi
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEZyYW1lYnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg4MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03NjY5LDcgKzc2MzYsNiBAQAogCQk0OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xC
dWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xCdWZm
ZXIuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlDN0I5QTkxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMQnVmZmVyLmg7IHBhdGggPSBjYW52
YXMvV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUEx
MDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBXZWJHTEJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFy
cmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQ4QXJyYXkuaWRsOyBwYXRoID0gY2Fu
dmFzL0ludDhBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFF
MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3
QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmg7IHBhdGggPSBjYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCMDEw
NDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzI1LDMwICs3NjkxLDYgQEAK
IAkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb24uaDsgcGF0aCA9IGZpbHRl
cnMvRmlsdGVyT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNF
QjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZmls
dGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9ucy5oOyBwYXRoID0gZmlsdGVy
cy9GaWx0ZXJPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
REM5MTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IEFycmF5QnVmZmVyVmlldy5pZGw7IHBhdGggPSBjYW52YXMvQXJyYXlCdWZmZXJW
aWV3LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0MxMDUwM0MyMzAw
MDk5RkFCIC8qIEFycmF5QnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBBcnJheUJ1
ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvQXJyYXlCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0RDRjEwNTAzQzIzMDAwOTlGQUIgLyogRmxvYXQzMkFycmF5Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDMyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFz
L0Zsb2F0MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREQy
MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBJbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQzMkFycmF5LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIEludDE2QXJy
YXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDE2QXJyYXkuaWRsOyBwYXRoID0gY2Fu
dmFzL0ludDE2QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RE
ODEwNTAzQzIzMDAwOTlGQUIgLyogVWludDhBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gVWludDhBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDhBcnJheS5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJB
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDMyQXJyYXkuaWRsOyBwYXRoID0g
Y2FudmFzL1VpbnQzMkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlF
RUNEREUxMDUwM0MyNDAwMDk5RkFCIC8qIFVpbnQxNkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBVaW50MTZBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDE2QXJyYXkuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyog
SlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9h
dDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjYxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0ludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50MTZBcnJheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNVaW50OEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkIx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVaW50MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTVWludDE2QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNVaW50MTZBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZG
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVWludDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QXJyYXlCdWZmZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTND
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgy
MzgsOSArODE4MCw2IEBACiAJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25z
M0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5z
aW9uczNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTUx
MjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRB
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9
IGNhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2
RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5
IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBPRVNUZXh0dXJlRmxvYXQuY3BwOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ2MTJBODkyNjEwMERCMTcw
OSAvKiBPRVNUZXh0dXJlRmxvYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
T0VTVGV4dHVyZUZsb2F0Lmg7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ3MTJBODkyNjEwMERCMTcwOSAvKiBPRVNU
ZXh0dXJlRmxvYXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5p
ZGw7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTg5NzgsNyArODkxNyw2IEBACiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYz
OCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkVGltaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxQzJFQTUxM0ZCNEZGRjAwMDYyQUJC
IC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREIxNTRBMkFFRTAwQTkw
NDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURDMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3Jt
YW5jZVJlc291cmNlVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBl
cmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODY1MTJFREQxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTExMyw5ICs5MDUxLDYgQEAKIAkJOTAwMTc3
M0YxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBwYXRoID0gY2FudmFz
L09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMDE3ODdGMTJFMDM3
MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xh
bXBlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWlu
dDhDbGFtcGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MTA4OUQz
MDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTkxQTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRB
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gVWludDhDbGFtcGVkQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4
Q2xhbXBlZEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTExMzQyLDcgKzExMjc3LDYgQEAKIAkJQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI3NUI3ODExQzVEMUMz
MDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1
ZmZlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjk5MzVDMTdB
MURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb2xvcklucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyQ0JGN0ExNDBGMUQ1ODAwMzg3OUJF
IC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNDAyNSw4ICsxMzk1OSw2IEBACiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAv
KiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8sCi0JCQkJNDlF
RUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwgKi8sCiAJCQkJNkU0
RTkxQTcxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLywK
IAkJCQk2RTRFOTFBODEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMu
aCAqLywKIAkJCQk0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3Bw
ICovLApAQCAtMTQwNDcsOSArMTM5NzksNiBAQAogCQkJCTQ5NDg0RkJFMTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0Yy
M0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCiAJCQkJNDk0ODRGQzAxMDJDRjIzQzAw
MTg3REQzIC8qIENhbnZhc1N0eWxlLmggKi8sCi0JCQkJMkU5N0NDRTcxMjkzOUNCODAwQzVDOEZG
IC8qIERhdGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0
YVZpZXcuaCAqLywKLQkJCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRs
ICovLAogCQkJCUZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi8sCiAJCQkJ
RkI5MTM5MjExNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaWRsICovLAogCQkJCUEwMjQ1NzRF
MTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5jcHAgKi8sCkBAIC0xNDA1OCwxMSAr
MTM5ODcsNiBAQAogCQkJCTc3Mjg2OTRCMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmls
dGVyQW5pc290cm9waWMuY3BwICovLAogCQkJCTc3Mjg2OTRDMTRGODg4MjUwMEY0ODREQyAvKiBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAqLywKIAkJCQk3NzI4Njk0RDE0Rjg4ODI1MDBG
NDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbCAqLywKLQkJCQk0OUVFQ0RD
RjEwNTAzQzIzMDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmlkbCAqLywKLQkJCQk2RUJDNUQ4MDEz
OEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0RENTEwNTAz
QzIzMDAwOTlGQUIgLyogSW50MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDIxMDUwM0MyMzAw
MDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0
NyAvKiBJbnQ4QXJyYXkuaWRsICovLAogCQkJCTdFNUQ3QTczMTYxRDNGOEYwMDg5NkMzNCAvKiBP
RVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLywKIAkJCQk3RTVEN0E3NDE2MUQzRjhGMDA4OTZDMzQg
LyogT0VTRWxlbWVudEluZGV4VWludC5oICovLAogCQkJCTkwMDE3NzNEMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLywKQEAgLTE0MDc3LDEwICsxNDAwMSw2
IEBACiAJCQkJNzdBMTdBNkUxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0
LmNwcCAqLywKIAkJCQk3N0ExN0E2RjEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlP
YmplY3QuaCAqLywKIAkJCQk3N0ExN0E3MDEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJy
YXlPYmplY3QuaWRsICovLAotCQkJCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBVaW50MTZB
cnJheS5pZGwgKi8sCi0JCQkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQzMkFycmF5
LmlkbCAqLywKLQkJCQk0OUVFQ0REODEwNTAzQzIzMDAwOTlGQUIgLyogVWludDhBcnJheS5pZGwg
Ki8sCi0JCQkJOTFBMzkwNTgxNEMwRjRCOTAwRjY3OTAxIC8qIFVpbnQ4Q2xhbXBlZEFycmF5Lmlk
bCAqLywKIAkJCQlBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmgg
Ki8sCiAJCQkJQTdEMjBGM0IxMDdGMzczODAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5pZGwg
Ki8sCiAJCQkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAqLywK
QEAgLTE2NjQ1LDEwICsxNjU2NSw2IEBACiAJCUE4M0I3OTA4MENDQUZGMkIwMDBCMDgyNSAvKiBI
VE1MICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVF
Q0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCi0JCQkJNDlFRUNF
RjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKLQkJCQk0OUVFQ0YxOTEw
NTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAotCQkJCTQ5RUVDRjFB
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAogCQkJCUJFOEVGMDNF
MTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suY3BwICovLAogCQkJCUJFOEVGMDNGMTcx
QzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suaCAqLywKIAkJCQlCRThFRjA0MDE3MUM4RkY5
MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrTGlzdC5jcHAgKi8sCkBAIC0xNjY2Miw4ICsxNjU3OCw2
IEBACiAJCQkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oICovLAogCQkJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi8sCiAJCQkJNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8sCi0JCQkJMkU5N0NFNkQxMjkzQUQ2QjAwQzVD
OEZGIC8qIEpTRGF0YVZpZXcuY3BwICovLAotCQkJCTJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAv
KiBKU0RhdGFWaWV3LmggKi8sCiAJCQkJMkUwODg4RDIxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9N
Rm9ybURhdGEuY3BwICovLAogCQkJCTJFMDg4OEQzMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZv
cm1EYXRhLmggKi8sCiAJCQkJRkI5MTM5MjkxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5j
cHAgKi8sCkBAIC0xNjY3OCwxMCArMTY1OTIsNiBAQAogCQkJCTZFQkYwRTc1MTJBOTg2ODgwMERC
MTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8sCiAJCQkJNzcyODY5ODExNEZEOUFEQTAwRjQ4
NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywKIAkJCQk3NzI4Njk4
MjE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAqLywK
LQkJCQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovLAot
CQkJCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAotCQkJ
CTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8sCi0JCQkJ
NkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJQkM5
N0U0MTAxMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uY3BwICovLAogCQkJ
CUJDOTdFNDExMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmggKi8sCiAJ
CQkJMUE0QTJERUIwQTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuY3BwICov
LApAQCAtMTY4MzUsMTIgKzE2NzQ1LDYgQEAKIAkJCQlFNDQ2MTQwRjBDRDY4MjY5MDBGQURBNzUg
LyogSlNIVE1MVmlkZW9FbGVtZW50LmggKi8sCiAJCQkJQTc3OTc5MjQwRDZCOUU2NDAwMzg1MUI5
IC8qIEpTSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkgLyog
SlNJbWFnZURhdGEuaCAqLywKLQkJCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQx
NkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFy
cmF5LmggKi8sCi0JCQkJNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5j
cHAgKi8sCi0JCQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICov
LAotCQkJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi8sCi0J
CQkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi8sCiAJCQkJQ0Qy
N0Y2RTIxNDU3Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmNwcCAqLywKIAkJCQlD
RDI3RjZFMzE0NTc2NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIuaCAqLywKIAkJCQlF
NDQ2MTQxMDBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmNwcCAqLywKQEAgLTE2ODcz
LDE0ICsxNjc3Nyw2IEBACiAJCQkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJh
bmdlcy5oICovLAogCQkJCTA3ODQ2MzQwMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQu
Y3BwICovLAogCQkJCTA3ODQ2MzQxMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuaCAq
LywKLQkJCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgKi8s
Ci0JCQkJNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLywKLQkJ
CQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgKi8sCi0JCQkJ
NDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLywKLQkJCQk0OUVF
Q0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VG
QjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8sCi0JCQkJOTEwODlEMkYxNEMz
MzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovLAotCQkJCTkxMDg5RDMw
MTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMTVDNzcw
OTIxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi8sCiAJCQkJMTVDNzcw
OTExMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5oICovLAogCQkJCUJFOEVGMDQ2
MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwICovLApAQCAtMTg3ODAsNiArMTg2
NzYsOCBAQAogCQkJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwICovLAogCQkJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCAqLywKIAkJCQlCQzUzRDkxMDExNDMxMENDMDAwRDgxN0UgLyogV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oICovLAorCQkJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMDk5RDA3MTdCOTY4QTEwMEZG
ODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKIAkJCQlFMUE2NDNGQzBF
QzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJRTFB
NjQzRjEwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJ
CQlGMzQ3NDJFNjEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
ICovLApAQCAtMTg4MzUsOCArMTg3MzMsNiBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkg
LyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQlCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgKi8s
Ci0JCQkJODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmggKi8sCiAJCQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAg
Ki8sCiAJCQkJQ0RERTY5MUQxNzFERjg5MTAwQTQ0RDg5IC8qIEpTQXVkaW9CdWZmZXJDdXN0b20u
Y3BwICovLAogCQkJCUZERUFBQUVGMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQnVmZmVyU291
cmNlTm9kZUN1c3RvbS5jcHAgKi8sCkBAIC0xODg2Miw3ICsxODc1OCw2IEBACiAJCQkJQUQ3MjZG
RUExNkQ5RjQwQjAwM0E0RTZEIC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5oICovLAog
CQkJCUUxQUQxNEU3MTI5NzM3NzQwMEFDQTk4OSAvKiBKU0NTU1N0eWxlUnVsZUN1c3RvbS5jcHAg
Ki8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3Bw
ICovLAotCQkJCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNw
cCAqLywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCiAJCQkJMzFGQjFBNkIxMjBBNUQ2OTAwREMwMkEwIC8q
IEpTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwICovLAogCQkJCTU5MEUxQjRBMTFFNEVGNzAw
MDY5Rjc4NCAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwICovLApAQCAtMjEz
MjEsNyArMjEyMTYsNiBAQAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0
RE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEzMTYzNkU2MDAwOUE3
RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OUExMzE2
MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1NzMyQjBCMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTgzMCw2ICsyMTcyNCw3IEBACiAJCQkJODkzQzQ4
MEYxMjQ4QkQzQTAwMkIzRDg2IC8qIEZpbGVFbnRyeVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3NkQ2QzgzMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFREYzNjlGMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUzQ0Q3MDAwQzc0Rjkg
LyogRmlsZUljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJFMTI1MUYxMkQw
MDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4NjEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyMzksOSAr
MjIxMzQsNiBAQAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUgLyog
SlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0ExMkIwM0Y1MDAw
M0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMTEw
NTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlF
RUNGMUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAq
LywKLQkJCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1
ZGlvQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMg
LyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzAyLDcgKzIy
MTk0LDYgQEAKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8q
IEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3MDEyOTNBRDZCMDBD
NUM4RkYgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTgxMDExNDY0
NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZEQTE1RUQyMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzNzUsOCArMjIyNjYsNiBAQAogCQkJCTg5ODc4NUIz
MTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDZEQTg0NEUxMjI0QTA3MTAwNjBEMDA2IC8qIEpTRmlsZVdyaXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODkzQzQ3QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNG
bG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4
QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyN0IxNEVBQzA4
NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJEQzAx
NkI3RjM4RTAwQ0JBM0ZDIC8qIEpTRm9udExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRB
MTVFQUMxMkIwM0VFMTAwM0E1ODNBIC8qIEpTR2Fpbk5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MjI0NzcsOSArMjIzNjYsNiBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0lt
YWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc2REIxMEJGMDU5ODAwQTAyNzZFIC8q
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcxRjEwQzAw
REIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICovLAot
CQkJCTQ5RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNj
cmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMwOURBMkI0ODAwOTYz
M0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RjQ1NDMwRjdD
M0I1RjAwRDdDMUZCIC8qIEpTTGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MjI3MjksMTAgKzIyNjE1LDYgQEAKIAkJCQlFMTdCNDkyMTE2QTlCOEZGMDAxQzg4MzkgLyogSlNU
cmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzUwRDVEMEE5MERFRTEwMDBG
RjIxNSAvKiBKU1RyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUNGMDlEQTJC
NDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBEMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVF
Q0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJOTEwODlEMzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCUFBQTRGQUQyMTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJUmVx
dWVzdEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNUM3NzA5MzEwMEQzQ0E4MDA1QkEyNjcg
LyogSlNWYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRThFRjA0QjE3MUM5MDE0
MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzMyLDcgKzI0
NjE0LDYgQEAKIAkJCQk5N0JDNkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFi
YXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDExRDdGNDE2MDA2NDU1
QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NF
QTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3
MzJCMEExMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUY1NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1Mzg4LDkgKzI1MjY5LDYgQEAKIAkJCQkxQzgx
QkEwOTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVDOTEyQjAzRjUwMDAzQTU4M0EgLyogSlNBbmFs
eXNlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyNzVDQjMxMUM1RTg1
QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDlFRUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTY1REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMyRUQ2QkMwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUU5RDEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRp
b0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDcwLDggKzI1MzQ4LDYgQEAKIAkJCQkx
QUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCNTlERDY5QTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNl
U3luYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyog
SlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NGNzEyOTNBNDNBMDBDNUM4
RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEw
MTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVEMTEyQjAz
Rjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTU0Myw4
ICsyNTQxOSw2IEBACiAJCQkJODk4Nzg1RjQxMjJFMUVBQzAwM0FBQkRBIC8qIEpTRmlsZVJlYWRl
clN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk4Nzg1QjIxMjJDQTJBNzAwM0FBQkRBIC8q
IEpTRmlsZVN5c3RlbUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5M0M0N0JCMTIz
OEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0OUVFQ0YwMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjdDMTRFQUMwODYwMDkwRDc1RSAvKiBKU0Zv
Y3VzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQUIxMkIwM0VFMTAwM0E1ODNB
IC8qIEpTR2Fpbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MERBNjMwRTlDNDcwMzAw
MEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTYwMyw2ICsy
NTQ3Nyw3IEBACiAJCQkJQTYxNDhBNzgxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjEwQTFDRTYzQjAwQjQyQjI1IC8q
IEpTSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMzBBMUNF
NjNCMDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjA5OUQwODE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjI1MEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hU
TUxMSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMTAwQTE5RDYwNjAwN0ZC
OEM1IC8qIEpTSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQUQxMzlC
MTI5NUQ5MjYwMEFDQTk4OSAvKiBKU0hUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI1NjU3LDkgKzI1NTMyLDYgQEAKIAkJCQlGMzE2Mzk2RTEzMjk0ODc2MDBBNjQ5
Q0IgLyogSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Ew
RTc3MUUxMEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNjEwNTA3MEM0
MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA0
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDNUZBRUQxMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1RkFFRTcwRENGREE2ODAwRDU4Rjc4IC8qIEpTSmF2
YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlENDA5
REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MjU5NDEsMTAgKzI1ODEzLDYgQEAKIAkJCQkxQTc1MEQ1QzBBOTBERUUxMDAwRkYyMTUgLyogSlNU
cmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3
OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDAw
OURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0OUVFQ0YwQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTkxMDg5RDMzMTRDMzM2MDUwMDVBRkM0OSAvKiBKU1VpbnQ4
Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBQTRGQUQzMTc1RDVDQjMwMDc0
Mzg3MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MDk0
MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkU4RUYwNEExNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01X
cmFwcGVyV29ybGQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBDU1NW
YWx1ZTsKIGNsYXNzIEpTRE9NV3JhcHBlcjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiAKLXR5
cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTRE9NV3JhcHBlcj4gPiBET01PYmplY3RX
cmFwcGVyTWFwOwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBKU0M6OldlYWs8SlNDOjpKU09iamVj
dD4gPiBET01PYmplY3RXcmFwcGVyTWFwOwogdHlwZWRlZiBKU0M6OldlYWtHQ01hcDxTdHJpbmdJ
bXBsKiwgSlNDOjpKU1N0cmluZywgUHRySGFzaDxTdHJpbmdJbXBsKj4gPiBKU1N0cmluZ0NhY2hl
OwogCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFwcGVy
V29ybGQ+IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJy
YXlCdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0FycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGpz
Q29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2Fs
bGVlKCkpOwotCi0gICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+IDApCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7IC8vIE5hTi8raW5mLy1pbmYgcmV0dXJucyAwLCB0aGlzIGlzIGludGVuZGVkIGJ5IFdlYklE
TAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChsZW5ndGggPj0gMCkK
LSAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGVuZ3RoKSwgMSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgc2l6
ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBidWZmZXIuZ2V0KCkpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZl
clZpZXdIZWxwZXIuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyODUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKLSNkZWZpbmUgSlNBcnJh
eUJ1ZmZlclZpZXdIZWxwZXJfaAotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5j
bHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUJhc2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgY29uc3QgY2hhciogdG9vTGFyZ2VTaXplID0gIlNpemUgaXMgdG9vIGxhcmdlIChv
ciBpcyBuZWdhdGl2ZSkuIjsKLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJvb2wg
Y29weVR5cGVkQXJyYXlCdWZmZXIoQyogdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIHNvdXJjZSwg
dW5zaWduZWQgc291cmNlTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgQXJyYXlCdWZm
ZXJWaWV3OjpWaWV3VHlwZSBzb3VyY2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgQVNT
RVJUKHNvdXJjZVR5cGUgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpOwotCi0gICAg
aWYgKHRhcmdldC0+Z2V0VHlwZSgpID09IHNvdXJjZVR5cGUpIHsKLSAgICAgICAgaWYgKCF0YXJn
ZXQtPnNldChzdGF0aWNfY2FzdDxDKj4oc291cmNlKSwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0YXJn
ZXQtPmNoZWNrSW5ib3VuZERhdGEob2Zmc2V0LCBzb3VyY2VMZW5ndGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKLSAgICBjYXNlIEFycmF5QnVm
ZmVyVmlldzo6VHlwZUludDg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3Vy
Y2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShz
dGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRlbShp
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4
OgotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDhDbGFtcGVkOgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5z
aWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsg
b2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8c2lnbmVkIHNob3J0PiAqPihz
b3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJW
aWV3OjpUeXBlVWludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNl
TGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3Rh
dGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0ZW0o
aSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQz
MjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVk
QXJyYXlCYXNlPGludD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQzMjoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQo
aSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGludD4g
Kj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVm
ZmVyVmlldzo6VHlwZUZsb2F0MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
b3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChU
KShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxmbG9hdD4gKj4oc291cmNlKS0+aXRlbShpKSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0NjQ6
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFy
cmF5QmFzZTxkb3VibGU+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBDLCB0eXBlbmFtZSBUPgotYm9vbCBzZXRXZWJHTEFycmF5V2l0
aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQyogaW1wbCkKLXsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIGFycmF5VHlwZSA9IGFycmF5LT5nZXRUeXBl
KCk7Ci0gICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAgICAgIG9mZnNldCA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09iamVj
dChleGVjLT5hcmd1bWVudCgwKSktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoIShjb3B5VHlwZWRBcnJheUJ1ZmZl
cjxDLCBUPihpbXBsLCBhcnJheS5nZXQoKSwgbGVuZ3RoLCBvZmZzZXQpKSkKLSAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFu
Z2UuIikpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVu
YW1lIFQ+Ci1KU0M6OkpTVmFsdWUgc2V0V2ViR0xBcnJheUhlbHBlcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgQyogaW1wbCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAg
ICAgICAgcmV0dXJuIEpTQzo6dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7Ci0KLSAgICBpZiAoc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5QXJn
dW1lbnQ8QywgVD4oZXhlYywgaW1wbCkpCi0gICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMPD5B
cnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCku
aXNPYmplY3QoKSkgewotICAgICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5jZTxsb25nPiBhcnJh
eSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgICAgIEpTQzo6SlNP
YmplY3QqIGFycmF5ID0gSlNDOjphc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAg
IHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PT0gMikKLSAgICAgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
Yyk7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmICghaW1w
bC0+Y2hlY2tJbmJvdW5kRGF0YShvZmZzZXQsIGxlbmd0aCkpCi0gICAgICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91dCBvZiByYW5nZS4i
KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBhcnJheS0+
Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICAgICAg
ICAgICAgICBpbXBsLT5zZXQoaSArIG9mZnNldCwgdi50b051bWJlcihleGVjKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBKU0M6OnRocm93VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFy
Z3VtZW50Iik7Ci19Ci0KLS8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlDb25z
dHJ1Y3RvcnMuCi0vLyBJZiB0aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUgdGhy
b3duIGEgSmF2YVNjcmlwdCBleGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBU
PgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoVHlwZWRBcnJheUFy
Z3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IHNvdXJjZSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZp
ZXdUeXBlIHNvdXJjZVR5cGUgPSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBpZiAoc291cmNlVHlw
ZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAg
IGlmICghYXJyYXkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0g
ICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oYXJyYXkuZ2V0KCksIHNvdXJjZS5n
ZXQoKSwgbGVuZ3RoLCAwKSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGFycmF5OwotfQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5
IFhYWEFycmF5Q29uc3RydWN0b3JzLgotLy8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxy
ZWFkeSBoYXZlIHRocm93biBhIEphdmFTY3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3Mg
QywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0
aEFycmF5QnVmZmVyQXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKGV4ZWMtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBvZmZz
ZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50b1VJ
bnQzMihleGVjKSA6IDA7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50
KDIpLnRvVUludDMyKGV4ZWMpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIHNpemVvZihUKSkgewotICAgICAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMg
dGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7
Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSAoYnVm
ZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgIH0KLSAgICBSZWZQ
dHI8Qz4gYXJyYXkgPSBDOjpjcmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgaWYg
KCFhcnJheSkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8Y2xhc3Mg
QywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIFRoZXJlIGFyZSAzIGNvbnN0cnVjdG9yczoK
LSAgICAvLwotICAgIC8vICAxKSAoaW4gaW50IHNpemUpCi0gICAgLy8gIDIpIChpbiBBcnJheUJ1
ZmZlciBidWZmZXIsIFtPcHRpb25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlvbmFsXSBpbiB1bnNp
Z25lZCBpbnQgbGVuZ3RoKQotICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4pIC0gVGhpcyBlbmRz
IHVwIGJlaW5nIGEgSlMgImFycmF5LWxpa2UiIG9iamVjdAotICAgIC8vICAgIAotICAgIC8vIEZv
ciB0aGUgMCBhcmdzIGNhc2UsIGp1c3QgY3JlYXRlIGEgemVyby1sZW5ndGggdmlldy4gV2UgY291
bGQKLSAgICAvLyBjb25zaWRlciByYWlzaW5nIGEgU3ludGF4RXJyb3IgZm9yIHRoaXMgY2FzZSwg
YnV0IG5vdCBhbGwKLSAgICAvLyBKYXZhU2NyaXB0IERPTSBiaW5kaW5ncyBjYW4gZGlzdGluZ3Vp
c2ggYmV0d2VlbiAibmV3Ci0gICAgLy8gPFR5cGU+QXJyYXkoKSIgYW5kIHdoYXQgb2NjdXJzIHdo
ZW4gYSBwcmV2aW91c2x5LWNvbnN0cnVjdGVkCi0gICAgLy8gQXJyYXlCdWZmZXJWaWV3IGlzIHJl
dHVybmVkIHRvIEphdmFTY3JpcHQ7IGUuZy4sIGZyb20KLSAgICAvLyAiYXJyYXkuc3Vic2V0KCki
LgotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gQzo6
Y3JlYXRlKDApOwotICAgIAotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSkgewot
ICAgICAgICAvLyBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+YXJndW1l
bnQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICBSZWZQdHI8Qz4gdmlldyA9IGNvbnN0cnVjdEFy
cmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAgICAg
ICBpZiAodmlldykKLSAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgIAotICAgICAgICB2aWV3
ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBUPihl
eGVjKTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICByZXR1cm4gdmlldzsKLQotICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBzcmNBcnJheSA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDAp
KTsKLSAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gc3JjQXJyYXktPmdldChleGVjLCBleGVjLT52
bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIFJlZlB0
cjxDPiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICAgICAgaWYg
KCFhcnJheSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAg
ICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IHNyY0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBhcnJheS0+c2V0KGksIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBpbnQgbGVuZ3RoID0gZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBSZWZQdHI8Qz4gcmVzdWx0OwotICAgIGlmIChsZW5n
dGggPj0gMCkKLSAgICAgICAgcmVzdWx0ID0gQzo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsZW5ndGgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBKU1R5cGUsIHR5cGVuYW1lIFdlYkNvcmVUeXBlPgot
c3RhdGljIEpTQzo6SlNWYWx1ZSB0b0pTQXJyYXlCdWZmZXJWaWV3KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJDb3JlVHlwZSogb2JqZWN0
KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLQot
ICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBleGVj
LT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChvYmplY3QtPmJ5dGVMZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8SlNUeXBlPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVj
dCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEpTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9D
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTIgKzI5LDEyIEBACiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCiAKICNpbmNs
dWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJKU0F1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRl
ICJKU09mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250ZXh0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE0IEBACiAjaW5j
bHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNp
bmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJX
ZWJLaXRCbG9iQnVpbGRlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhCiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAg
ICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgcnVsZSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgcnVsZSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVy
biB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVl
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICgh
dmFsdWUtPmlzQ1NTT01TYWZlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpT
RE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCB2YWx1ZSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgdmFsdWUpOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVy
biB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTAgQEAK
ICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVm
ZmVyVmlldy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTQxLDEy
ICs0MSwxMiBAQCBKU1ZhbHVlIEpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0CiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KGV4ZWMpKTsKIAogICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAg
QXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZm
ZXIpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRvQXJy
YXlCdWZmZXJWaWV3KGJ1ZmZlcik7CiAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcpCiAgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGltcGwoKS0+Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldywgZWMpOworICAg
IGltcGwoKS0+Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldy5nZXQoKSwgZWMpOwogCiAg
ICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTUzOTUw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE1ICszMSwyMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5o
IgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGhl
YXAvU2xvdFZpc2l0b3IuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxoZWFw
L1dlYWtJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
RGF0YVZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRl
IDxydW50aW1lL0xvb2t1cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9OdWxsUHRyLmg+CkBAIC0xMjgsNiArMTM0LDE2IEBAIGNsYXNzIERPTVN0cmluZ0xp
c3Q7CiAgICAgICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3Qo
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYywgSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKICAgICB9CiAK
KyAgICBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC0+dm0oKS0+bV90
eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworICAgIH0KKyAgICAK
KyAgICBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciopCisgICAgeworICAgICAgICByZXR1cm4gd29ybGQ7CisgICAgfQor
CiAgICAgaW5saW5lIEpTRE9NV3JhcHBlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQqLCB2b2lkKikgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSBib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciosIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgaW5saW5l
IGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBK
U0RPTVdyYXBwZXIqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM5LDYgKzE1NSwxMyBAQCBjbGFz
cyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7CiAg
ICAgfQogCisgICAgaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisg
ICAgeworICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKKyAgICB9CisKICAg
ICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29y
bGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgewog
ICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTQ3LDYgKzE3MCwxNCBAQCBjbGFz
cyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpbmxp
bmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpT
Qzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIHsK
KyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNB
cnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBK
U0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1h
bCgpKQpAQCAtMTU1LDI0ICsxODYsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNET01XcmFwcGVyKiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29y
bGQsIERPTUNsYXNzKiBkb21PYmplY3QpCisgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9i
amVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKEpT
RE9NV3JhcHBlciogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9i
amVjdCkpCisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHdlYWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBl
cik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICB7CisgICAgICAgIGlm
IChKU0M6OkpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwg
ZG9tT2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4g
d29ybGQtPm1fd3JhcHBlcnMuZ2V0KGRvbU9iamVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3Mq
IGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwog
ICAgICAgICB2b2lkKiBjb250ZXh0ID0gd3JhcHBlckNvbnRleHQod29ybGQsIGRvbU9iamVjdCk7
CiAgICAgICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdy
YXBwZXIsIG93bmVyLCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlND
OjpQYXNzV2VhazxKU0RPTVdyYXBwZXI+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250ZXh0
KTsKKyAgICAgICAgSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0PiBwYXNzV2Vhayh3cmFwcGVy
LCBvd25lciwgY29udGV4dCk7CiAgICAgICAgIHdlYWtBZGQod29ybGQtPm1fd3JhcHBlcnMsICh2
b2lkKilkb21PYmplY3QsIHBhc3NXZWFrKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRE9NQ2xhc3M+IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5l
IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRv
bU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKGNsZWFy
SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE5NSw3ICsyMzQsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAg
IHsKICAgICAgICAgaWYgKCFkb21PYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQorICAgICAgICBpZiAoSlNDOjpKU09i
amVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21P
YmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBkb21PYmplY3QpOwog
ICAgIH0KQEAgLTMyMyw2ICszNjIsMjUgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAg
cmV0dXJuIG9iamVjdDsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
QXJyYXlCdWZmZXIqIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gZ2V0RXhpc3RpbmdXcmFwcGVyPEpTQzo6SlNBcnJheUJ1ZmZlcj4oZXhlYywgYnVmZmVy
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJ1ZmZlci0+cmVmKCk7Cisg
ICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwg
YnVmZmVyKTsKKyAgICAgICAgY2FjaGVXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgYnVmZmVy
LCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKKyAgICB7CisgICAg
ICAgIGlmICghdmlldykKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICByZXR1cm4gdmlldy0+d3JhcChleGVjLCBnbG9iYWxPYmplY3QpOworICAgIH0KKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0
cjxUPiBwdHIpCiAgICAgewpAQCAtMzc2LDYgKzQzNCwzMiBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogCiAgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogCisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvQXJyYXlCdWZmZXJWaWV3KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqIHdyYXBwZXIg
PSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZhbHVlKTsKKyAg
ICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biB3cmFwcGVyLT5pbXBsKCk7CisgICAgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpT
Qzo6SW50OEFycmF5PiB0b0ludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5s
aW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b0ludDE2QXJyYXkoSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9y
Pih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvSW50
MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpT
Qzo6VWludDhBcnJheT4gdG9VaW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAg
aW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VaW50OENsYW1wZWRB
cnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0
cjxKU0M6OlVpbnQxNkFycmF5PiB0b1VpbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZhbHVlKTsg
fQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyQXJyYXko
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpGbG9h
dDMyQXJyYXk+IHRvRmxvYXQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBp
bmxpbmUgUGFzc1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2
NEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RGF0
YVZpZXc+IHRvRGF0YVZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlND
OjpKU0RhdGFWaWV3KiB3cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNEYXRhVmll
dyo+KHZhbHVlKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKKyAgICB9CisKICAgICB0ZW1w
bGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM7CiAKICAgICB0ZW1wbGF0ZTw+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
YXRhVmlld0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgotCi0jaW5jbHVk
ZSAiRGF0YVZpZXcuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlclZpZXdIZWxwZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRGF0YVZp
ZXdBY2Nlc3NUeXBlIHsKLSAgICBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMiwKLSAgICBB
Y2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NAotfTsKLQotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRGF0YVZpZXcqIG9iamVj
dCkKLXsKLSAgICByZXR1cm4gd3JhcDxKU0RhdGFWaWV3PihleGVjLCBnbG9iYWxPYmplY3QsIG9i
amVjdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEYXRhVmlld0NvbnN0
cnVjdG9yOjpjb25zdHJ1Y3RKU0RhdGFWaWV3KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotCi0gICAgUmVmUHRy
PERhdGFWaWV3PiB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5QnVmZmVy
QXJndW1lbnQ8RGF0YVZpZXcsIGNoYXI+KGV4ZWMpOwotICAgIGlmICghdmlldy5nZXQoKSkgewot
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIEpTRGF0
YVZpZXdDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RhdGFWaWV3Q29uc3Ry
dWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09i
amVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCB2aWV3LmdldCgp
KSkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZSBnZXREYXRhVmlld01lbWJlcihFeGVjU3RhdGUqIGV4
ZWMsIERhdGFWaWV3KiBpbXAsIERhdGFWaWV3QWNjZXNzVHlwZSB0eXBlKQotewotICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
VUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxICYmICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3
TWVtYmVyQXNGbG9hdDMyIHx8IHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQp
KSB7Ci0gICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihl
eGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdDsKLSAg
ICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMy
OgotICAgIGNhc2UgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQ6IHsKLSAgICAgICAgZG91
YmxlIHZhbHVlID0gKHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpID8gaW1w
LT5nZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpIDogaW1wLT5nZXRGbG9h
dDY0KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotICAgICAgICByZXN1bHQgPSBzdGQ6
OmlzbmFuKHZhbHVlKSA/IGpzTmFOKCkgOiBqc051bWJlcih2YWx1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0gZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQzMihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0
PERhdGFWaWV3Kj4oaW1wbCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpOwotfQot
Ci1KU1ZhbHVlIEpTRGF0YVZpZXc6OmdldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBnZXREYXRhVmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+KGlt
cGwoKSksIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0KTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25h
cnkuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNs
dWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNpbmNsdWRlICJKU1RyYWNr
Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNWb2lkQ2Fs
bGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCBKU1ZhbHVlIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKIAogICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IGZyYW1lLT5kb2N1
bWVudCgpLT5kb21XaW5kb3coKS0+bG9jYXRpb24oKTsKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3
cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxvY2F0aW9uKSkK
KyAgICBpZiAoSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3Js
ZChleGVjKSwgbG9jYXRpb24pKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAogICAgIEpTTG9j
YXRpb24qIGpzTG9jYXRpb24gPSBKU0xvY2F0aW9uOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpT
TG9jYXRpb24+KGV4ZWMsIGdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCksIGxvY2F0aW9u
KTsKQEAgLTgzLDcgKzgzLDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAg
IEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBkb2N1bWVudCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVy
KGN1cnJlbnRXb3JsZChleGVjKSwgZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3
IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWV2
ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZXZlbnQpOworICAgIEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2
ZW50KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxl
UmVhZGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1
ZGUgIkpTRmlsZVJlYWRlci5oIgogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgotI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxl
Y3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
NyArNTksNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAg
aWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdy
YXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29s
bGVjdGlvbik7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgY29sbGVjdGlvbik7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
RGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiSlNVaW50OENsYW1wZWRBcnJheS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNDAsNyArMzksNyBAQCBK
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFpbWFnZURh
dGEpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VEYXRhKTsK
KyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBpbWFnZURhdGEpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTkgKzQ2LDExIEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkpT
RXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAi
SlNGbG9hdDY0QXJyYXkuaCIKICNpbmNsdWRlICJKU0hUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIkpTSW50MTZBcnJheS5oIgotI2lu
Y2x1ZGUgIkpTSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5LmgiCiAjaW5jbHVk
ZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkpTU3RvcmFn
ZS5oIgotI2luY2x1ZGUgIkpTVWludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQzMkFycmF5
LmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJTdG9yYWdlLmgiCiAjaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNvZGUuaD4KQEAg
LTY3LDYgKzU5LDcgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cE9iamVjdC5oPgogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VFdmVudC5oIgogCi0jaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC0zOSw2ICszOCw3IEBACiAj
aW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRo
U2VnQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFv
YmplY3QpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlmIChKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkK
KyAgICBpZiAoSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3Js
ZChleGVjKSwgb2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBzd2l0Y2gg
KG9iamVjdC0+cGF0aFNlZ1R5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmEKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsK
IAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdv
cmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hl
ZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKICAgICBpZiAod3JhcHBl
cikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAg
ICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIAotICAgIEpTRE9N
V3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB0
cmFjayk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgdHJhY2spOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE0IEBACiAjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRVhURHJhd0J1ZmZlcnMuaCIKICNpbmNs
dWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpTRmxvYXQz
MkFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkpT
SFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SlNJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCiAjaW5j
bHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXQuaCIKICNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKICNpbmNsdWRlICJK
U09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2lu
Y2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKICNpbmNs
dWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKICNpbmNsdWRlICJKU1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5oIgpAQCAtODUsMTAgKzgxLDkgQEAKICNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQz
MkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJh
eUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5j
bHVkZSAiSlNET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCkBA
IC01MCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMjcs
OSArMTI3LDEwIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKICAg
ICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0RPTUZvcm1EYXRhKHZhbCksIGVjKTsKICAgICAgICAg
ZWxzZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyOjpzX2luZm8pKQogICAgICAgICAg
ICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFsKSwgZWMpOwotICAgICAgICBlbHNlIGlm
ICh2YWwuaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8pKQotICAgICAgICAgICAg
aW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXJWaWV3KHZhbCksIGVjKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoJkpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8p
KSB7CisgICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB2aWV3ID0gdG9BcnJheUJ1
ZmZlclZpZXcodmFsKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2aWV3LmdldCgpLCBlYyk7
CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHZhbC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjUgKzMyLDEzIEBACiAjaW5jbHVkZSAiRmls
ZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAj
aW5jbHVkZSAiSlNCbG9iLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiSlNGaWxl
TGlzdC5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNGbG9hdDY0
QXJyYXkuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MTZBcnJh
eS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5Lmgi
CiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgiCi0j
aW5jbHVkZSAiSlNVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNp
bmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5Lmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNjMsMTIgKzUxLDE3IEBACiAjaW5jbHVkZSA8
cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRl
IDxydW50aW1lL09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KICNpbmNsdWRlIDxydW50aW1lL1Jl
Z0V4cE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC0xNzIyLDQ3ICsxNzE1LDYgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VgogICAgIG1fYmxvYlVSTHMuc3dhcChibG9iVVJMcyk7CiB9CiAK
LXN0YXRpYyB2b2lkIG5ldXRlclZpZXcoSlNDZWxsKiBqc1ZpZXcpCi17Ci0gICAgaWYgKCFqc1Zp
ZXcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzd2l0Y2ggKGpzVmlldy0+Y2xhc3NJbmZv
KCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0g
ICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBEYXRhVmlldywgZm9yIGV4YW1wbGUuIEFzc3VtZSB0
aGF0IHRoZXJlIGFyZSB2aWV3cyB0aGF0IHRoZQotICAgICAgICAvLyBERkcgZG9lc24ndCBjYXJl
IGFib3V0LgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAg
ICAganNDYXN0PEpTSW50OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICBqc0Nhc3Q8
SlNJbnQxNkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICBqc0Nhc3Q8SlNJbnQzMkFy
cmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4oanNW
aWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlw
ZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkq
Pihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KGpzVmll
dyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVk
QXJyYXlVaW50MzI6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4oanNWaWV3KS0+bV9z
dG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUZs
b2F0MzI6Ci0gICAgICAgIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFn
ZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0
OgotICAgICAgICBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5n
dGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25QdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpBcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXk+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1
ZmZlcnMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZl
cnMsIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlJiBjb2RlKQogewpAQCAtMTc3OSwyNiArMTczMSwx
NSBAQCBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCCiAKICAgICBIYXNo
U2V0PEpTQzo6QXJyYXlCdWZmZXIqPiB2aXNpdGVkOwogICAgIGZvciAoc2l6ZV90IGFycmF5QnVm
ZmVySW5kZXggPSAwOyBhcnJheUJ1ZmZlckluZGV4IDwgYXJyYXlCdWZmZXJzLnNpemUoKTsgYXJy
YXlCdWZmZXJJbmRleCsrKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiA+IG5ldXRlcmVkVmlld3M7Ci0KICAgICAgICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoYXJyYXlC
dWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB2aXNpdGVkLmFkZChhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0KCkp
OwogCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhd
LT50cmFuc2Zlcihjb250ZW50cy0+YXQoYXJyYXlCdWZmZXJJbmRleCksIG5ldXRlcmVkVmlld3Mp
OworICAgICAgICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+
dHJhbnNmZXIoY29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgICAgIGNvZGUgPSBWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHZp
ZXdzIG1heSBoYXZlIGJlZW4gbmV1dGVyZWQsIGJ1dCB0aGVpciB3cmFwcGVycyBhbHNvIG5lZWQg
dG8gYmUgbmV1dGVyZWQsIHRvby4KLSAgICAgICAgZm9yIChzaXplX3Qgdmlld0luZGV4ID0gbmV1
dGVyZWRWaWV3cy5zaXplKCk7IHZpZXdJbmRleC0tOykgewotICAgICAgICAgICAgQXJyYXlCdWZm
ZXJWaWV3KiB2aWV3ID0gbmV1dGVyZWRWaWV3c1t2aWV3SW5kZXhdLmdldCgpOwotICAgICAgICAg
ICAgZm9yIChzaXplX3Qgd29ybGRJbmRleCA9IHdvcmxkcy5zaXplKCk7IHdvcmxkSW5kZXgtLTsp
IHsKLSAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gd29ybGRzW3dvcmxk
SW5kZXhdLmdldCgpOwotICAgICAgICAgICAgICAgIG5ldXRlclZpZXcoZ2V0Q2FjaGVkV3JhcHBl
cih3b3JsZCwgdmlldykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiBjb250ZW50cy5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgog
I2luY2x1ZGUgIkRPTU9iamVjdEhhc2hUYWJsZU1hcC5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCkBAIC03NSw2ICs3Niw3IEBAIGlubGluZSB2b2lkIGluaXROb3JtYWxX
b3JsZENsaWVudERhdGEoSlMKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3JlSlNDbGll
bnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7CiAgICAgdm0tPmNsaWVudERhdGEgPSB3
ZWJDb3JlSlNDbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgd2Vi
Q29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRl
KHZtLCB0cnVlKTsKKyAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5l
dyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1l
L09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxoZWFwL1Bhc3NXZWFrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKQorICAgIDogbV9vd25lcigpCit7
Cit9CitXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Ojp0b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICByZXR1cm4ganNDYXN0PEpTQXJyYXlCdWZm
ZXIqPigKKyAgICAgICAgdG9KUyhleGVjLCBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpLCBuYXRpdmUpKTsKK30KKworYm9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoCisgICAg
SGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgaWYgKCFqc0FycmF5QnVmZmVyLT5oYXNDdXN0
b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBcnJheUJ1ZmZlciog
cm9vdCA9IGpzQXJyYXlCdWZmZXItPmltcGwoKTsKKyAgICByZXR1cm4gdmlzaXRvci5jb250YWlu
c09wYXF1ZVJvb3Qocm9vdCk7Cit9CisKK3ZvaWQgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
OjpKU0FycmF5QnVmZmVyT3duZXI6OmZpbmFsaXplKAorICAgIEhhbmRsZTxVbmtub3duPiBoYW5k
bGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgSlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01X
cmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4
dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzQXJyYXlCdWZmZXItPmltcGwoKSwganNB
cnJheUJ1ZmZlcik7CisgICAganNBcnJheUJ1ZmZlci0+aW1wbCgpLT5kZXJlZigpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcl9oCisjZGVmaW5lIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNs
dWRlIDxoZWFwL1dlYWsuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBKU0M6
OlR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIoKTsKKyAgICB2aXJ0dWFsIH5XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsK
KyAgICAKKyAgICB2aXJ0dWFsIEpTQzo6SlNBcnJheUJ1ZmZlciogdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7CisgICAgCisgICAg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcigpIHsgcmV0dXJuICZtX293bmVyOyB9
CisKK3ByaXZhdGU6CisgICAgY2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKKyAgICB9OworCisg
ICAgSlNBcnJheUJ1ZmZlck93bmVyIG1fb3duZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG0JKHdvcmtpbmcgY29weSkKQEAgLTE4MCwyMSArMTgwLDIyIEBAIHN1YiBGb3JB
bGxQYXJlbnRzCiAKICAgICBteSAkcmVjdXJzZTsKICAgICAkcmVjdXJzZSA9IHN1YiB7CisgICAg
ICAgIG15ICRvdXRlckludGVyZmFjZSA9IHNoaWZ0OwogICAgICAgICBteSAkY3VycmVudEludGVy
ZmFjZSA9IHNoaWZ0OwogCiAgICAgICAgIGZvciAoQHskY3VycmVudEludGVyZmFjZS0+cGFyZW50
c30pIHsKICAgICAgICAgICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJF87Ci0gICAgICAgICAgICBt
eSAkcGFyZW50SW50ZXJmYWNlID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJGludGVyZmFjZU5h
bWUpOworICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50
ZXJmYWNlKCRvdXRlckludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwogCiAgICAgICAgICAgICBp
ZiAoJGJlZm9yZVJlY3Vyc2lvbikgewogICAgICAgICAgICAgICAgICYkYmVmb3JlUmVjdXJzaW9u
KCRwYXJlbnRJbnRlcmZhY2UpIGVxICdwcnVuZScgYW5kIG5leHQ7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAmJHJlY3Vyc2UoJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgICAgICAmJHJl
Y3Vyc2UoJG91dGVySW50ZXJmYWNlLCAkcGFyZW50SW50ZXJmYWNlKTsKICAgICAgICAgICAgICYk
YWZ0ZXJSZWN1cnNpb24oJHBhcmVudEludGVyZmFjZSkgaWYgJGFmdGVyUmVjdXJzaW9uOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgICYkcmVjdXJzZSgkaW50ZXJmYWNlKTsKKyAgICAmJHJlY3Vy
c2UoJGludGVyZmFjZSwgJGludGVyZmFjZSk7CiB9CiAKIHN1YiBGaW5kU3VwZXJNZXRob2QKQEAg
LTIzOCw2ICsyMzksNyBAQCBzdWIgSURMRmlsZUZvckludGVyZmFjZQogc3ViIFBhcnNlSW50ZXJm
YWNlCiB7CiAgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRvdXRlckludGVyZmFjZSA9
IHNoaWZ0OwogICAgIG15ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CiAKICAgICByZXR1cm4gdW5k
ZWYgaWYgJGludGVyZmFjZU5hbWUgZXEgJ09iamVjdCc7CkBAIC0yNDgsNyArMjUwLDcgQEAgc3Vi
IFBhcnNlSW50ZXJmYWNlCiAKICAgICAjIFN0ZXAgIzE6IEZpbmQgdGhlIElETCBmaWxlIGFzc29j
aWF0ZWQgd2l0aCAnaW50ZXJmYWNlJwogICAgIG15ICRmaWxlbmFtZSA9ICRvYmplY3QtPklETEZp
bGVGb3JJbnRlcmZhY2UoJGludGVyZmFjZU5hbWUpCi0gICAgICAgIG9yIGRpZSgiQ291bGQgTk9U
IGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCIhXG4iKTsKKyAg
ICAgICAgb3IgZGllKCJDb3VsZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGlu
dGVyZmFjZU5hbWVcIiwgcmVhY2hhYmxlIGZyb20gXCIiIC4gJG91dGVySW50ZXJmYWNlLT5uYW1l
IC4gIlwiIVxuIik7CiAKICAgICBwcmludCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwi
JGZpbGVuYW1lXCIgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCJcbiIgaWYgJHZlcmJv
c2U7CiAKQEAgLTI3Nyw2ICsyNzksMTAgQEAgc3ViIFNraXBJbmNsdWRlSGVhZGVyCiAKICAgICAj
IFNwZWNpYWwgY2FzZTogU1ZHTnVtYmVyLmggZG9lcyBub3QgZXhpc3QuCiAgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIlNWR051bWJlciI7CisgICAgCisgICAgIyBUeXBlZCBhcnJheXMgYWxyZWFk
eSBpbmNsdWRlZCBieSBKU0RPTUJpbmRpbmcuaC4KKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5J
c1R5cGVkQXJyYXlUeXBlKCR0eXBlKTsKKyAgICAKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzY4
LDcgKzM3NCw3IEBAIHN1YiBJc1R5cGVkQXJyYXlUeXBlCiAgICAgcmV0dXJuIDEgaWYgKCgkdHlw
ZSBlcSAiQXJyYXlCdWZmZXIiKSBvciAoJHR5cGUgZXEgIkFycmF5QnVmZmVyVmlldyIpKTsKICAg
ICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJVaW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50
OENsYW1wZWRBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDE2QXJyYXkiKSBvciAoJHR5cGUgZXEg
IlVpbnQzMkFycmF5IikpOwogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkludDhBcnJheSIp
IG9yICgkdHlwZSBlcSAiSW50MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiSW50MzJBcnJheSIpKTsK
LSAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJGbG9hdDMyQXJyYXkiKSBvciAoJHR5cGUgZXEg
IkZsb2F0NjRBcnJheSIpKTsKKyAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJGbG9hdDMyQXJy
YXkiKSBvciAoJHR5cGUgZXEgIkZsb2F0NjRBcnJheSIpIG9yICgkdHlwZSBlcSAiRGF0YVZpZXci
KSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYwOSw2ICs2MTUsNyBAQCBzdWIgSXNXcmFwcGVy
VHlwZQogICAgIHJldHVybiAwIGlmICRvYmplY3QtPkdldFNlcXVlbmNlVHlwZSgkdHlwZSk7CiAg
ICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNFbnVtVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAg
aWYgJG9iamVjdC0+SXNTdHJpbmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMCBpZiAkb2JqZWN0
LT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkd2ViQ29yZVR5cGVI
YXNoeyR0eXBlfTsKICAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiYW55IjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgc3ViIEFk
ZEluY2x1ZGVzRm9yVHlwZQogICAgIG15ICRpbmNsdWRlc1JlZiA9IHNoaWZ0OwogCiAgICAgcmV0
dXJuIGlmIFNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLQorICAgIAogICAgICMgV2hlbiB3ZSdy
ZSBmaW5pc2hlZCB3aXRoIHRoZSBvbmUtZmlsZS1wZXItY2xhc3MKICAgICAjIHJlb3JnYW5pemF0
aW9uLCB3ZSB3b24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMuCiAgICAgaWYgKCR0eXBlIGVx
ICJYUGF0aE5TUmVzb2x2ZXIiKSB7CkBAIC0yMjUsOCArMjI1LDYgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
aCJ9ID0gMTsKICAgICB9IGVsc2lmICgkaXNDYWxsYmFjayAmJiAkY29kZUdlbmVyYXRvci0+SXNX
cmFwcGVyVHlwZSgkdHlwZSkpIHsKICAgICAgICAgJGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5o
In0gPSAxOwotICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0
eXBlKSkgewotICAgICAgICAkaW5jbHVkZXNSZWYtPnsiPHJ1bnRpbWUvJHt0eXBlfS5oPiJ9ID0g
MTsKICAgICB9IGVsc2UgewogICAgICAgICAjIGRlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFt
ZWQgZmlsZQogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiJHt0eXBlfS5oIn0gPSAxOwpAQCAtNjgy
LDExICs2ODAsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICBpZiAoJGhhc1Bh
cmVudCAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0In0pIHsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlU
eXBlKCRpbnRlcmZhY2VOYW1lKSkgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVu
dGltZS8kaW50ZXJmYWNlTmFtZS5oPiJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKLSAgICAgICAgfQor
ICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CiAgICAgfQog
ICAgIAogICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvSlNPYmplY3QuaD4ifSA9IDE7CkBA
IC05NjIsMjIgKzk1Niw2IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIH1cbiIpOwogICAgIH0KIAotICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZl
clZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXIiKSkgewotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJyYXlUeXBlIFR5
cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJUeXBlZEFycmF5SW50OCIpIGlmICRpbXBsVHlwZSBlcSAiSW50OEFycmF5IjsKLSAgICAg
ICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQxNiIpIGlmICRpbXBsVHlwZSBl
cSAiSW50MTZBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5
SW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIkludDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQ4IikgaWYgJGltcGxUeXBlIGVxICJVaW50OEFycmF5
IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50OENsYW1wZWQi
KSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQxNkFy
cmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50MzIiKSBp
ZiAkaW1wbFR5cGUgZXEgIlVpbnQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIlR5cGVkQXJyYXlGbG9hdDMyIikgaWYgJGltcGxUeXBlIGVxICJGbG9hdDMyQXJyYXkiOwot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0NjQiKSBpZiAkaW1w
bFR5cGUgZXEgIkZsb2F0NjRBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICI7
XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBpbnRwdHJfdCBtX3N0b3Jh
Z2VMZW5ndGg7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkKiBt
X3N0b3JhZ2U7XG4iKTsKLSAgICB9Ci0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVj
dGVkOlxuIik7CiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAi
RE9NV2luZG93IikgewpAQCAtMTg2NiwxMiArMTg0NCw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSlcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7XG4iKTsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBl
KCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGlt
cGxUeXBlIG5lICJBcnJheUJ1ZmZlciIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCYke2NsYXNzTmFtZX06OnNf
aW5mbywgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdlKSwgT0JKRUNUX09G
RlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdlTGVuZ3RoKSk7XG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3Io
aW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRhKCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxlbmd0aCA9IGltcGwoKS0+bGVuZ3RoKCk7XG4i
KTsKLSAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoaW5o
ZXJpdHMoJnNfaW5mbykpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKICAgICB9CkBAIC0yMzcxLDcgKzIzNDMsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5T
ZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMs
ICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSkgYW5kIG5vdCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkFycmF5QnVmZmVy
IikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgIm5hdGl2ZVZhbHVlLmdldCgpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRC
eSJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGltcGxl
bWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
bXBsZW1lbnRlZEJ5In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwpAQCAtMjUyMywxMyArMjQ5
OSw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRp
c0N1c3RvbSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRh
dGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic2V0IiBh
bmQgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0V2ViR0xBcnJheUhl
bHBlcjwkaW1wbFR5cGUsICR2aWV3VHlwZT4oZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbFR5cGUqIGlt
cGwgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xuIik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW1wbC0+aXNSZWFkT25seSgp
KSB7XG4iKTsKQEAgLTMwODQsNyArMzA1Myw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVj
awogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJO
b2RlRmlsdGVyIikgeworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8ICgk
Y29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXJnVHlwZSkgYW5kIG5vdCAkYXJnVHlw
ZSBlcSAiQXJyYXlCdWZmZXIiKSkgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5h
bWUuZ2V0KCkiOwogICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykg
ewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5hbWUtPnByb3BlcnR5UmVmZXJlbmNl
KCkiOwpAQCAtMzM2Niw2ICszMzM1LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICBteSAkc3Zn
TmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5
cGUpOwogICAgIHJldHVybiAiJHtzdmdOYXRpdmVUeXBlfSoiIGlmICRzdmdOYXRpdmVUeXBlOwog
ICAgIHJldHVybiAiUmVmUHRyPERPTVN0cmluZ0xpc3Q+IiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5n
TGlzdCI7CisgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlmICRjb2RlR2VuZXJhdG9yLT5J
c1R5cGVkQXJyYXlUeXBlKCR0eXBlKSBhbmQgbm90ICR0eXBlIGVxICJBcnJheUJ1ZmZlciI7CiAg
ICAgcmV0dXJuICRuYXRpdmVUeXBleyR0eXBlfSBpZiBleGlzdHMgJG5hdGl2ZVR5cGV7JHR5cGV9
OwogCiAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5
cGUpOwpAQCAtMzUwNSw2ICszNDc1LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NU3RyaW5nTGlzdC5oIiwgJGNvbmRpdGlvbmFsKTsKICAg
ICAgICAgcmV0dXJuICJ0b0RPTVN0cmluZ0xpc3QoZXhlYywgJHZhbHVlKSI7CiAgICAgfQorICAg
IAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKKyAg
ICAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOworICAgIH0KIAogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJIVE1MT3B0aW9uRWxlbWVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAi
SFRNTE9wdGlvbkVsZW1lbnQiOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFdmVudC5oIiwgJGNv
bmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZlbnQiOwpAQCAtMzU3NCw3ICszNTQ4LDcgQEAgc3Vi
IE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNT
dHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KLQorICAgIAogICAgIG15ICRnbG9iYWxPYmplY3Q7
CiAgICAgaWYgKCR0aGlzVmFsdWUpIHsKICAgICAgICAgJGdsb2JhbE9iamVjdCA9ICIkdGhpc1Zh
bHVlLT5nbG9iYWxPYmplY3QoKSI7CkBAIC0zNjE1LDE0ICszNTg5LDEyIEBAIHN1YiBOYXRpdmVU
b0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBv
ciAkdHlwZSBlcSAiYW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIiR2YWx1ZSA/
ICR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDAp
IDoganNOdWxsKCkiOworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlU
eXBlKCR0eXBlKSkgeworICAgICAgICAjIERvIG5vdGhpbmcgLSBhbGwgaGVhZGVycyBhcmUgYWxy
ZWFkeSBpbmNsdWRlZC4KICAgICB9IGVsc2UgewogICAgICAgICAjIERlZmF1bHQsIGluY2x1ZGUg
aGVhZGVyIHdpdGggc2FtZSBuYW1lLgogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlw
ZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVk
QXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50
aW1lLyR0eXBlLmg+IiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJ
bmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0
b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfQorICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9y
LT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICR2YWx1ZSBp
ZiAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpOwpAQCAtNDEwNSwzMCAr
NDA3Nyw2IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3It
PklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7Ci0gICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIn0gPSAxOwot
ICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVj
dCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PCR7Y29uc3Ry
dWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRpbnRlcmZhY2VOYW1lPiBhcnJheSA9IGNvbnN0
cnVjdEFycmF5QnVmZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwgJHZpZXdUeXBlPihleGVjKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghYXJyYXkuZ2V0KCkp
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgLy8gRXhjZXB0
aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLlxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
YXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1c
blxuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCAke2ludGVyZmFjZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1lfT4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIp
OwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgInZvaWQgJHtjbGFzc05hbWV9OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpbXBsKCktPnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZh
Y2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0
b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICAgICBteSAk
b3ZlcmxvYWRlZEluZGV4U3RyaW5nID0gIiI7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT57
b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ID4gMCkgewpA
QCAtNDIwNyw3ICs0MTU1LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2Rz
CiAKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVkQ29uc3Ry
dWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05hbWV9Q29u
c3RydWN0b3IiOwogICAgIG15ICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMDsKLSAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQi
KSB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJU
eXBlZEFycmF5IikpIHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1w
bGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewogICAgICAgICAkbGVhc3RDb25zdHJ1Y3Rvckxl
bmd0aCA9IDE7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgbXkgQGNvbnN0cnVjdG9ycyA9IEB7JGludGVyZmFj
ZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0Qmxv
YkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0
QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBA
QCB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXIqIGFyCiAgICAgYXBwZW5kQnl0
ZXNEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwog
fQogCi12b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZl
clZpZXcpCit2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IGFycmF5QnVmZmVyVmlldykKIHsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1F
bnVtZXJhdGlvbigiV2ViQ29yZS5CbG9iLmNvbnN0cnVjdG9yLkFycmF5QnVmZmVyT3JWaWV3Iiwg
QmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJWaWV3LCBCbG9iQ29uc3RydWN0b3JBcnJheUJ1ZmZl
ck9yVmlld01heCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1
aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JC
dWlsZGVyLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2Vi
S2l0QmxvYkJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVuZGlu
Zyk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgdm9pZCBhcHBlbmQoSlNDOjpBcnJheUJ1ZmZlciop
OwotICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7CisgICAgdm9pZCBhcHBl
bmQoUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4pOwogI2VuZGlmCiAKICAgICBQYXNz
UmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxD
b250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBHZW5lcmF0ZUlzUmVhY2hh
YmxlPUltcGwsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IodW5zaWduZWQgbG9uZyBsZW5ndGgpLAot
ICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDLAot
ICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKLV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyIHsK
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoOwotICAgIEFy
cmF5QnVmZmVyIHNsaWNlKGxvbmcgYmVnaW4sIG9wdGlvbmFsIGxvbmcgZW5kKTsKLX07Ci0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAko
cmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXJWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwot
ICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJbXBsZW1l
bnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyVmlldyB7Ci0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIEFycmF5QnVmZmVyIGJ1ZmZlcjsKLSAgICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0KLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQp
XTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERhdGFWaWV3
PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhf
dCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVmlldz4g
RGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQg
PiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ2hlY2tlZDx1
aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7Ci0gICAg
Q2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0
aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBj
aGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVy
Zmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQotCi1EYXRhVmlldzo6RGF0YVZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNl
dCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQotewotfQotCi1zdGF0aWMgYm9vbCBu
ZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4p
Ci0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRp
YW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEp
Ci17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19
Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBC
eXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFy
KiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBw
ICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewot
ICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0g
ICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qg
c2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0
dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAg
Y2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
VCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5
dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGly
ZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0
aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwot
ICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFk
ZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2
YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5k
YXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAg
ICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3Vs
ZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1
bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUu
ZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6
ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9i
YXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19
Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZh
bHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50
MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFW
aWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4g
Z2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lk
IERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVl
LCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRh
PHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRl
T2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNl
dEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZz
ZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWlu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9h
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAg
QXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwotfQotCi19
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFWaWV3X2gKLSNkZWZpbmUg
RGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVy
VmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50
OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVp
bnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90
IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVP
ZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3Qg
Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVp
bnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQot
ICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0
LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNl
dCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50
OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVl
LCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
LSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZz
ZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxz
ZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2
b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRU
eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi1wcml2YXRlOgotICAg
IERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5s
aW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4g
Ynl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1f
Ynl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0RhdGFWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9EYXRhVmlldy5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3Bl
LAotICAgIEN1c3RvbUNvbnN0cnVjdG9yKEFycmF5QnVmZmVyIGJ1ZmZlciwgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGgp
LAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcwotXSBpbnRlcmZh
Y2UgRGF0YVZpZXcgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIC8vIEFsbCB0aGVzZSBtZXRob2Rz
IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IHdvdWxkIHJlYWQgb3Igd3JpdGUgYmV5b25kIHRo
ZSBlbmQgb2YgdGhlIHZpZXcuCi0KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBieXRlIGdldEludDgo
dW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBvY3RldCBn
ZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBnZXRJbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVP
ZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIHNob3J0IGdldFVpbnQxNih1bnNpZ25l
ZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGxvbmcgZ2V0SW50MzIodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGdldFVp
bnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5k
aWFuKTsKLQotICAgIC8vIFVzZSBjdXN0b20gY29kZSB0byBoYW5kbGUgTmFOIGNhc2UuCi0gICAg
W0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGZsb2F0IGdldEZs
b2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVu
ZGlhbik7Ci0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9v
bGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQ4
KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgYnl0ZSB2YWx1ZSk7Ci0gICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9jdGV0IHZhbHVl
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJ
bnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBvcHRpb25hbCBib29s
ZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIHNo
b3J0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDMyKHVuc2lnbmVkIGxvbmcg
Ynl0ZU9mZnNldCwgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50MzIo
dW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbHVlLCBvcHRpb25hbCBi
b29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBmbG9hdCB2
YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci19
OwotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJB
cnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3Bl
LAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVk
U2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFi
bGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAg
ICBUeXBlZEFycmF5PWZsb2F0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBp
bnRlcmZhY2UgRmxvYXQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1
bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGZsb2F0ICh1bnNpZ25lZCBs
b25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0MzJBcnJheSBhcnJheSwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+
IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsK
LX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRB
cnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAg
R2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0
b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNH
ZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9t
VG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9ZG91
YmxlLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgRmxvYXQ2
NEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVT
X1BFUl9FTEVNRU5UID0gODsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKLSAgICBGbG9hdDY0QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBv
cHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwg
bG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGRvdWJsZSAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0K
LSAgICAvLyB2b2lkIHNldChGbG9hdDY0QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCShyZXZpc2lvbiAxNTM5NTApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURP
TVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVk
QXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVP
YmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAg
IERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaWduZWQgY2hhciwKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDhBcnJheSA6IEFycmF5
QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9
IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAg
SW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgCi0gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdl
dHRlciBieXRlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDhB
cnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQg
c2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9J
bnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9J
bnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvSW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3Jr
ZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAg
Q3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAg
SlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tD
b25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaG9ydCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVz
cGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDE2QXJyYXkgc3ViYXJy
YXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBzaG9ydCAodW5z
aWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQxNkFycmF5IGFycmF5LCBv
cHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8
bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNl
dCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRs
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFy
cmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1b
Ci0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29u
c3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0g
ICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAg
Q3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJy
YXk9aW50LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50
MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRF
U19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7Ci0gICAgSW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9u
ZyBlbmQpOwotCi0gICAgZ2V0dGVyIGxvbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAg
Ly8gdm9pZCBzZXQoSW50MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNp
Z25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJh
eSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVj
dCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9O
b3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1w
bGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OEFycmF5IDogQXJyYXlC
dWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0g
MTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBV
aW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBsb25n
IGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJh
eSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5
LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWlu
dDhDbGFtcGVkQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3Bl
LAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVk
U2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFi
bGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAg
ICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9
SlNDCi1dIGludGVyZmFjZSBVaW50OENsYW1wZWRBcnJheSA6IFVpbnQ4QXJyYXkgewotICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5IHN1
YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwg
bG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQot
ICAgIC8vIEZJWE1FOiBNaXNzaW5nIG90aGVyIHNldHRlcnMhCi0gICAgLy8gdm9pZCBzZXQoVWlu
dDhDbGFtcGVkQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAg
ICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9u
ZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvVWludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZX
b3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0g
ICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0g
ICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hl
Y2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBzaG9ydCwKLSAgICBJbXBsZW1l
bnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQxNkFycmF5IDogQXJyYXlCdWZm
ZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMjsK
LQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50
MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQs
IG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25lZCBzaG9ydCAodW5zaWdu
ZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MTZBcnJheSBhcnJheSwgb3B0
aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxv
bmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQo
KTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRs
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJB
cnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
WwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENv
bnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAot
ICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAg
IEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFy
cmF5PXVuc2lnbmVkIGludCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50
ZXJmYWNlIFVpbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1V
bmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAg
IGdldHRlciB1bnNpZ25lZCBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZv
aWQgc2V0KFVpbnQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1ZGUgIldl
YkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAKKyNpbmNs
dWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50
MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duQXJyYXlQdHIuaD4KQEAgLTM0MTUsNyArMzQxNiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBW
YWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAocGl4ZWxzLT5n
ZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgpIHsKKyAgICBpZiAocGl4ZWxz
LT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJB
cnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTUxNTYsNyArNTE1Nyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEYKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1
ZmZlclZpZXc6OlR5cGVVaW50OCkgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0g
SlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05F
RF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTE2NCwxMyArNTE2NSwxMyBAQCBib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJy
YXlCdWZmZXJWaWV3OjpUeXBlVWludDE2KSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUo
KSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBV
TlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAg
ICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQzMikg
eworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewog
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IEZsb2F0MzJBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0NyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSw3IEBA
IG5hbWVzcGFjZSB7CiAKIGJvb2wgaXNJbnRlZ2VyQXJyYXkoQXJyYXlCdWZmZXJWaWV3KiBhcnJh
eSkKIHsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHR5cGUgPSBhcnJheS0+Z2V0VHlw
ZSgpOwotICAgIHJldHVybiB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDgKLSAgICAg
ICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OAotICAgICAgICAgICB8
fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZAotICAgICAgICAgICB8
fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2Ci0gICAgICAgICAgIHx8IHR5cGUg
PT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJy
YXlCdWZmZXJWaWV3OjpUeXBlSW50MzIKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50MzI7CisgICAgcmV0dXJuIEpTQzo6aXNJbnQoYXJyYXktPmdldFR5cGUo
KSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTUzOTUw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNiBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkRhdGFWaWV3Lmgi
CiAjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbXBvcnQgIkZsb2F0Q29u
dmVyc2lvbi5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC00Nyw2ICs0Niw3IEBA
CiAjaW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8cnVu
dGltZS9EYXRhVmlldy5oPgogI2ltcG9ydCA8cnVudGltZS9VaW50MTZBcnJheS5oPgogI2ltcG9y
dCA8cnVudGltZS9VaW50MzJBcnJheS5oPgogI2ltcG9ydCA8cnVudGltZS9VaW50OEFycmF5Lmg+
CkBAIC05MjMsOCArOTIzLDggQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOgogICAgICAgICAvLyBbNCBieXRlczoga2V5VVJJIHNpemVdLCBba2V5VVJJIHNpemUgYnl0
ZXM6IGtleVVSSV0KICAgICAgICAgdW5zaWduZWQga2V5VVJJU2l6ZSA9IGtleVVSSS5sZW5ndGgo
KSAqIHNpemVvZihVQ2hhcik7CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERhdGFC
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKDQgKyBrZXlVUklTaXplLCAxKTsKLSAgICAgICAg
UmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRh
QnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAgICAgaW5pdERh
dGFWaWV3LT5zZXRVaW50MzIoMCwga2V5VVJJU2l6ZSwgdHJ1ZSwgSUdOT1JFX0VYQ0VQVElPTik7
CisgICAgICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBKU0M6OkRhdGFW
aWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpOworICAgICAgICBpbml0RGF0YVZpZXctPnNldDx1aW50MzJfdD4oMCwga2V5VVJJU2l6ZSwg
dHJ1ZSk7CiAKICAgICAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlVUklBcnJheSA9IFVpbnQx
NkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDQsIGtleVVSSS5sZW5ndGgoKSk7CiAgICAg
ICAgIGtleVVSSUFycmF5LT5zZXRSYW5nZShrZXlVUkkuY2hhcmFjdGVycygpLCBrZXlVUkkubGVu
Z3RoKCkgLyBzaXplb2YodW5zaWduZWQgY2hhciksIDApOwpAQCAtMTIwNCwxMyArMTIwNCwxMyBA
QCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IGluaXREYXRhLT5idWZmZXIoKTsKIAogICAgIC8v
IFVzZSBhIERhdGFWaWV3IHRvIHJlYWQgdWludDMyIHZhbHVlcyBmcm9tIHRoZSBidWZmZXIsIGFz
IFVpbnQzMkFycmF5IHJlcXVpcmVzIHRoZSByZWFkcyBiZSBhbGlnbmVkIG9uIDQtYnl0ZSBib3Vu
ZGFyaWVzLiAKLSAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFWaWV3Ojpj
cmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwor
ICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBKU0M6OkRhdGFWaWV3Ojpj
cmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwog
ICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Ym9vbCBzdGF0dXMgPSB0cnVlOwogCi0gICAgdWludDMyX3Qga2V5VVJJTGVuZ3RoID0gaW5pdERh
dGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBlYyk7CisgICAgdWludDMyX3Qga2V5VVJJ
TGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1
cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGtleVVSSUxlbmd0
aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBrZXlV
UklMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRl
KGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGtleVVSSUxlbmd0aCk7CkBAIC0xMjIwLDkgKzEyMjAs
OSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAga2V5VVJJ
ID0gU3RyaW5nKGtleVVSSUFycmF5LT5kYXRhKCksIGtleVVSSUxlbmd0aCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBrZXlVUklMZW5ndGg7CiAKLSAgICB1aW50MzJf
dCBrZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMp
OworICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+
KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8
IG9mZnNldCArIGtleUlETGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3Rh
dHVzIHx8IG9mZnNldCArIGtleUlETGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleUlEQXJyYXkgPSBV
aW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGtleUlETGVuZ3RoKTsK
QEAgLTEyMzIsOSArMTIzMiw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBrZXlJRCA9IFN0cmluZyhrZXlJREFycmF5LT5kYXRhKCksIGtleUlETGVuZ3Ro
IC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zmc2V0ICs9IGtleUlETGVuZ3RoOwog
Ci0gICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQz
MihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9IGlu
aXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9m
ZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBjZXJ0aWZpY2F0ZUxlbmd0aCA+IGlu
aXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBjZXJ0aWZpY2F0
ZUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgY2VydGlmaWNhdGUgPSBVaW50OEFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNl
dCwgY2VydGlmaWNhdGVMZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1
c3RvbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsOSBAQAogI2luY2x1ZGUg
IkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMzRC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgVWludDhDbGFtcGVk
QXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208594</attachid>
            <date>2013-08-12 22:56:31 -0700</date>
            <delta_ts>2013-08-12 23:25:38 -0700</delta_ts>
            <desc>i can build WebKit debug on Mac</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>640967</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyMiBA
QAorMjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQg
YWxsb2NhdGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nngg
c3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSlNDVHlwZWRBcnJh
eVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAg
KEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBl
Rm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZn
L0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAg
IChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlND
OjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6
OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNv
dW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNl
KToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURl
YWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGlu
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAg
ICogcnVudGltZS9EYXRhVmlldy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmNwcC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkRhdGFWaWV3Ojp3cmFwKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmguCisg
ICAgICAgIChKU0M6OkRhdGFWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RGF0YVZp
ZXc6OmdldFR5cGUpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6RGF0YVZpZXc6OnNldCk6CisgICAgICAgICogcnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0Zsb2F0NjRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OmRhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6
CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAg
ICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5
Vmlldzo6Ynl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6
aXRlbSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2hlY2tJbmJvdW5k
RGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0VHlwZSk6Cisg
ICAgICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjo6OkdlbmVyaWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KEpTQzo6OjpzdWJhcnJheSk6CisgICAgICAgIChKU0M6Ojo6d3JhcCk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5oOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJy
YXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50OEFycmF5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXI6OkpTQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6aW1wbCk6CisgICAgICAgIChKU0M6OnRvQXJyYXlCdWZmZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1
ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlw
ZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclBy
b3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4
dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1v
ZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6dHlw
ZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcu
aDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDOjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMy
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNHZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY1NldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNT
ZXRJbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNTZXRGbG9hdDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0
KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTRmxvYXQ2NEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6
OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVk
VmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5T
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNz
UmFuZ2VRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5
cGVkSW1wbCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjp0b05hdGl2ZVR5cGVkVmlldyk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjo6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6
Ojo6dmFsaWRhdGVSYW5nZSk6CisgICAgICAgIChKU0M6Ojo6c2V0V2l0aFNwZWNpZmljVHlwZSk6
CisgICAgICAgIChKU0M6Ojo6c2V0KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjo6OnB1dEJ5SW5kZXgpOgorICAgICAgICAo
SlNDOjo6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6Ojpjb3B5
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6OjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KToKKyAgICAgICAg
KEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXkpOgorICAgICAgICAo
SlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFy
cmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFycmF5
QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnR5cGVkQXJy
YXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQxNkFycmF5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDMy
QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4QXJyYXkuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5Lmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcik6
CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKToKKyAgICAg
ICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpJbnRlZ3Jh
bFR5cGVkQXJyYXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5
cGVkQXJyYXlBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJh
eUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRv
cjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9E
b3VibGUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b05hdGl2ZSk6Cisg
ICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChK
U0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhD
bGFtcGVkQWRhcHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5
cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6
On5UeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OmNsYXNzSW5mb0ZvclR5cGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlND
Ojp0b0luZGV4KToKKyAgICAgICAgKEpTQzo6aXNUeXBlZFZpZXcpOgorICAgICAgICAoSlNDOjpl
bGVtZW50U2l6ZSk6CisgICAgICAgIChKU0M6OmlzSW50KToKKyAgICAgICAgKEpTQzo6aXNGbG9h
dCk6CisgICAgICAgIChKU0M6OmlzU2lnbmVkKToKKyAgICAgICAgKEpTQzo6aXNDbGFtcGVkKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvVWludDE2QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQzMkFycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9VaW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9VaW50OENsYW1w
ZWRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisK
IDIwMTMtMDgtMTIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgQ29kZUJsb2NrJ3Mgbm90aW9uIG9mIGFkZGluZyBpZGVudGlmaWVycyBlbnRpcmVseQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBEYXRlQ29uc3RydWN0
b3IubHV0LmggXAogICAgIERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVycm9yUHJvdG90eXBl
Lmx1dC5oIFwKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAgICBKU09OT2JqZWN0
Lmx1dC5oIFwKICAgICBKU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1
YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5cGVkQXJyYXlTdHVic19o
Ci0jZGVmaW5lIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRlICJGbG9hdDMyQXJyYXku
aCIKLSNpbmNsdWRlICJGbG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQxNkFycmF5LmgiCi0j
aW5jbHVkZSAiSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJheS5oIgotI2luY2x1ZGUg
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCi0j
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFycmF5LmgiCi0jaW5jbHVk
ZSAiVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiVWlu
dDhDbGFtcGVkQXJyYXkuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotICAgIAotI2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0eXBlKSBcCi1jbGFzcyBK
UyMjbmFtZSMjQXJyYXkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeyBcCi1wdWJsaWM6
IFwKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7IFwKLSAgICBzdGF0aWMg
SlMjI25hbWUjI0FycmF5KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4gaW1wbCkgXAot
ICAgIHsgXAotICAgICAgICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkp
IEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOyBcCi0gICAgICAgIHJl
dHVybiBwdHI7IFwKLSAgICB9XAotXAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XAotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
O1wKLSAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlND
OjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7
XAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAotXAotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtc
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7XAotICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7XAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBK
U0M6OlR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJh
eSMjbmFtZTtcCi0gICAgdWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0
b3JhZ2U7XAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0g
ICAgSlMjI25hbWUjI0FycmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPG5hbWUjI0FycmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
O1wKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5
SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19
O1wKLVwKLWNvbnN0IENsYXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUg
IkFycmF5IiAsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25h
bWUjI0FycmF5KSB9O1wKLVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PG5hbWUjI0FycmF5PiBpbXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1
Y3R1cmUpXAotICAgICwgbV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNB
cnJheTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pO1wKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMj
QXJyYXk6OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdl
KSwgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAot
ICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlw
dG9yKTtcCi0gICAgbV9zdG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxl
bmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKLX1c
Ci1cCi1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdl
TGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVj
LCBpbmRleCkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXgg
PCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtc
Ci0gICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
O1wKLX1cCi1cCi1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAg
IHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJy
YXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAg
SlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNl
bGwpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
O1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmpl
Y3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAot
ICAgIH1cCi0gICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwK
LXtcCi0gICAgbV9pbXBsLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAot
XAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17
XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJy
YXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcCi0gICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7XAotICAgIHJldHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wK
LSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5
Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3Rv
cmFnZUxlbmd0aDsgKytpKVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSk7XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUj
I0FycmF5OjpnZXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTtcCi0gICAgdHlwZSByZXN1
bHQgPSBtX2ltcGwtPml0ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJl
c3VsdCkpXAotICAgICAgICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVz
dWx0KTtcCi19XAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlMjI25hbWUjI0FycmF5KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkudG9JbnQzMihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZy
YW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxu
YW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAg
aWYgKCFidWZmZXIpIFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNy
ZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFs
bCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShV
aW50OCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQ
RURfQVJSQVkoVWludDE2LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90
KTsKLVRZUEVEX0FSUkFZKEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZf
dCk7Ci1UWVBFRF9BUlJBWShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBm
bG9hdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5
LmgiCkBAIC0yMzgsMTYgKzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7
CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25z
dHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWlu
dDhDbGFtcGVkQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0s
ICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRD
b25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMy
QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJy
YXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0
SlNJbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAi
RmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRD
b25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0
NjRBcnJheSwgMSk7Ci0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJn
dW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGds
b2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYx
NjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMz
NDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFG
MTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAq
LzsgfTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3Bw
ICovOyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9Owor
CQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJC
NjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2
NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9Owor
CQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5j
cHAgKi87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDhDbGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FF
M0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07
CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJ
CTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1
RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUx
NEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBG
NEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJ
CTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0Uz
RTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpA
QCAtMzQ5LDcgKzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21t
b25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAq
LzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2
MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1h
Y3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyog
REZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlB
N0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVG
MzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNG
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAw
NUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQx
NkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJ
CTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBh
dGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0Yy
NzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJh
eUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmll
dy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZC
RjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRh
Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0Qx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVk
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcx
N0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBl
ZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBo
YXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0g
ZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1
NCw2ICsxMzUyLDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENh
bGxSZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQx
MTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9p
bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBYnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBG
RUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25E
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGgg
PSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VD
QjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1i
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZE
RDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkw
NTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3
QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYy
QzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYz
MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlC
MEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAv
KiBjb25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlw
dENvcmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlw
ZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2
ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8q
IEFQSSAqLywKQEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAv
KiBHQ0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJ
CUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlE
MTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEs
OCBAQAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5o
ICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAq
LywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAor
CQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYy
QjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMx
MEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBA
QAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICov
LAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3Bw
ICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2su
aCAqLywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0
dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVy
U2V0dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIu
Y3BwICovLApAQCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8q
IEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTRE
QTgxOEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2
MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5
MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2Qjkx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJC
NjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBG
MkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBG
MkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywK
IAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywK
IAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJ
CQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3
ICszMDQ4LDMyIEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUu
Y3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8s
CiAJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8s
CisJCQkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJ
CTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2
QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBG
MkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJ
OTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhG
QzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0
MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUx
NDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAx
RkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBG
NyAvKiBKU0Z1bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpT
RnVuY3Rpb25JbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZD
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
ICovLAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAg
Ki8sCiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8s
CiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFy
cmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5o
ICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAog
CQkJCTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0
QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRB
MDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJ
CQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICov
LAogCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0Lmgg
Ki8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBG
MkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICov
LAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheXMuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5m
by5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5Lmgg
Ki8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywK
KwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJ
CQlCQzIyQTM5QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJ
CQkJMTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJ
CQkxNDQyNTY1RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1
MSw2ICszMTg2LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0Lmgg
Ki8sCiAJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
Ki8sCiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICov
LAorCQkJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNt
YWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5oICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENE
MjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIw
MDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8q
IFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJh
eUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURl
c2NyaXB0b3IuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyog
VHlwZWRBcnJheUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5VHlwZS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJh
eS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rp
b24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAq
LywKQEAgLTM1MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAg
LyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4
RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0Ix
NTBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1
ZmZlcldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2
MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBF
NkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFu
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYx
NjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYw
MEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3
RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNTU1LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBD
YWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBC
MkQxQzEgLyogQ2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRC
Q0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyog
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzU2Niw2ICszNzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyog
Q29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRC
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50
aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJ
CQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9v
dHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRE
RjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYx
OThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJ
QTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdC
MEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBE
RkdDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJ
CQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEy
IC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
RTZDNEUxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjU4LDYgKzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyog
REZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
QTUzNUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0Ez
RUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5
MjFCMTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkE1ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkg
LyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBC
OENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVD
MTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3
N0IxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAw
QzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVC
OEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAw
QTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBA
CiAJCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25S
YW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgx
N0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBC
QjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdG
MTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2
MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyAr
Mzk1Miw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFy
cmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50
ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYy
OTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVB
OENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJz
TUlQUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFE
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRl
eHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBK
U0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFF
MDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUs
NiArNDAxNCw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNO
YW1lU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4
MTE1NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzg2Niw2ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpT
U2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAw
NEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlE
QjIgLyogSlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUs
NyBAQAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAz
QjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNX
aXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAv
KiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJ
CQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYw
IC8qIExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcy
IC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJE
N0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MzkyNiw2ICs0MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcx
MCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyog
TWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAog
CQkJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0
NDYwIC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0
MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBT
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZB
MDA4RTkyMjIgLyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1
NjBGMDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
MkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIg
LyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5
QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3
IEBACiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRl
TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQ
cm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAog
CQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgw
MDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3
MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQw
MjQsNiArNDE5NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRo
Q2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNt
YWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYw
IC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNE
MDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZD
MTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0u
aCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5
OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkZEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3Ry
aW5nUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAog
CQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVE
YXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2
IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBB
QUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
OTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAw
RTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkg
LyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0
IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjRE
MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9l
eHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4
ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3
MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3
RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2
NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQy
M0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5
NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJB
MTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
ODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5k
bGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8q
IEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVC
N0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAog
CQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0
MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgy
QjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIw
MEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2
REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1
RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRB
RDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NjkwLDYgKzQ4NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5
OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYx
ODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVy
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAv
KiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4
QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NzEyLDYgKzQ4OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcy
OTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUw
ODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1h
cmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBC
MDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlG
NEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2Miwx
NyArNDk0NywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1
MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4
ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1
IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZC
MTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDgwNSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyog
Vk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZN
SW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVE
OTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZv
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxl
SW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAg
cmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25l
OworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJh
eU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0lu
Zm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8t
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAg
Y2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5
cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVElu
dDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6
CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4
OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVk
OgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQx
NkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6
CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9h
dDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJy
YXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0Ogog
ICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENS
QVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlN
b2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5
VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4Owor
ICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBj
YXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBK
SVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWlu
dDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNh
c2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2Ug
SklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklU
RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRG
bG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9
CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21D
bGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU0Z1bmN0aW9uOjpz
X2luZm8pKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwogICAgIAotICAgIGlmIChjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZSkgewotICAgICAg
ICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKLSAg
ICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDE2
QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNJbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAg
ICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhD
bGFtcGVkOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKLSAgICAg
ICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZB
cnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNVaW50MzJBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAg
ICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlG
bG9hdDY0OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0QXJyYXk7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoY2xhc3NJ
bmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICByZXR1cm4gU3BlY0ludDhBcnJheTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0
dXJuIFNwZWNJbnQxNkFycmF5OworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4g
U3BlY0ludDMyQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBTcGVj
VWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBT
cGVjVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1
cm4gU3BlY1VpbnQxNkFycmF5OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJu
IFNwZWNVaW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4g
U3BlY0Zsb2F0MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
U3BlY0Zsb2F0NjRBcnJheTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBjb25zdCBjaGFyKiBhcnJheUNv
bnZlcnNpb25Ub1N0cmluZyhBcnJhCiAgICAgfQogfQogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVk
QXJyYXlUeXBlKEFycmF5OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDg7CisgICAgY2Fz
ZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDMyOworICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7CisgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVk
OworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50
MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZs
b2F0MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7Cisg
ICAgfQorfQorCiB2b2lkIEFycmF5TW9kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewogICAgIG91dC5wcmludCh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29u
dmVyc2lvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
aAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIGNvbnN0IGNoYXIqIGFy
cmF5Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25U
b1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOwogY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9u
VG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOwogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJy
YXlUeXBlKEFycmF5OjpUeXBlKTsKKwogY2xhc3MgQXJyYXlNb2RlIHsKIHB1YmxpYzoKICAgICBB
cnJheU1vZGUoKQpAQCAtMzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gQXJyYXk6OlN0cmluZzsKICAgICB9CiAgICAgCisgICAgVHlwZWRBcnJheVR5cGUg
dHlwZWRBcnJheVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvVHlwZWRBcnJh
eVR5cGUodHlwZSgpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFy
cmF5TW9kZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IG90
aGVyLnR5cGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjY3LDM3ICsyNjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQz
Ml90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9k
ZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yODczLDQ2ICsyODQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
YXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkp
CisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgx
LDM3ICsyNTgxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGlu
dDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihm
bG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0
LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlw
ZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUs
IHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0yODcyLDQ2ICsyODQ4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBl
ZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFt
cFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAg
ICAgIH0gfQogCiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDMyICs1ODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRG
aWxsKGNvbnN0IFNpCiAgICAgfQogfQogICAgIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2Rl
KQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQu
dm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZt
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogSklUQ29tcGls
ZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BS
UmVnIHRlbXBHUFIsIEFycmF5TW9kZSBhcnJheU1vZGUsIEluZGV4aW5nVHlwZSBzaGFwZSkKIHsK
ICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKQEAgLTY5NCw4ICs2NjgsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBy
ZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgCiAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0
KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC03MjcsMjIgKzY5OSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5m
bzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNl
IEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogot
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsK
LSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBl
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAog
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21w
aWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBB
U1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0
aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6
Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlm
IChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkK
KyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2ln
bmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAt
MjYzOSwxMiArMjYwNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1l
bnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAo
ZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlw
ZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVk
KHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAg
ICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3Rl
ZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVz
dWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXpl
X3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJy
YXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9k
ZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAg
IAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwog
ICAgIApAQCAtMjY3Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJs
ZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAg
ICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAg
ICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2
NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5n
cHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3Vu
ZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAg
ICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdl
clRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2
YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAg
ICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNj
cmF0Y2godGhpcyk7CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJh
eSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwg
TWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVG
YWlsZWQpOwpAQCAtMjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5n
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jl
c3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5v
ZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3Vs
YXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2Ny
aXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91
ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3Vs
dFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
CiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5
NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNT
RVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1
dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1f
aml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252
ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDks
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
dHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
U3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
ZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VS
VChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAg
ICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0
MTI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNj
cmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgpAQCAtNDE5MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkp
KTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5n
dGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
LCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVB
cml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
Tm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZv
aWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVu
dFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0g
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90
IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShO
b2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5
cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5
cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwog
ICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBF
eGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1
bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJy
YXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVk
QXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRl
eGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVk
QXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAg
ICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVRva2VuLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAg
IEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rl
ZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdD
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVy
R0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFw
JiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdo
aWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBt
X2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJH
Q0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0
aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZp
bmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNDZWxsOworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhh
dmUgYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJl
bmNlcyBmcm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhl
IG9iamVjdCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28K
Ky8vIGhhdmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJh
Y2sgaW50byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBH
Q0luY29taW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7Citw
dWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBv
aW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgp
CisgICAgeworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVs
ZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5j
b21pbmdSZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21p
bmcoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkp
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+
c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6
ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkp
OworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5k
ZXgpOworICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8g
SXQncyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2lu
Y2UgaWYgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0
aGlzIG9iamVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1Jl
ZmVyZW5jZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5z
IHRydWUgaWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwg
YW5kIGZhbHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAv
LyBhbmQgaWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBk
b24ndCB3YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0
IGNhbiByZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUg
R0MncyBsaXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAg
ICBib29sIGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1
cm4gMTsgfQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJu
ICEobV9lbmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0Fu
eUluY29taW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9v
bCBoYXNTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNW
ZWN0b3JPZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPio+KG1fZW5jb2RlZFBvaW50ZXIpOworICAg
IH0KKyAgICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwq
LgorICAgIC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEg
dmVjdG9yIG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZl
cmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBz
aW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAg
ICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBI
ZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAg
ICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAg
ICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQo
Y2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChj
ZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0
ZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNT
RVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NFUlQodGhpcy0+cmVmQ291bnQo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVCh0
aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsK
KyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNpbmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsK
KyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMt
PnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChm
aWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCkt
Pmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQor
ICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0gMikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICAgICAgbV9lbmNvZGVk
UG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAg
IHJldHVybiB0aGlzLT5zZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgSlND
ZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxzKCktPmF0KDApOworICAgIGRlbGV0ZSB2ZWN0
b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJUKGhhc1NpbmdsZXRv
bigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVCA9IHNvbWUg
c3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwgbXVzdCBzdXBwb3J0IGEgZ2NTaXplRXN0
aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBH
Q0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICAKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3IHRvIHRoaXMgc2V0LgorICAg
IGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7
CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9OworICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVBbGwoSlNDZWxsKik7CisgICAgc3Rh
dGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAgICAKKyAgICBWZWN0b3I8VCo+IG1fdmVj
dG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
IgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5j
b21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9y
W2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21p
bmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3ZlY3Rvci5h
cHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJbkJ5
dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lk
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBt
X3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRl
SW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVjdC0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2Vz
KHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYnl0ZXMgLT0g
c2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9yLmxhc3QoKTsKKyAgICAgICAg
bV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZUFsbChKU0NlbGwqKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxsKiBjZWxsKQoreworICAgIHJl
dHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNs
dWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgpA
QCAtMzU4LDYgKzM1OSwxNCBAQCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NS
ZWZQCiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQg
SGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sK
KyAgICBpZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAg
ICAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShi
dWZmZXItPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6
bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7
CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5l
bmQoKTsKQEAgLTYyMSwxNCArNjMwLDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6
OmV4dHJhU2l6ZSgpCit7CisgICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlC
dWZmZXJzLnNpemUoKTsKK30KKwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBt
X29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1v
cnlVc2FnZTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFj
ZS5zaXplKCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsK
LSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2Fw
YWNpdHkoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdl
U3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1LDYgKzc1OSwxMSBAQCB2b2lkIEhlYXA6OmNv
bGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVf
R0NfTUFSS0VEKCk7CisgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlC
dWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7
CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5z
ZXQoKS5zaXplKCkpOwpAQCAtOTI0LDEyICs5NDMsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpk
ZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVu
dERlZmVycmFsRGVwdGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+
PSAxKTsKICAgICAKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFw
OjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50
RGVmZXJyYWxEZXB0aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsy
MiwxMSBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNs
dWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRG
R0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRy
YVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVk
IGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5l
KTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91
dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9yQVdoaWxlOwogICAgICAgICBmcmllbmQgY2xh
c3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRv
cigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7Cisg
ICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3Jl
bWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5
cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKICAgICAgICAgTWFya2VkU3BhY2Ug
bV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAg
ICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsK
ICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVf
SEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJh
eUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KICAgICAgICAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRhVmlld1RhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0
ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdU
MC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRv
IHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKQEAg
LTUwMyw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBKdW1w
TGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gQ29udGlndW91c1No
YXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJh
eVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRG
bG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3Qg
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSwzNSArMTU0OSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFy
cmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMy
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9h
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2Rl
KTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CkBAIC0xNjE4LDM1
ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAg
ICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRB
cnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
MiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRp
bmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0
eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisg
ICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IApAQCAtMTY2OCw4ICsxNjIzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1K
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7Cisg
ICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVz
dCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBz
byB3aXRob3V0CiAgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUg
aW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
ZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
ZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwg
YmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09
IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAg
ICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1
bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJh
c2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkp
CisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRp
bWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogICAgIAogICAgIEp1bXAgZG9u
ZTsKLSAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlw
ZWRBcnJheSkgeworICAgIGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBj
YW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1
c3RlZEltbTMyKDApKTsKICAgICAgICAgCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
c3VsdFBheWxvYWQsIGZwUmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQog
Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsK
KyAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNl
KTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50
U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChi
YXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9h
dFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2Vz
OyAgICAKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJv
dW5kaW5nKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAg
IHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4LDggKzE3NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
bGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAg
LTE4MjEsMTEgKzE3ODIsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3Jh
dGNoKTsKICAgICAKLSAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVk
bmVzcywgc2lnbmVkbmVzcyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAg
ICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAg
ICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QgogICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogICAgIH0KICAgICAK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBl
KSkgewogICAgIGNhc2UgMToKICAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4
KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
ODUzLDggKzE4MTQsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0
QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBl
ZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkp
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAg
ICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5OCw5ICsxODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcg
dGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAg
ICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7
CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAg
Y29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxv
YXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQXJyYXlCdWZm
ZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJy
YXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
PiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVy
Q29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0
aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJy
YXlCdWZmZXJDbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBhbGxW
aWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0g
bV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNO
ZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsK
LSAgICB9CisgICAgYm9vbCBpc05ldXRlcmFibGUgPSAhbV9waW5Db3VudDsKIAotICAgIGlmIChh
bGxWaWV3c0FyZU5ldXRlcmFibGUpCisgICAgaWYgKGlzTmV1dGVyYWJsZSkKICAgICAgICAgbV9j
b250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICBtX2NvbnRlbnRz
LmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYsMzYgKzUxLDEzIEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRy
YW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJy
ZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAg
IGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0g
ICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBl
bmQoY3VycmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mSW5jb21pbmdSZWZlcmVu
Y2VzKCk7IGktLTspIHsKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFt
aWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7CisgICAg
ICAgIGlmICh2aWV3KQorICAgICAgICAgICAgdmlldy0+bmV1dGVyKCk7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmll
dyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2
VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmICht
X2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAg
IG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhB
cnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZm
ZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3
LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2Vmll
dykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZp
ZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0g
dmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0Vmll
dyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAt
MjYsMTUgKzI2LDE3IEBACiAjaWZuZGVmIEFycmF5QnVmZmVyX2gKICNkZWZpbmUgQXJyYXlCdWZm
ZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZC5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZl
cjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7
IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisgICAgCiAgICAgdm9p
ZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkg
eyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiArODgsMTMgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJs
aWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5z
aWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC05OSwxNCArMTAyLDE2IEBAIHB1YmxpYzoKICAg
ICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29u
c3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKKyAgICAKKyAgICBp
bmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0OwogCiAgICAgaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7
CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29u
c3Q7CisgICAgCisgICAgaW5saW5lIHZvaWQgcGluKCk7CisgICAgaW5saW5lIHZvaWQgdW5waW4o
KTsKIAotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92
ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5z
ZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVy
biAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQpAQCAtMTE5
LDggKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGlu
dCBpbmRleCkgY29uc3Q7CiAgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCk7CiAKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OwogICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmly
c3RWaWV3OworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5QnVmZmVyPiBtX3dyYXBwZXI7CiB9
OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmln
aHQpCkBAIC0xNTksNiArMTY3LDEyIEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZm
ZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZvaWQqPihkYXRhKSwgYnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVt
ZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6
ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9waW5Db3VudCgwKQog
ewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAtMTk0LDYgKzIwOCwx
MSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0KIAorc2l6ZV90IEFycmF5QnVmZmVyOjpnY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBzaXplb2YoQXJyYXlCdWZm
ZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlTGVuZ3RoKCkpOworfQorCiBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25z
dAogewogICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgo
ZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywyMyBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJ
bmRleChpbnQgaW5kCiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5n
dGgpOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsK
K30KKwordm9pZCBBcnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30K
Kwogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0
aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsK
LSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgot
ICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5
IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMg
YW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50
IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICAvLyBEbyBub3QgYWxs
b3cgMzEtYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgogICAgIGlmIChudW1FbGVtZW50
cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRC
eXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRC
eXRlU2l6ZSkgeworICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVu
dEJ5dGVTaXplCisgICAgICAgICAgICB8fCB0b3RhbFNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQubV9kYXRhID0gMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0
LDYgKzI4MSw2IEBAIEFycmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiB1c2luZyBKU0M6OkFycmF5QnVmZmVyOwotdXNpbmcgSlNDOjpB
cnJheUJ1ZmZlckNvbnRlbnRzOwogCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI4ICszMCwzNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotQXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgIDogbV9ieXRl
T2Zmc2V0KGJ5dGVPZmZzZXQpCi0gICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICwgbV9i
dWZmZXIoYnVmZmVyKQotICAgICwgbV9wcmV2VmlldygwKQotICAgICwgbV9uZXh0VmlldygwKQor
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRl
T2Zmc2V0KGJ5dGVPZmZzZXQpCisgICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKKyAgICAg
ICAgLCBtX2J1ZmZlcihidWZmZXIpCiB7CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8g
KHN0YXRpY19jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAw
OwotICAgIGlmIChtX2J1ZmZlcikgCi0gICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwog
fQogCiBBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcoKQogewotICAgIGlmIChtX2J1
ZmZlcikKLSAgICAgICAgbV9idWZmZXItPnJlbW92ZVZpZXcodGhpcyk7CisgICAgaWYgKCFtX2lz
TmV1dGVyYWJsZSkKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CiB9CiAKLXZvaWQgQXJyYXlC
dWZmZXJWaWV3OjpuZXV0ZXIoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUo
Ym9vbCBmbGFnKQogewotICAgIG1fYnVmZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOwor
ICAgIGlmIChmbGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9pc05ldXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGlu
KCk7CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBA
CiAjZGVmaW5lIEFycmF5QnVmZmVyVmlld19oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgot
CisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5j
bHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM2LDYxICsz
Niw1NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7Citj
bGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEV4ZWNTdGF0ZTsKKwogY2xhc3MgQXJyYXlCdWZm
ZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgs
Ci0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAg
VHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAg
ICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRh
VmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwor
ICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAw
OwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChp
c05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CisgICAg
ICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNv
bnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxl
KGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZm
ZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5n
ZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0
ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQg
YXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8v
IEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZl
ciBpcwogICAgIC8vIHdpdGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
ICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRp
YyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAg
ICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0
ZU9mZnNldCAlIHNpemVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMSwx
MSArOTUsMjggQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmll
dyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKKyAgICAKKyAgcHJvdGVj
dGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0
SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGlu
ZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5n
dGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1w
bCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQg
ZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwogCiAgICAgLy8g
SW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2
aWV3OwogICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhl
IHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
ICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0
LCB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmRO
dW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51
bUVsZW1lbnRzKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFY
IC0gYXJyYXlCeXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBt
YXhPZmZzZXQpIHsKQEAgLTExOSwxOSArMTMwLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51
bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAg
ICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQog
ICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwg
cGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVu
c2lnbmVkIG1fYnl0ZU9mZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwog
Ci1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9w
cmV2VmlldzsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFy
cmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0KQpAQCAtMTc2LDcgKzE4Myw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJv
UmFuZ2VJbXBsKHVuc2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZp
ZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVk
IGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJy
YXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5k
LCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAg
aWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGFzaEVudHJ5Owor
Y2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxlOwogCiBzdHJ1Y3QgTWV0
aG9kVGFibGUgewpAQCAtOTYsNiArOTcsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKIAogICAg
IHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5kV2FzdGVNZW1vcnkp
KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSBzbG93RG93
bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOSw2ICsxNDYsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAvLyB3YXlz
IHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaXN0LgogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJ
RVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAogICAgIG1hY3JvKEFycmF5KSBcCisgICAg
bWFjcm8oQXJyYXlCdWZmZXIpIFwKICAgICBtYWNybyhCb29sZWFuKSBcCiAgICAgbWFjcm8oRGF0
ZSkgXAogICAgIG1hY3JvKEVycm9yKSBcCkBAIC01NSw2ICs1Niw5IEBACiAgICAgbWFjcm8oYXBw
bHkpIFwKICAgICBtYWNybyhhcmd1bWVudHMpIFwKICAgICBtYWNybyhiaW5kKSBcCisgICAgbWFj
cm8oYnVmZmVyKSBcCisgICAgbWFjcm8oYnl0ZUxlbmd0aCkgXAorICAgIG1hY3JvKGJ5dGVPZmZz
ZXQpIFwKICAgICBtYWNybyhieXRlY29kZSkgXAogICAgIG1hY3JvKGJ5dGVjb2RlSW5kZXgpIFwK
ICAgICBtYWNybyhieXRlY29kZXMpIFwKQEAgLTExMiw2ICsxMTYsNyBAQAogICAgIG1hY3JvKHBy
b3BlcnR5SXNFbnVtZXJhYmxlKSBcCiAgICAgbWFjcm8ocHJvdG90eXBlKSBcCiAgICAgbWFjcm8o
c2V0KSBcCisgICAgbWFjcm8oc2xpY2UpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNy
byhzb3VyY2VDb2RlKSBcCiAgICAgbWFjcm8oc3RhY2spIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkJKGZyb20gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOjE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhVmll
dy5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordW5pb24gVmFsdWUgeworICAgIFQgZGF0YTsKKyAgICBjaGFyIGJ5
dGVzW3NpemVvZihUKV07Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwg
c2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQ
dHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIGlm
IChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVP
ZmZzZXQpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVu
Z3RoKGJ5dGVMZW5ndGgpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7CisgICAgaWYgKGNoZWNr
ZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXIt
PmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworRGF0YVZp
ZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZm
ZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKwor
c3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQ
VShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVy
biAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFy
KiBwLCBjaGFyKiBxKQoreworICAgIGNoYXIgdGVtcCA9ICpwOworICAgICpwID0gKnE7CisgICAg
KnEgPSB0ZW1wOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkK
K3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDEpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNG
b3IzMkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDMpOworICAgIHN3YXBC
eXRlcyhwICsgMSwgcCArIDIpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMo
Y2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDcpOworICAgIHN3YXBCeXRlcyhwICsg
MSwgcCArIDYpOworICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOworICAgIHN3YXBCeXRlcyhw
ICsgMywgcCArIDQpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2
YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQoreworICAgIGlmICghbmVlZFRv
RmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAo
c2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgZmxpcEJ5dGVzRm9y
NjRCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK1QgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChiZXlv
bmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2Fk
IHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFy
Y2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KKyAgICBWYWx1
ZTxUPiB2YWx1ZTsKKyAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7CisgICAgZmxpcEJ5
dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBy
ZXR1cm4gdmFsdWUuZGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgRGF0YVZp
ZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zm
c2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkg
c2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRv
bid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KKyAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Cisg
ICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKKyAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFs
dWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBtZW1jcHkoc3RhdGljX2Nh
c3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBz
aXplb2YoVCkpOworfQorCitpbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50OF90Pihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCit1aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCitpbnQxNl90IERhdGFW
aWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKworaW50MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1
aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50
MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2Zsb2F0IERhdGFWaWV3
OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2RvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVj
KTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50OF90PihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30K
Kwordm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRh
PGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9p
ZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1
aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lk
IERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQz
Ml90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0
YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDMy
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRh
Vmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8ZmxvYXQ+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpuZXV0
ZXIoKQoreworICAgIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7CisgICAgbV9ieXRlTGVuZ3Ro
ID0gMDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFW
aWV3LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzkgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAot
bmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBU
IGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
Y2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVu
Z3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVu
c2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVu
Z3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAogRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02
NiwxNzkgKzM3LDE4IEBAIERhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUK
IHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQot
ewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQot
ICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBC
eXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0g
KnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMo
Y2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBm
bGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwot
ICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNG
b3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBC
eXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3
YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRl
ZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlm
ICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHMo
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0Zv
cjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZmxp
cEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAg
IGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2Fu
dCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVy
cm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4K
LSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0g
ICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFu
KTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZv
aWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChiZXlvbmRSYW5nZTxU
PihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEg
ZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJl
cyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1w
VmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRl
ZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHko
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVl
LmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8
aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi11aW50OF90IERhdGFWaWV3Ojpn
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQx
Nl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQxNl90IERhdGFWaWV3Ojpn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQorUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZz
ZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
ZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0
PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3Ojpn
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQz
Ml90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
c2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0
RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KSk7CiB9CiAKLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitKU0Fy
cmF5QnVmZmVyVmlldyogRGF0YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgK
KyAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVEYXRh
VmlldyksIGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksCisgICAgICAgIGJ5dGVMZW5ndGgoKSk7CiB9
CiAKLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24g
MTUzNzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oOjE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFWaWV3X2gKKyNkZWZp
bmUgRGF0YVZpZXdfaAorCisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVm
ZmVyVmlldyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAg
aW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQx
Nl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQorICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludDMyX3QgZ2V0SW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5
dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDMy
X3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIHVpbnQzMl90IGdl
dFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsg
fQorICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgc2V0
SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZh
bHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
IH0KKyAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAorICAgIHZvaWQgc2V0
SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZs
b2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAg
ICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOworCitwcml2YXRlOgor
ICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
aW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1
cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+
IG1fYnl0ZUxlbmd0aDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldERh
dGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXREYXRhKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7CisKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Cit9OworCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc2ICsyNiw2NyBAQAog
I2lmbmRlZiBEYXRhVmlld19oCiAjZGVmaW5lIERhdGFWaWV3X2gKIAotI2luY2x1ZGUgPHJ1bnRp
bWUvQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5j
bHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJv
dGVjdGVkOgorICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShp
bnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWlu
dDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90
IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0g
ICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRV
aW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3Qg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQo
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ieXRlTGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFR5
cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIFR5cGVE
YXRhVmlldzsKICAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7
Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCisgICAgdmlydHVhbCBKU0Fy
cmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5z
aWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5n
dGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQorICAgIFQgZ2V0KHVuc2ln
bmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgewor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQp
ID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3Rh
dHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzKSArIG9m
ZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBU
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0
KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1
cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1
cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVu
Z3RoKCkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhf
dCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxp
dHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9CiAKK3ByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogfTsKIAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNyw4MSArMjYsOSBAQAogI2lmbmRlZiBGbG9hdDMyQXJyYXlfaAogI2RlZmluZSBGbG9h
dDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQzMkFycmF5IDog
cHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKGNvbnN0IGZsb2F0
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFR5cGVk
QXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1
ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8g
TWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNz
IFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBG
bG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKGNvbnN0IGZsb2F0KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9h
dD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxv
YXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEZsb2F0MzJB
cnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5OjpGbG9hdDMyQXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0
aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8
RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpGbG9hdDMyQXJyYXk7CiAKICNlbmRp
ZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsOTggKzEwLDI1IEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAogI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAogI2RlZmluZSBGbG9hdDY0QXJyYXlfaAogCi0jaW5j
bHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQ2NEFycmF5IDogcHVibGljIFR5cGVkQXJyYXlC
YXNlPGRvdWJsZT4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDY0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxk
b3VibGU+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46Om1f
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxkb3Vi
bGU+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGlubGluZSBGbG9hdDY0QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgCi0gICAgLy8gTWFrZSBj
b25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVk
QXJyYXlCYXNlPGRvdWJsZT47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2
NEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+
OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxG
bG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9h
dDY0QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGVVbmluaXRpYWxpemVkPEZsb2F0NjRB
cnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQ2NEFycmF5OjpGbG9hdDY0QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxkb3VibGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpzdWJh
cnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5n
dGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PEZsb2F0NjRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5OwogCiAjZW5k
aWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVm
aW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1Ymxp
YyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVyaWNUeXBlZEFycmF5Vmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4oYmFzZUFk
ZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgemVyb1JhbmdlKHVuc2lnbmVk
IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiB6ZXJvUmFuZ2VJ
bXBsKG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwgbGVuZ3RoICogc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB6ZXJv
RmlsbCgpIHsgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
dmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBsZW5ndGgoKSAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICB9CisKKyAg
ICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHRoaXMt
Pmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHRoaXMtPmxl
bmd0aCgpKTsKKyAgICAgICAgZGF0YSgpW2luZGV4XSA9IEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGVja0luYm91bmREYXRhKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiAob2Zmc2V0IDw9IGxlbmd0aAorICAgICAg
ICAgICAgJiYgb2Zmc2V0ICsgcG9zIDw9IGxlbmd0aAorICAgICAgICAgICAgLy8gY2hlY2sgb3Zl
cmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA+PSBvZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gc3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJy
YXlUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnR5
cGVWYWx1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9s
ZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
KyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3KAor
ICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNl
dCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4gR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgs
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0ZShs
ZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBw
YXNzZWRCdWZmZXI7CisgICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQor
eworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJyYXlCdWZmZXI6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Cit7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zm
c2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIHRoaXMtPmxlbmd0aCgpLCAmb2Zmc2V0LCAmbGVuZ3Ro
KTsKKyAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlcigp
LCBieXRlT2Zmc2V0KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyKCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTQXJyYXlCdWZmZXJWaWV3KiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OndyYXAo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBBZGFwdG9yOjpKU1ZpZXdUeXBlOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShBZGFwdG9yOjp0eXBlVmFsdWUp
LCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNs
YXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVj
dHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0
aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1Ymxp
Y0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhX
b3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50
eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIq
IGJ1ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3Rh
dGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkp
IC0gMTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90
IHB1YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRo
ZSBhcnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcg
dGhlIHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAg
dWludDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3Bl
cnR5IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRo
aXMsIGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAg
c3RydWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBidWZmZXI7CisgICAgICAgIH0gdHlw
ZWRBcnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc3ICsyNiw5IEBACiAjaWZuZGVm
IEludDhBcnJheV9oCiAjZGVmaW5lIEludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhB
cnJheT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAgICB1c2lu
ZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50OEFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1QYXNzUmVm
UHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29uc3QgaW50
OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDhBcnJheT4obGVuZ3Ro
KTsKLX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50OEFycmF5PihzdGFydCwgZW5k
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAog
dXNpbmcgSlNDOjpJbnQ4QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNiw3NyArMjYsOSBAQAogI2lmbmRlZiBJbnQxNkFycmF5X2gKICNkZWZpbmUgSW50MTZB
cnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50MTZBcnJheSA6IHB1Ymxp
YyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQx
Nl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNl
ZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0g
ICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0
aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBU
eXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Vmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDE2
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MTZBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBj
bGFzcyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJh
eT4gSW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQxNl90KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQx
Nl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJh
eTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQxNkFycmF5
PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKIAogdXNpbmcgSlNDOjpJbnQxNkFycmF5OwogCiAjZW5kaWYgLy8gSW50MTZBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMy
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjcsNzQgKzI2LDkgQEAKICNpZm5kZWYgSW50MzJBcnJheV9oCiAj
ZGVmaW5lIEludDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50
Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGlubGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJs
ZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ+Owot
fTsKLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJB
cnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5Ojpj
cmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+
IEludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDMyQXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkp
OwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDMyQXJy
YXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBJbnQzMkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFz
ZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKwor
SlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9
CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIp
Cit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAg
SlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0
cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVj
dHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsKK30KKworYm9vbCBKU0FycmF5QnVm
ZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09i
amVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRl
TGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpT
QXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5p
c1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkg
YnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJy
YXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9i
amVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
KyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAg
ICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgYXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZl
ciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAg
IAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2
YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlCdWZmZXIq
IHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB3cmFw
cGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlmICghd3Jh
cHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5jdGlvbiIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1
cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5
QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+
KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAgSlNBcnJh
eUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52
bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCks
IGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQor
CitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAg
ICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICBy
ZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERh
dGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiRXJy
b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11c3QgYmUgYW4g
YXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50
MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2UoYmVn
aW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgp
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3Vs
dCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG5ld0J1ZmZl
cik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitjb25z
dCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0geworICAgICJBcnJh
eUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGU6
OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgRG9udEVudW0sIDIp
OworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpj
cmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAg
ICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+
ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9IHsKKyAgICAi
QXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsCisgICAgSW5p
dGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZh
c3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1l
bnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXpl
LCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFz
dFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAobW9kZSA9
PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNp
emUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFzV29yZHNbaV0g
PSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5
IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5n
dGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0aCAqIGVsZW1l
bnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5n
SGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVy
KGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRl
KHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNv
bnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRl
cmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3Ro
KGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNl
IEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVk
QXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICB2bS5o
ZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJy
YXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+
dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
dGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5
Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAorICAgICAgICAgICAgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVy
dHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJy
YXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAg
ICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVP
ZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBl
ZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAg
IGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICBm
YXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJh
eUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdv
IHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJh
bWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUg
IkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVu
IGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAg
IHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8v
IFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRl
ciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBt
dWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBs
YXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFu
dGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcg
YSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBub3cuCisvLwor
Ly8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5
IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxlLCBkZXNwaXRl
IGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKworLy8gVHlwZWQg
YXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhl
eSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVx
dWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQg
bmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNt
YWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0
b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFy
cmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2
aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJn
ZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAor
ICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBj
b3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3Ig
YWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlw
ZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0
aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8g
ZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQg
YXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVy
CisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZl
IGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRz
IGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2Nh
dGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAg
ICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVk
QXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBp
dCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmll
dyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5n
IG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHku
IFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRo
ZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBp
bXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291
bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9
IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxl
bWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xh
c3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0g
SW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07CisgICAgICAg
IAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3Ry
dWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6
YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCog
dmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVj
dG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUg
bV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25D
b250ZXh0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBi
dWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhl
IGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7Cisg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigp
OworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3
LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUo
KS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVy
KiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVy
KCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgp
LT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWdu
ZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0g
V2FzdGVmdWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVk
QXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5k
YXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihkZWx0YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBk
ZWx0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1
IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlC
dWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0Fy
cmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYg
KzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhl
Y1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9i
amVjdDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVk
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2Vu
ZGlmCiAgICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5
U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmll
dyopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFW
aWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3
KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0
JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyog
SlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2
ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7
CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0
ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZp
ZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZp
ZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0Rh
dGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2ln
bmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOwor
fQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
dW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gSlNEYXRhVmlldzo6
dHlwZWRJbXBsKCkKK3sKKyAgICByZXR1cm4gRGF0YVZpZXc6OmNyZWF0ZShidWZmZXIoKSwgYnl0
ZU9mZnNldCgpLCBsZW5ndGgoKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRGF0YVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBz
bG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNE
YXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCksIERvbnRFbnVtIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6Z2V0VHlw
ZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3OjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNk
ZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3
IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJy
YXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXpl
ID0gMTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9u
Q29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUo
CisgICAgICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxseSB3b3JrOyB0aGVz
ZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0ZSBzcGVj
aWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxEYXRh
Vmlldz4gdHlwZWRJbXBsKCk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVEYXRhVmlldzsKKworcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnko
SlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXdQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmll
dy5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6
c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4
ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZp
ZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmgKK0BiZWdpbiBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBnZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY1NldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorQGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3Rv
dHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQoreworfQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0RhdGFWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlw
ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PigKKyAgICAgICAgZXhl
YywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3Rv
dHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wg
SlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwK
KyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0
YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0
ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUqPihvYmpl
Y3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcq
PihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERh
dGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKHRoZSBieXRl
T2Zmc2V0KS4iKSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBi
b29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGxp
dHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0g
ZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAg
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3Io
KSkgKyBieXRlT2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBzZXRE
YXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHlu
YW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFW
aWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7
CisgICAgCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0
IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZh
bHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAg
IGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBi
b3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7Cisg
ICAgCisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1
ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dl
dEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0
RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
c2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0
RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
aW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9o
CisjZGVmaW5lIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0
dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKKyAgICAgICAgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3
UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9h
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNG
bG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRmxvYXQ2NEFycmF5X2gKKyNkZWZpbmUgSlNG
bG9hdDY0QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAor
I2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlz
IG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBm
cm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJh
eSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8g
ICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIg
ICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQz
Ml90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2Ug
dXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBp
dCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0
b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBt
b2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRh
dGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwg
b3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50
cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nl
c3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhl
cgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVu
Z3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBU
aGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0
aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7
IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90
IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYg
aW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAg
dHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9O
YXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOwor
Ly8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAg
ICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJs
ZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZN
JiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVV
bmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBl
PiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1
Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmll
d1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNp
emVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0K
KyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsK
KyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVk
IGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRo
ZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9v
bCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
IDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZ2V0
SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlB
c05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUo
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAg
ICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
c2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSBqc1Zh
bHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0
b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2ts
eVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3RoCisg
ICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAgIC8v
IGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zmc2V0
OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYgaXQg
cmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBleGNl
cHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
c2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUo
RXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24g
ZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJv
d24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IHR5cGVkSW1wbCgpCisgICAgeworICAgICAgICByZXR1
cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5n
dGgoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlU
eXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0
ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhl
YXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBp
biB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpT
QXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK2lubGluZSBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZp
ZXdUeXBlPiB0b05hdGl2ZVR5cGVkVmlldyhKU1ZhbHVlIHZhbHVlKQoreworICAgIHR5cGVuYW1l
IEFkYXB0b3I6OkpTVmlld1R5cGUqIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PHR5cGVuYW1lIEFk
YXB0b3I6OkpTVmlld1R5cGUqPih2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBl
IGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXNfaAorI2RlZmlu
ZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisKKyNpbmNsdWRl
ICJFcnJvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
T2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMyksIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBj
b25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAg
ICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKEpT
QXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhl
Yy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
anNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChl
eGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4
ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAg
ICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6
ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVP
ZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAg
ICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNz
OjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3
ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5
LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4g
aW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFu
ZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1
bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikg
eworICAgICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7
CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVV
bmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHQtPnNldChleGVjLCBvYmplY3QsIG9mZnNldCwg
bGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgfQorICAgIAorICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUu
IikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywg
c3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
Q29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVy
aWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9z
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwq
LCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0g
Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENh
bGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmll
dy5oIgorI2luY2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwg
Q29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXAp
KQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsK
KyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAg
ICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSwKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dDo6RG9udEluaXRpYWxpemUp
OworICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pihl
eGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52
bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJS
YW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkp
IHsKKyAgICAgICAgdGhyb3dFcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
KyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3Vs
dCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0
aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNl
dCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwg
c3RydWN0dXJlLCBpbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFuZ2UoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
ZiAoY2FuQWNjZXNzUmFuZ2VRdWlja2x5KG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRz
IikpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnNldFdpdGhTcGVjaWZpY1R5cGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBP
dGhlclR5cGUqIG90aGVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICAvLyBIYW5kbGUgdGhlIGhpbGFyaW91cyBjYXNlOiB0aGUgYWN0IG9mIGdldHRpbmcgdGhlIGxl
bmd0aCBjb3VsZCBoYXZlIHJlc3VsdGVkCisgICAgLy8gaW4gbmV1dGVyaW5nLiBXZWxsLCBuby4g
VGhhdCdsbCBuZXZlciBoYXBwZW4gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUKKyAgICAvLyBzaWRl
LWVmZmVjdHMgb24gZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgdHlwZWQgYXJyYXkuIEJ1dCBwcmVk
aWN0aW5nIHdoZXJlIHRoZXJlCisgICAgLy8gYXJlLCBvciBhcmVuJ3QsIHNpZGUtZWZmZWN0cyBp
cyBhIGZvb2wncyBnYW1lIHNvIHdlIHJlc29ydCB0byB0aGlzIGNoZWFwCisgICAgLy8gY2hlY2su
IFdvcnN0IGNhc2UsIGlmIHdlJ3JlIHdyb25nLCBwZW9wbGUgc3RhcnQgc2VlaW5nIGxlc3MgdGhp
bmdzIGdldCBjb3BpZWQKKyAgICAvLyBidXQgd2Ugd29uJ3QgaGF2ZSBhIHNlY3VyaXR5IHZ1bG5l
cmFiaWxpdHkuCisgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkp
OworICAgIAorICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXItPmxlbmd0aCgpICE9IGxl
bmd0aCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
Ikxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVu
Z3RoOyBpLS07KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdl
dEluZGV4UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNpID0gb2Jq
ZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBB
ZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2Ug
Y2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxl
bmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZz
ZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBtZW1jcHkodHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVkVmVjdG9yKCksIG90
aGVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50
ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50
OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDE2Ogor
ICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQxNkFy
cmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDMyOgorICAg
ICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5
Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4o
b2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhDbGFt
cGVkQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWludDE2
OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50
MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQz
MkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0
MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9h
dDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5n
ZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9u
J3QuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFzZXRJbmRleFF1aWNrbHkoZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5n
ZXQoZXhlYywgaSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blBy
b3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVj
dC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3Qt
Pmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHko
aW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVh
cnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3Bl
cnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZv
eCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAg
ICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFy
cmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRv
IGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5
TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghdGhpc09i
amVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5
SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5E
RVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAg
ICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5
LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUg
YmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gY2Vs
bC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAg
CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9sZW5ndGg7
ICsraSkKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIo
aSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3Zv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwp
OworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0
VHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBl
ZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+
Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBP
dmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVz
YWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5Vmlz
aXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KKyAg
ICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcikp
IHsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAg
ICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlz
T2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdW
ZWN0b3I7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNP
YmplY3QsIHZpc2l0b3IsIHRva2VuKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRo
aXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2
ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNv
IGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRy
aWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlz
IGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9j
YXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2lu
ZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBn
ZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNh
c2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRv
bid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUu
IFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAg
ICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNs
b3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1v
cnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisg
ICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJt
YXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3Nl
IGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVh
cCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdD
KCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVy
KCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYg
IXRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkgeworICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxs
IHBvc3NpYmxlLgorICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0
dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSwgKmhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLAorICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAg
IGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAg
ICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIg
ZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMg
Y2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAg
ICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3Ro
KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJy
YXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigp
LT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
ID0gYnVmZmVyLT5kYXRhKCk7CisgICAgdGhpc09iamVjdC0+bV9tb2RlID0gV2FzdGVmdWxUeXBl
ZEFycmF5OworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUlt
cGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVf
aAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKyNk
ZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUg
YSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgSlNP
YmplY3QqIHNvdXJjZUFycmF5ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXNvdXJjZUFycmF5KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJl
IGFuIG9iamVjdC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
b3VyY2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdGhpc09iamVj
dC0+c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAg
Vmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50
aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEg
dHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMy
X3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW5kID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gR2V0IHRoZSBsZW5ndGgg
aGVyZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBkaWRuJ3QgY2hhbmdlLgorICAgIHVu
c2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBI
YW5kbGUgbmVnYXRpdmUgaW5kaWNlczogLXggPT4gbGVuZ3RoIC0geAorICAgIGlmIChiZWdpbiA8
IDApCisgICAgICAgIGJlZ2luID0gdGhpc0xlbmd0aCAtIGJlZ2luOworICAgIGlmIChlbmQgPCAw
KQorICAgICAgICBlbmQgPSB0aGlzTGVuZ3RoIC0gZW5kOworICAgIAorICAgIC8vIENsYW1wIHRo
ZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LgorICAgIEFTU0VSVChiZWdpbiA+
PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAgIGJlZ2luID0gc3RkOjptaW4oYmVnaW4s
IHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICBlbmQgPSBzdGQ6Om1pbihl
bmQsIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICAKKyAgICAvLyBDbGFt
cCBlbmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisg
ICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47CisgICAgCisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0Vf
QVNTRVJUKGxlbmd0aCA9PSB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFy
cmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAg
ICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICBleGVjLCBz
dHJ1Y3R1cmUsIGFycmF5QnVmZmVyLAorICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkg
KyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBWaWV3
Q2xhc3M6OmVsZW1lbnRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIAorICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgCisgICAgSlNDX05B
VElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9G
VU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY1N1YmFycmF5PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0Ns
YXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0
ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorU3Ry
dWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNDYWxsYmFja09iamVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAi
TGVnYWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNj
ZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhp
cywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJv
dG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5k
ZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBt
X2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1f
YXJyYXlCdWZmZXJQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpT
SW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQz
MkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50
OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
VWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90
b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0
KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0
YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNJbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNJbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTVWludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBl
LmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVG
bG9hdDY0KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlRGF0YVZpZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZp
ZXc6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0
cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmpl
Y3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5NYXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERv
bnRFbnVtKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IgPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7
CisgICAgRml4ZWRBcnJheTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZ
X1RZUEVTPiB0eXBlZEFycmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRo
aXMsIEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZSh0aGlzLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAg
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMy
QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0g
PSBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUu
Z2V0KCksICJVaW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xh
bXBlZEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50
MTYpXSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnBy
b3RvdHlwZS5nZXQoKSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9y
c1t0b0luZGV4KFR5cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHRoaXMsIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJG
bG9hdDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZs
b2F0NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0
NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2
NCldLnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAK
KyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJy
YXlJbmRleCA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07
KSB7CisgICAgICAgIG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBE
b250RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhd
LT5uYW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBE
b250RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNb
XSA9IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5O
YU4sIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVk
ZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7
CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAg
ICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJheURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IHByb3RvdHlwZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0
dXJlOworICAgIH07CisgICAgCisgICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVS
X09GX1RZUEVEX0FSUkFZX1RZUEVTPiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lk
KiBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50
ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVi
bGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJl
LmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIGFycmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgp
OyB9CisgICAgCisgICAgU3RydWN0dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlU
eXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0lu
ZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9p
bnRlckZvcihTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNJbnQ4QXJyYXlfaAorI2RlZmluZSBKU0ludDhBcnJheV9oCisKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50MTZBcnJheV9oCisjZGVmaW5lIEpT
SW50MTZBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U0ludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMy
QXJyYXlfaAorI2RlZmluZSBKU0ludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisg
ICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7IkZ1bmN0aW9uIiwgJkpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6QmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0Vf
U19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZP
KEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxv
YXQ2NEFycmF5KTsKK01BS0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpTVHlw
ZWRBcnJheUNvbnN0cnVjdG9yc19oCisKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlDb25zdHJ1Y3RvcjsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+
IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OEFycmF5PiBKU1Vp
bnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MTZB
cnJheT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rv
cjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJB
cnJheT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0RhdGFW
aWV3PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisg
ICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19pbmZv
ID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjUHJvdG90eXBlKX0KKworTUFLRV9TX0lORk8oSW50
OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJBcnJh
eSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZEFy
cmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFycmF5
KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJyYXkp
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19o
CisjZGVmaW5lIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlPEpTSW50OEFycmF5PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5
cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJh
eT4gSlNJbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNV
aW50OENsYW1wZWRBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50
MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJy
YXlQcm90b3R5cGU7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFy
cmF5UHJvdG90eXBlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUgIkNv
cHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19J
TkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGV4dGVybiBjb25zdCBDbGFzc0luZm8gSlMjI3R5
cGUjI0FycmF5OjpzX2luZm8gPSB7IFwKKyAgICAgICAgI3R5cGUgIkFycmF5IiwgJkpTIyN0eXBl
IyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBcCisgICAgICAgIENSRUFURV9NRVRIT0RfVEFC
TEUoSlMjI3R5cGUjI0FycmF5KSBcCisgICAgfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0Vf
U19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsK
K01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9T
X0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2
NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5c19oCisKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFw
dG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQz
MkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpT
VWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVk
QWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7
CisKK3RlbXBsYXRlPD4gSlNfRVhQT1JUREFUQSBleHRlcm4gY29uc3QgQ2xhc3NJbmZvIEpTSW50
OEFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENs
YXNzSW5mbyBKU0ludDE2QXJyYXk6OnNfaW5mbzsKK3RlbXBsYXRlPD4gSlNfRVhQT1JUREFUQSBl
eHRlcm4gY29uc3QgQ2xhc3NJbmZvIEpTSW50MzJBcnJheTo6c19pbmZvOwordGVtcGxhdGU8PiBK
U19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBDbGFzc0luZm8gSlNVaW50OEFycmF5OjpzX2luZm87
Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU1VpbnQ4
Q2xhbXBlZEFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNv
bnN0IENsYXNzSW5mbyBKU1VpbnQxNkFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9S
VERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU1VpbnQzMkFycmF5OjpzX2luZm87Cit0ZW1w
bGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU0Zsb2F0MzJBcnJh
eTo6c19pbmZvOwordGVtcGxhdGU8PiBKU19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBDbGFzc0lu
Zm8gSlNGbG9hdDY0QXJyYXk6OnNfaW5mbzsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU1R5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNVaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhDbGFtcGVkQXJy
YXlfaAorI2RlZmluZSBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNVaW50
MTZBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1Vp
bnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50
MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25zX2gKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZm
ZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVj
dHVyZSgpLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJh
eUJ1ZmZlcj4ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRp
b25zaGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEph
dmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlz
IHdoYXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0
eSBzaW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRo
ZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlC
dWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVl
biBjcmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAg
b25lLgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFy
cmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIo
KTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAg
IHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IEFycmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTMgKzIz
MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhp
bmdUeXBlKCkpOworICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpCisgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihj
b25zdCBKU0NlbGwqKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRl
cihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKQEAgLTEwNCw2ICsxMDUsMTcgQEAgaW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uYwogICAgICAgICB2bSwgdWlkLCBhdHRyaWJ1
dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwogfQogCitpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAg
ICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpLT5tb2RlKCkgPT0gV2FzdGVm
dWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0
dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9iamVjdCgp
ID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRB
cnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlw
ZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFs
dWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBU
eXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBl
ZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRp
dmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+
KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBU
eXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50
MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBq
c051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBl
bmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5
VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAg
dHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsK
KyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRp
YyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0
aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2
ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVl
IHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNO
dW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1
ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRv
cjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVp
bnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJB
ZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7
Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhD
bGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9y
PiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0
b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFk
YXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0
NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNs
YXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWlu
dDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+
IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwg
VHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07
CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90
LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4
QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwg
SlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJy
YXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVV
aW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0
b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07
CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwg
RmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0
IFVpbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5
cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xh
bXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9O
YXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUp
IHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUg
PiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4
X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAg
ICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNs
YW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051
bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1
aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
VHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBK
U0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2NsYXNzIFR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNvbnRyb2xsZXI+IHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAg
CisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlE
ZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNj
cmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlND
IHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlw
ZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAot
ICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50
MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0K
LXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3Io
KQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDAp
Ci0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJy
YXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9m
ZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0lu
Zm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwg
bV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xh
c3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNp
emVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3Mgewot
ICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBU
eXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3Vu
ZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVz
Y3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlJbmxpbmVzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUlubGluZXNfaAorCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgiCisjaW5jbHVkZSAiR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisKKyNlbmRp
ZiAvLyBUeXBlZEFycmF5SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNs
dWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiAmSlNJbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQ4QXJyYXk6OnNfaW5mbzsKKyAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiAmSlNVaW50OENsYW1wZWRB
cnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gJkpTSW50
MTZBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuICZK
U1VpbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVy
biAmSlNJbnQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gJkpTVWludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAg
ICAgICByZXR1cm4gJkpTRmxvYXQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQ2
NDoKKyAgICAgICAgcmV0dXJuICZKU0Zsb2F0NjRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlw
ZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gJkpTRGF0YVZpZXc6OnNfaW5mbzsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6Cisg
ICAgICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4Ogor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlRmxvYXQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVf
aAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dHJ1Y3QgQ2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFy
cmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVk
LAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBU
eXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVE
YXRhVmlldworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVMgVHlwZURh
dGFWaWV3CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9CisKK2lubGlu
ZSBib29sIGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJyYXlUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBUeXBl
RmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlw
ZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50
MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zs
b2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9y
PiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+
IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+
IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRB
ZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAg
QEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkg
QEAKICNpZm5kZWYgVWludDhBcnJheV9oCiAjZGVmaW5lIFVpbnQ4QXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWlu
dDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Ojpz
ZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAgICB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVj
dG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJh
c2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50
OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50
OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1VaW50
OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlND
OjpVaW50OEFycmF5OwogCiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyNSBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpZm5k
ZWYgVWludDhDbGFtcGVkQXJyYXlfaAogI2RlZmluZSBVaW50OENsYW1wZWRBcnJheV9oCiAKLSNp
bmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDogcHVibGljIFVpbnQ4QXJy
YXkgewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBJdCdzIG9u
bHkgbmVlZGVkIHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGFycmF5Ci0g
ICAgLy8gd2FzIGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVmYXVsdCBpbml0aWFsaXph
dGlvbiBwYXRocwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCi0gICAgaW5saW5l
IHZvaWQgemVyb0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Ojpz
ZXQ7Ci0gICAgaW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpOwot
Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1wZWRBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmll
bmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1w
ZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4
Q2xhbXBlZEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVVbmlu
aXRpYWxpemVkPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi12b2lkIFVpbnQ4Q2xh
bXBlZEFycmF5Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsKLX0K
LQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFs
dWUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAgICAgdmFsdWUgPSAwOwot
ICAgIGVsc2UgaWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9IDI1NTsKLSAgICBkYXRh
KClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKLX0KLQotVWlu
dDhDbGFtcGVkQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBVaW50OEFy
cmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhDbGFt
cGVkQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5OwogCiAjZW5k
aWYgLy8gVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBA
CiAjaWZuZGVmIFVpbnQxNkFycmF5X2gKICNkZWZpbmUgVWludDE2QXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJy
YXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBp
cyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCBy
ZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGlu
ZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWlu
dDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBV
aW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoY29uc3QgdWludDE2X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
VWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5OjpVaW50MTZBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQxNkFycmF5Owog
CiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBA
CiAjaWZuZGVmIFVpbnQzMkFycmF5X2gKICNkZWZpbmUgVWludDMyQXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJy
YXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBp
cyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCBy
ZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGlu
ZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQzMl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWlu
dDMyX3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50MzJfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBV
aW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgdWludDMyX3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
VWludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQzMkFycmF5OjpVaW50MzJBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8VWludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQzMkFycmF5Owog
CiAjZW5kaWYgLy8gVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJQ
YXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRp
b24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCkBAIC04Nyw2ICs4OCw3IEBAIGV4dGVy
biBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclQKIGV4dGVybiBjb25zdCBIYXNoVGFi
bGUgYXJyYXlQcm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblBy
b3RvdHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7CitleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGRhdGFWaWV3VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRh
dGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiBl
eHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0xNDUsNiArMTQ3
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgYXJy
YXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0
b3JUYWJsZSkpCiAgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihK
U0M6OmFycmF5UHJvdG90eXBlVGFibGUpKQogICAgICwgYm9vbGVhblByb3RvdHlwZVRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpCisgICAgLCBkYXRh
Vmlld1RhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGFWaWV3VGFibGUpKQogICAgICwg
ZGF0ZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkpCiAgICAgLCBkYXRl
Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSkpCiAgICAgLCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6
OmVycm9yUHJvdG90eXBlVGFibGUpKQpAQCAtMjU4LDYgKzI2MSwxMCBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAg
ICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlm
CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNz
ZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRo
aXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkBAIC0yODksNiArMjk2LDcgQEAg
Vk06On5WTSgpCiAgICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBh
cnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYm9vbGVhblByb3RvdHlw
ZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGRhdGFWaWV3VGFibGUtPmRlbGV0ZVRhYmxlKCk7
CiAgICAgZGF0ZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVDb25zdHJ1Y3RvclRhYmxl
LT5kZWxldGVUYWJsZSgpOwogICAgIGVycm9yUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CkBAIC0zMDYsNiArMzE0LDcgQEAgVk06On5WTSgpCiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpOworICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRhVmlld1RhYmxlKSk7CiAgICAgZmFz
dERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkpOwogICAgIGZhc3REZWxl
dGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlQ29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihlcnJvclByb3RvdHlwZVRhYmxlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2F0
Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CkBAIC02OSwxMyArNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBDb2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3Mg
RXhlY1N0YXRlOwotICAgIGNsYXNzIEZsb2F0MzJBcnJheTsKLSAgICBjbGFzcyBGbG9hdDY0QXJy
YXk7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwot
ICAgIGNsYXNzIEludDhBcnJheTsKLSAgICBjbGFzcyBJbnQxNkFycmF5OwotICAgIGNsYXNzIElu
dDMyQXJyYXk7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC05MywxMCArODgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVnRXhwOwogI2VuZGlm
Ci0gICAgY2xhc3MgVWludDhBcnJheTsKLSAgICBjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLSAg
ICBjbGFzcyBVaW50MTZBcnJheTsKLSAgICBjbGFzcyBVaW50MzJBcnJheTsKICAgICBjbGFzcyBV
bmxpbmtlZENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CiAgICAg
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0yMzAsNiArMjIxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRh
YmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25z
dCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0
ZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwog
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0zOTAsNiAr
MzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5h
YmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5
dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90
eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7
CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkBAIC00
MjgsNTUgKzQyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGhhdmVFbm91Z2hO
ZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hD
b25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9CiAgICAgICAgIHZvaWQg
cmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3RyaW5nc1NpbmNlTGFz
dEhhc2hDb25zID0gMDsgfQogCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHR5
cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVyVHlwZWRBcnJheURl
c2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgICAgQVNTRVJU
KCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1fIyN0eXBlIyNBcnJh
eURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAg
ICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOyBcCi0gICAg
ICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwK
LSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiB0eXBlIyNB
cnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3I7IH0KLQotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFy
cmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAgICByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0
aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
Ci0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJh
eURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50
ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50
MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgot
ICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDhB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
OwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgICAgIHJl
dHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAg
ICAgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkgfHwgZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsKQEAgLTUxMCwxNiAr
NDU0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3Bl
cnR5OwogICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICAgICAgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlw
dG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUg
cmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIC0gQWRkZWQgdGhlIG5vdGlvbiBvZiBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVj
dCB0aGF0IGNhbiBiZSBtYXJrZWQgRGVmZXJyZWQsCisgICAgICAgICAgd2hpY2ggaXMgbGlrZSBh
IHNwZWNpYWwtcHVycG9zZSB1cHJlZi4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgYSBjb21t
b24gYnl0ZSBmbGlwcGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OnJlZik6CisgICAgICAgIChXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZTo6aGFzT25lUmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJy
YWJsZVJlZkNvdW50ZWRCYXNlOjpyZWZDb3VudCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVS
ZWZDb3VudGVkQmFzZTo6aXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZD
b3VudGVkQmFzZTo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAg
ICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAo
V1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OnNldElzRGVmZXJyZWRCYXNlKToKKyAgICAg
ICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OmRlcmVmKToKKyAgICAgICAgKFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWQ6OnNldElzRGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJh
YmxlUmVmQ291bnRlZDo6RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZDo6fkRlZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKiB3dGYv
RmxpcEJ5dGVzLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbik6CisgICAgICAgIChXVEY6OmZsaXBCeXRlcyk6CisKIDIwMTMtMDgtMTIgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBpc01haW5U
aHJlYWQgaW1wbGVtZW50YXRpb24gd2l0aCBVU0UoV0VCX1RIUkVBRCkKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBE
ODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2Nr
LmggKi87IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CisJ
CTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAv
KiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1Bv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOEYyQjkx
MTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8q
IENvbXBpbGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuY3BwICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkx
NjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhG
MkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEwMDQxMjNGRiAvKiBE
ZWNpbWFsTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0MTIzRkYgLyogRGVj
aW1hbE51bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNvZGVy
LmggKi8sCisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3Vu
dGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8sCiAJ
CQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQlB
OEE0NzI4MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oICovLApAQCAtNjQ4
LDYgKzY1Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0
cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0
cmVhbS5oICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBGaXhlZEFycmF5Lmgg
Ki8sCisJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovLAogCQkJ
CUE4QTQ3MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJCQkJQThBNDcyQTcx
NTFBODI1QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFEOEI5RDE3MzE4Nzk4
MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5NCw2ICsxMDAwLDcg
QEAKIAkJCQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZGIC8qIE93bkFycmF5
UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZDMTUxQTgyNUIw
MDQxMjNGRiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZEMTUxQTgyNUIw
MDQxMjNGRiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUx
QTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1
Nyw2ICsxMDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5
Q2hhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyog
VGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJh
YmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50
IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVy
cmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0
aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIs
IGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhh
cHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8g
c29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFz
cyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBk
ZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1l
bnQgPSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1f
cmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09u
ZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50
ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9y
ZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsK
KyAgICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRG
bGFnOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVm
Q291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFi
bGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9p
ZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElz
RGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZEJh
c2UodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJs
ZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRf
aAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zs
aXBCeXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNk
ZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9v
bCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRs
ZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKwor
aW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
KCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4
KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUg
JiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4
KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1
aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUg
JiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAw
MDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAw
MDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAw
MDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkg
Pj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1Nik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAo
c2l6ZW9mKHZhbHVlKSA9PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVv
Zih2YWx1ZSkgPT0gMikgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFs
OworICAgICAgICAgICAgdWludDE2X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9y
aWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAg
ICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0g
NCkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAg
ICAgdWludDMyX3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFs
dWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4g
dS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkgeworICAgICAg
ICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDY0X3Qg
d29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAg
IHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4oVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCit7CisgICAgaWYgKG5lZWRUb0ZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybiBmbGlwQnl0
ZXModmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZs
aXBCeXRlczsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47CisKKyNlbmRpZiAv
LyBGbGlwQnl0ZXNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTM5NzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjYgQEAKKzIw
MTMtMDgtMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBl
ZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVHlwZWQgYXJyYXlzIGFyZSBub3cgaW1wbGVtZW50ZWQgaW4g
SmF2YVNjcmlwdENvcmUsIGFuZCBXZWJDb3JlIGlzIG1lcmVseSBhCisgICAgICAgIGNsaWVudCBv
ZiB0aGVtLiBUaGVyZSBpcyBvbmx5IG9uZSBsYXllcmluZyB2aW9sYXRpb246IFdlYkNvcmUgaW5z
dGFsbHMgYQorICAgICAgICBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgb24gVk0sIHdoaWNo
IG1ha2VzIHRoZQorICAgICAgICBBcnJheUJ1ZmZlcjwtPkpTQXJyYXlCdWZmZXIgcmVsYXRpb25z
aGlwIHJlc2VtYmxlIERPTSB3cmFwcGVycy4gQnkgZGVmYXVsdCwKKyAgICAgICAgSlNDIG1ha2Vz
IHRoZSBvd25lcnNoaXAgZ28gb25lIHdheTsgdGhlIEpTQXJyYXlCdWZmZXIga2VlcHMgdGhlIEFy
cmF5QnVmZmVyCisgICAgICAgIGFsaXZlIGJ1dCBpZiBBcnJheUJ1ZmZlciBpcyBrZXB0IGFsaXZl
IGZyb20gbmF0aXZlIGNvZGUgdGhlbiB0aGUKKyAgICAgICAgSlNBcnJheUJ5ZmZlciBtYXkgZGll
LiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgd2lsbCBrZWVwIHRoZQorICAgICAgICBKU0Fy
cmF5QnVmZmVyIGFsaXZlIGlmIHRoZSBBcnJheUJ1ZmZlciBpcyBpbiB0aGUgb3BhcXVlIHJvb3Qg
c2V0LgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBub24tSlNET01XcmFwcGVycyBiZWhhdmUg
bGlrZSBET00gd3JhcHBlcnMsIGEgYnVuY2ggb2YgY29kZSBpcworICAgICAgICBjaGFuZ2VkIHRv
IG1ha2UgbW9zdCByZWZlcmVuY2VzIHRvIHdyYXBwZXJzIHJlZmVyIHRvIEpTT2JqZWN0KiByYXRo
ZXIgdGhhbgorICAgICAgICBKU0RPTVdyYXBwZXIqLgorICAgICAgICAKKyAgICAgICAgQXJyYXkg
YnVmZmVyIHZpZXdzIGFyZSBubyB0cmFuc2llbnQ7IHRoZSBKUyBhcnJheSBidWZmZXIgdmlldyB3
cmFwcGVycworICAgICAgICBkb24ndCBvd24gdGhlbSBvciBrZWVwIHRoZW0gYWxpdmUuIFRoaXMg
cmVxdWlyZWQgYSBidW5jaCBvZiBjaGFuZ2VzIHRvIG1ha2UKKyAgICAgICAgYmluZGluZ3MgY29k
ZSB1c2UgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdG8gaG9sZCBvbnRvIHRoZWlyIHZpZXdzLgor
ICAgICAgICAKKyAgICAgICAgQWxzbyB0aGVyZSBpcyBhIGJ1bmNoIG9mIG5ldyBjb2RlIHRvIG1h
a2UgSlNDLXByb3ZpZGVkIGFycmF5IGJ1ZmZlcnMgYW5kCisgICAgICAgIHZpZXdzIG9iZXkgdGhl
IHRvSlMvdG88Q2xhc3NOYW1lPiBpZGlvbSBmb3Igd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcuCisg
ICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGUgRGF0YVZpZXcgQVBJIGlzIG5vdyBjb21wbGV0
ZWx5IGRpZmZlcmVudDogdGhlIEpTRGF0YVZpZXcKKyAgICAgICAgcHJvdmlkZXMgdGhlIHNhbWUg
dXNlci12aXNpYmxlIEpTIEFQSSBidXQgdXNpbmcgaXRzIG93biBpbnRlcm5hbCBtYWdpYzsgdGhl
CisgICAgICAgIEMrKyBjb2RlIHRoYXQgdXNlcyBEYXRhVmlldyBub3cgdXNlcyBhIHJhdGhlciBk
aWZmZXJlbnQgQVBJIHRoYXQgaXMgbm90CisgICAgICAgIGF3YXJlIG9mIHVzdWFsIERPTSBzZW1h
bnRpY3MsIHNpbmNlIGl0J3MgaW4gSlNDIGFuZCBub3QgV2ViQ29yZS4gSXQncworICAgICAgICBl
cXVhbGx5IHVzZWZ1bCBmb3IgYWxsIG9mIFdlYkNvcmUncyBwdXJwb3NlcywgYnV0IHNvbWUgY29k
ZSBoYWQgdG8gY2hhbmdlCisgICAgICAgIHRvIGFkYXB0IHRoZSBuZXcgY29udmVudGlvbnMuCisg
ICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZp
b3IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3Lmg6IEFkZGVkLgorICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg6
IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlu
bGluZXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBl
ZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJP
d25lcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldElubGlu
ZUNhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp0b0lu
dDhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2QXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9JbnQzMkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVWludDhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1VpbnQ4Q2xhbXBlZEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OnRvVWludDE2QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50MzJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0Zsb2F0MzJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Zsb2F0
NjRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0RhdGFWaWV3KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9K
Uyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20u
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURh
dGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXROb3JtYWxXb3JsZENsaWVudERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OndyYXBwZXJPd25lcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAoRm9yQWxsUGFyZW50cyk6CisgICAgICAgIChQ
YXJzZUludGVyZmFjZSk6CisgICAgICAgIChTa2lwSW5jbHVkZUhlYWRlcik6CisgICAgICAgIChJ
c1R5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKElzV3JhcHBlclR5cGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNG
b3JUeXBlKToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAg
ICAoR2V0TmF0aXZlVHlwZSk6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAo
TmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
KToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAg
KiBmaWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JC
dWlsZGVyOjphcHBlbmQpOgorICAgICAgICAqIGZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGw6IFJlbW92ZWQuCisgICAgICAg
ICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9EYXRhVmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
RGF0YVZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9EYXRhVmlldy5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0ludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDE2QXJy
YXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEpOgorICAg
ICAgICAqIHBhZ2UvQ3J5cHRvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxk
V2FpdEZvckxvYWRpbmdPZlJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmV4dHJhY3RLZXlVUklLZXlJREFuZENlcnRpZmljYXRl
RnJvbUluaXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3Vz
dG9tRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETS5jcHA6CisKIDIwMTMtMDgtMTIg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0
cy9zZWN1cml0eS9zYW5kYm94ZWQtaWZyYW1lLWludmFsaWQuaHRtbCBpcyBmbGFreSBvbiBNYWMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTUzOTUwKQorKysg
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzgy
LDMxICszODIsMTkgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvaHRtbC9UaW1l
UmFuZ2VzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZhbGlkaXR5U3RhdGUuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvVm9pZENhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXJWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgXAotICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0RPTVBhdGguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVERyYXdC
dWZmZXJzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9JbnQ4QXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJ
bmRleFVpbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVy
aXZhdGl2ZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9h
dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvVWludDhBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWlu
dDhDbGFtcGVkQXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMu
aWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw2
IEBAIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNVJhbmdlRVAKIF9fWk43V2ViQ29y
ZTEyZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU180S1VSTEVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyZ2NDb250cm9sbGVyRXYKIF9fWk43V2ViQ29y
ZTEyaWNvbkRhdGFiYXNlRXYKLV9fWk43V2ViQ29yZTEydG9VaW50OEFycmF5RU4zSlNDN0pTVmFs
dWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmplY3RFdgogX19aTjdXZWJD
b3JlMTNBWE9iamVjdENhY2hlMThyb290T2JqZWN0Rm9yRnJhbWVFUE5TXzVGcmFtZUUKIF9fWk43
V2ViQ29yZTEzQVhPYmplY3RDYWNoZTIxZ0FjY2Vzc2liaWxpdHlFbmFibGVkRQpAQCAtMjg4LDcg
KzI4Nyw2IEBAIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1MKIF9fWk43
V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEzbGlz
dERpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0VTM18KIF9fWk43V2ViQ29yZTEzcG9pbnRlckN1cnNv
ckV2Ci1fX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZmZXJFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2Vi
Q29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dl
YkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVk
UmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAgLTkw
Nyw3ICs5MDUsNiBAQCBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9fWk43V2ViQ29yZTRQYXRoRDFF
dgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29y
ZTRjb3JlRVAyOE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLV9fWk43V2ViQ29yZTR0b0pT
RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TMF8xMUFycmF5QnVm
ZmVyRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2Jh
bE9iamVjdEVQTlNfMTBDbGllbnRSZWN0RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTNET01TdHJpbmdMaXN0RQogX19aTjdX
ZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
MTRDbGllbnRSZWN0TGlzdEUKQEAgLTI3NDMsNyArMjc0MCw2IEBAIF9fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDE2cmV0dXJuVG8KIF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQx
MmlzRnVsbHNjcmVlbkV2CiBfX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMzYWRkRWRkCiBfX1pON1dl
YkNvcmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVlRQotX19aTjdXZWJDb3JlMTR0b0Zsb2F0
MzJBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0
ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBUaW1lUmFuZ2VzRQogX19aTks3V2ViQ29y
ZTEwVGltZVJhbmdlczduZWFyZXN0RWQKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfRGF0YVZp
ZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRGF0YVZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9G
V0RfSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZmZXIuaD4KKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2Vi
Q29yZV9GV0RfSlNEYXRhVmlld19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTRGF0YVZpZXdfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGF0YVZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0pTVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJh
eXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYg
V2ViQ29yZV9GV0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9U
eXBlZEFycmF5Q29udHJvbGxlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlw
ZWRBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYg
V2ViQ29yZV9GV0RfVHlwZWRBcnJheUlubGluZXNzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlw
ZWRBcnJheUlubGluZXNzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19o
CisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxMiBAQAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2Vy
X2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEZsb2F0MzJBcnJheTsKLWNsYXNzIFVp
bnQ4QXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9CdXM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsOCBAQAogCQkw
QzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNTEwQ0RC
QkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CiAJCTBDNDUz
NDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4
NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OwogCQkwRjA5MDg3RjE0NDRG
REIyMDAwMjg5MTcgLyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9s
bGJhclRoZW1lLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8q
IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rp
b25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovOyB9Owog
CQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgw
MDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyB9OwogCQkwRjEzMTY0MDE2RUQwQ0RF
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxh
dGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04MjgsMTEgKzgzMCw2IEBACiAJCTJFNzU4
NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1ODQxQzEyNzc5QURBMDA2
MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovOyB9OwogCQkyRTk0RjQzQjExOTIw
N0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVS
ZWFkZXIuY3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVh
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0
RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07Ci0JCTJFOTdDQ0VB
MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZp
ZXcuY3BwICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U4MTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9OwotCQkyRTk3Q0NGNzEyOTNBNDNBMDBD
NUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmll
d0N1c3RvbS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFW
aWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
OTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NF
NzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3Jp
cHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQuaCAqLzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhh
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsK
IAkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJDRDExMjFGMDNF
MzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OwpAQCAtMTI4OCw4ICsxMjg1
LDYgQEAKIAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjM3NjBCMTVDNkM2ODQw
MDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNw
cCAqLzsgfTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07Ci0JCTQ5QzdCOTk1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuY3BwICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovOyB9OwogCQk0OUM3Qjk5NzEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVm
ZmVyLmggKi87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3Jh
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovOyB9OwpAQCAtMTM1
MCwyMiArMTM0NSw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVDRUI2RjE0OTk3OTBEMDBD
REQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3Bl
cmF0aW9ucy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVDRjAwMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi87IH07Ci0JCTQ5RUVD
RjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNGbG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICov
OyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY2MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNTEwNTA3MEM0
MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5
LmggKi87IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjgx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjA3MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2
QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJh
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
Q0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
VWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZDMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMEIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFy
cmF5LmggKi87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
ICovOyB9OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFB
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBAIC0xODI3LDggKzE4MDYsNiBAQAogCQk2
RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovOyB9OwogCQk2RTY3RDJBNzEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJ
NkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07Ci0JCTZFQkM1RUIwMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBF
NDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CiAJCTZFQkYw
RTQ5MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ2MTJBODkyNjEwMERCMTcwOSAv
KiBPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNTQxMkE4OTI5ODAwREIxNzA5IC8q
IFdlYkdMRXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFQkYwRTUyMTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAg
Ki87IH07CkBAIC0yNTg5LDcgKzI1NjYsNiBAQAogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzgg
LyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50
Lm1tICovOyB9OwogCQk4NjFDMkVBNDEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICovOyB9Owog
CQk4NjFDMkVBNjEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUE1MTNGQjRG
RkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovOyB9OwotCQk4NjI0M0QwMTEx
QkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjQzRDAwMTFCQzMxRjcwMENDMDA2
QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovOyB9OwogCQk4NjUxMkVERTE1NEEyQUVG
MDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYg
LyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgKi87IH07CiAJCTg2NTEyRURGMTU0QTJB
RUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYg
LyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovOyB9OwogCQk4NkJBNzY2RTE2NjQyN0E4
MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJBNzY2RDE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVM
b2FkUmVxdWVzdC5jcHAgKi87IH07CkBAIC0yNzAzLDggKzI2NzksNiBAQAogCQk5MDAxNzc0MTEy
RTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYy
IC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKIAkJOTAwMTc4ODAxMkUwMzcwNzAw
NjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyog
SlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLzsgfTsKIAkJOTAwMTc4ODExMkUwMzcwNzAw
NjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpT
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwotCQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZD
NDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFt
cGVkQXJyYXkuaCAqLzsgfTsKLQkJOTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3Bw
ICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4
MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBD
N0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDY1NSw3ICs0NjI5
LDYgQEAKIAkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMy
NzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovOyB9
OwogCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0
QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovOyB9
OwogCQlCQzI3NUI3OTExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi87IH07Ci0JCUJDMjc1
Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1Q0IyMTFDNUU4NUMwMEM5
MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyOTkzNUQxN0ExREQ1
ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklu
cHV0VHlwZS5jcHAgKi87IH07CiAJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdM
Q29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICov
OyB9OwogCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3
QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi87IH07CkBAIC02
NDgwLDYgKzY0NTMsOCBAQAogCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlm
b3JtTG9jYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0
aW9uLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAv
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxh
dGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZv
cm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBs
YXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzEzNCwxMiArNzEwOSw2IEBACiAJ
CTJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaDsg
cGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVJlYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAv
KiBKU0ZpbGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxl
UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U3MTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBEYXRhVmlldy5jcHA7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YVZpZXcuaDsgcGF0aCA9IGNh
bnZhcy9EYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFOTEy
OTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERh
dGFWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXdDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0U2RDEyOTNBRDZCMDBD
NUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NF
NkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5o
OyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJj
ZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iUmVz
b3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMTEy
MUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzY1NCw4ICs3NjIzLDYgQEAKIAkJNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFE
IC8qIEFycmF5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJ
bnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQ4QXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFByb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY2OSw3ICs3
NjM2LDYgQEAKIAkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQnVmZmVyLmNwcDsgcGF0
aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5
RDQ0NyAvKiBXZWJHTEJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xCdWZm
ZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQ4QXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBRTEwNDJEMzJFMDAw
OUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUYxMDQyRDMy
RTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QjAxMDQyRDMyRTAwMDlE
NDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdM
RnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzcyNSwzMCArNzY5MSw2IEBACiAJCTQ5RUNFQjY0
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNFQjY2MTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDOTEwNTAzQzIz
MDAwOTlGQUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBB
cnJheUJ1ZmZlclZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBB
cnJheUJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXIuaWRsOyBw
YXRoID0gY2FudmFzL0FycmF5QnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRmxvYXQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDMyQXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REMjEwNTAzQzIzMDAw
OTlGQUIgLyogSW50MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MzJBcnJh
eS5pZGw7IHBhdGggPSBjYW52YXMvSW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQxNkFycmF5LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQxNkFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDgxMDUwM0MyMzAw
MDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWludDMyQXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50
MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERFMTA1MDND
MjQwMDA5OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWlu
dDE2QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYzMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjQx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0lu
dDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQz
MkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjcxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNF
RjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDhBcnJh
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZDMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTVWludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDE2QXJy
YXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjE5
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVy
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAw
OTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjM4LDkgKzgxODAs
NiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5H
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxv
YXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUQxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0
dXJlRmxvYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4
dHVyZUZsb2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4
dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1RleHR1cmVG
bG9hdC5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuaWRsOyBwYXRoID0g
Y2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04OTc4LDcgKzg5MTcsNiBAQAogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5
Ym9hcmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
T01LZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFDMkVB
MzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZFRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJj
ZUxvYWRUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyNDNE
MDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVJl
c291cmNlVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRUREMTU0
QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTkxMTMsOSArOTA1MSw2IEBACiAJCTkwMDE3NzNGMTJFMDM0Nzgw
MDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0Ux
MkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIg
LyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEwODlEMzAxNEMzMzVDRDAw
NUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFtcGVkQXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IFVpbnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OENsYW1wZWRBcnJh
eS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUw
RDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIy
NEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM0Miw3ICsx
MTI3Nyw2IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjc0QjMwMTQw
RUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8q
IEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4
ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdM
Q29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQw
MjUsOCArMTM5NTksNiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVFQ0RDQzEw
NTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLAotCQkJCTQ5RUVDREM5MTA1MDND
MjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovLAogCQkJCTZFNEU5MUE3MTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJNkU0RTkx
QTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
NDk0ODRGQjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKQEAgLTE0
MDQ3LDkgKzEzOTc5LDYgQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNTdHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmll
dy5jcHAgKi8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8s
Ci0JCQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLywKIAkJCQlG
QjkxMzkyMDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovLAogCQkJCUZCOTEzOTIxMTZB
RTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywKIAkJCQlBMDI0NTc0RTE2Q0VBQTI3MDAw
RTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApAQCAtMTQwNTgsMTEgKzEzOTg3LDYgQEAK
IAkJCQk3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmNwcCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5NEQxNEY4ODgyNTAwRjQ4NERDIC8qIEVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8sCi0JCQkJNDlFRUNEQ0YxMDUwM0MyMzAw
MDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0JCQkJNkVCQzVEODAxMzhCNEM0RTAwQTBD
RjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFC
IC8qIEludDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJ
bnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFy
cmF5LmlkbCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudElu
ZGV4VWludC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1l
bnRJbmRleFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA3NywxMCArMTQwMDEsNiBAQAogCQkJCTc3
QTE3QTZFMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi8sCiAJ
CQkJNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmggKi8s
CiAJCQkJNzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0Lmlk
bCAqLywKLQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICov
LAotCQkJCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJBcnJheS5pZGwgKi8sCi0J
CQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovLAotCQkJCTkx
QTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJheS5pZGwgKi8sCiAJCQkJ
QTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5oICovLAogCQkJCUE3
RDIwRjNCMTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8uaWRsICovLAogCQkJCTQ5
QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8sCkBAIC0xNjY0NSwx
MCArMTY1NjUsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAwQjA4MjUgLyogSFRNTCAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNFRjIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAotCQkJCTQ5RUVDRUYzMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0JCQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKLQkJCQk0OUVFQ0YxQTEwNTA3MkYzMDAw
OTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQlCRThFRjAzRTE3MUM4RkY5MDA5
QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJCQlCRThFRjAzRjE3MUM4RkY5MDA5QjQ4
QzMgLyogSlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4RUYwNDAxNzFDOEZGOTAwOUI0OEMzIC8q
IEpTQXVkaW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2NjIsOCArMTY1NzgsNiBAQAogCQkJCTQ5
RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLywK
IAkJCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmll
dy5oICovLAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNw
cCAqLywKIAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oICov
LAogCQkJCUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovLApAQCAt
MTY2NzgsMTAgKzE2NTkyLDYgQEAKIAkJCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNF
WFREcmF3QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgxMTRGRDlBREEwMEY0ODREQyAvKiBKU0VY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5ODIxNEZEOUFEQTAw
RjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCi0JCQkJNDlFRUNF
RjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VG
NTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLywKLQkJCQk2RUJDNUVBRDEz
OEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovLAotCQkJCTZFQkM1RUFFMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAogCQkJCUJDOTdFNDEwMTA5MTU0
RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQlCQzk3RTQxMTEw
OTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oICovLAogCQkJCTFBNEEyREVC
MEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNwcCAqLywKQEAgLTE2ODM1
LDEyICsxNjc0NSw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTSFRNTFZp
ZGVvRWxlbWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdl
RGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRh
LmggKi8sCi0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAg
Ki8sCi0JCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovLAot
CQkJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovLAotCQkJ
CTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQk0OUM3
Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovLAotCQkJCTQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUNEMjdGNkUyMTQ1NzY3
NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQ0QyN0Y2RTMxNDU3
Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmggKi8sCiAJCQkJRTQ0NjE0MTAwQ0Q2
ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAgKi8sCkBAIC0xNjg3MywxNCArMTY3Nzcs
NiBAQAogCQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLywK
IAkJCQkwNzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmNwcCAqLywKIAkJ
CQkwNzg0NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmggKi8sCi0JCQkJNDlF
RUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovLAotCQkJCTQ5RUVD
RUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZEMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkIxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0
OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywKLQkJCQk5MTA4OUQzMDE0QzMzNUNEMDA1
QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTE1Qzc3MDkyMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovLAogCQkJCTE1Qzc3MDkxMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywKIAkJCQlCRThFRjA0NjE3MUM5MDE0MDA5
QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAgLTE4NzgwLDYgKzE4Njc2LDggQEAKIAkJ
CQlBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAq
LywKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggKi8sCiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERh
dGEuaCAqLywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5
NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJCUUxQTY0M0YxMEVDMDk3
MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8sCiAJCQkJRjM0NzQyRTYx
MzQzNjM1MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcCAqLywKQEAgLTE4
ODM1LDggKzE4NzMzLDYgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMyNzVDQjIx
MUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovLAotCQkJCTg2MjQz
RDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovLAogCQkJ
CUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAogCQkJCUNE
REU2OTFEMTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcCAqLywKIAkJ
CQlGREVBQUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0
b20uY3BwICovLApAQCAtMTg4NjIsNyArMTg3NTgsNiBAQAogCQkJCUFENzI2RkVBMTZEOUY0MEIw
MDNBNEU2RCAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCAqLywKIAkJCQlFMUFEMTRF
NzEyOTczNzc0MDBBQ0E5ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwICovLAogCQkJCUJD
MjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKLQkJCQky
RTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8sCiAJCQkJ
NDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwICovLAogCQkJCTMxRkIxQTZCMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1v
dGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk1OTBFMUI0QTExRTRFRjcwMDA2OUY3ODQgLyog
SlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKQEAgLTIxMzIxLDcgKzIxMjE2
LDYgQEAKIAkJCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OTkxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFU
cmFuc2Zlckl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTlBMTMxNjM2RTYwMDA5QTdF
MCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NDRUIx
MjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTczMkIw
QjEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjE4MzAsNiArMjE3MjQsNyBAQAogCQkJCTg5M0M0ODBGMTI0OEJEM0Ew
MDJCM0Q4NiAvKiBGaWxlRW50cnlTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4MzEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURGMzY5
RjEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3NEY5IC8qIEZpbGVJY29u
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyog
RmlsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZE
MUY3IC8qIEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjM5LDkgKzIyMTM0LDYgQEAK
IAkJCQkxQzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1IC8qIEpTQWJzdHJhY3RX
b3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNBMTJCMDNGNTAwMDNBNTgzQSAvKiBK
U0FuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjFDMTA1MDcy
RjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYy
NDNEMDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9C
dWZmZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMwMiw3ICsyMjE5NCw2IEBACiAJ
CQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUI1OURENjk5MTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNl
U3luYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpT
RGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDU4MTAxMTQ2NDcwMERGRjNFRCAv
KiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREEx
NUVEMjEyQjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIyMzc1LDggKzIyMjY2LDYgQEAKIAkJCQk4OTg3ODVCMzEyMkNBMkE3MDAz
QUFCREEgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2REE4
NDRFMTIyNEEwNzEwMDYwRDAwNiAvKiBKU0ZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg5M0M0N0JDMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9h
dDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjdCMTRFQUMwODYwMDkwRDc1RSAv
KiBKU0ZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREMwMTZCN0YzOEUwMENC
QTNGQyAvKiBKU0ZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUFDMTJCMDNF
RTEwMDNBNTgzQSAvKiBKU0dhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDc3LDkgKzIy
MzY2LDYgQEAKIAkJCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBMEU3NkRCMTBCRjA1OTgwMEEwMjc2RSAvKiBKU0luamVjdGVk
U2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MUYxMEMwMERCMTAwQTAyNzZF
IC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
NzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
LQkJCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDNUZBRUQyMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFG
QiAvKiBKU0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzI5LDEwICsy
MjYxNSw2IEBACiAJCQkJRTE3QjQ5MjExNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ1RDBBOTBERUUxMDAwRkYyMTUgLyogSlNU
cmVlV2Fsa2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlDRjA5REEyQjQ3MDA5NjMzQTUg
LyogSlNVSUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMEIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA5
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTkx
MDg5RDMyMTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQUE0RkFEMjE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVlc3RFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRp
dHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFDOTAxNDAwOUI0OEMzIC8q
IEpTVmlkZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDczMiw3ICsyNDYxNCw2IEBACiAJ
CQkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFz
ZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRUExMjkzOUNCODAw
QzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzMyQjBBMTM2QTE2
MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNTM4OCw5ICsyNTI2OSw2IEBACiAJCQkJMUM4MUJBMDkwRTk3MzQ4
MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDE4Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAv
KiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjFCMTA1
MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NURGMzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkRBMTVFOUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNTQ3MCw4ICsyNTM0OCw2IEBACiAJCQkJMUFFODJGOEYwQ0FB
RkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2
OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0
YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0NTcxMDExNDY0NzAwREZG
M0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDE2MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNB
IC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1NDMsOCArMjU0MTksNiBA
QAogCQkJCTg5ODc4NUY0MTIyRTFFQUMwMDNBQUJEQSAvKiBKU0ZpbGVSZWFkZXJTeW5jLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg5ODc4NUIyMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0
ZW1DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdCQjEyMzhBMEE5MDAyQjNE
ODYgLyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
MDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNkQ5RDI3QzE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUFCMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0dhaW5O
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBK
U0dlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2MDMsNiArMjU0NzcsNyBAQAog
CQkJCUE2MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJl
bEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMwQTFDRTYzQjAwQjQyQjI1
IC8qIEpTSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwOTlEMDgx
N0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hU
TUxMaW5rRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFEMTM5QjEyOTVEOTI2MDBB
Q0E5ODkgLyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
NTY1Nyw5ICsyNTUzMiw2IEBACiAJCQkJRjMxNjM5NkUxMzI5NDg3NjAwQTY0OUNCIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3NzFFMTBDMDBE
QjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTSW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNDEwNTA3MEM0MDAw
OTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOTk1MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzVG
QUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDQwOURBMkI0ODAwOTYz
M0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTQxLDEwICsy
NTgxMyw2IEBACiAJCQkJMUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQwMDlEQTJCNDgwMDk2
MzNBNSAvKiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEMxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
MEExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQUE0RkFEMzE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNV
SVJlcXVlc3RFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3NzA5NDEwMEQzQ0E4MDA1
QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOEVGMDRB
MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBKU0RPTVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogCi10eXBlZGVmIEhhc2hN
YXA8dm9pZCosIEpTQzo6V2VhazxKU0RPTVdyYXBwZXI+ID4gRE9NT2JqZWN0V3JhcHBlck1hcDsK
K3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+ID4gRE9NT2Jq
ZWN0V3JhcHBlck1hcDsKIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzo6
SlNTdHJpbmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+ID4gSlNTdHJpbmdDYWNoZTsKIAogY2xhc3Mg
RE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
Ci0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1
ZmZlci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBcnJheUJ1ZmZlcihFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLQot
ICAgIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQot
ICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOyAvLyBOYU4v
K2luZi8taW5mIHJldHVybnMgMCwgdGhpcyBpcyBpbnRlbmRlZCBieSBXZWJJREwKLSAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAgIGJ1
ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCks
IDEpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEg
c21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
YnVmZmVyLmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJy
YXlCdWZmZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjg1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0jZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3
SGVscGVyX2gKLQotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPGludGVy
cHJldGVyL0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlCYXNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIHRvb0xhcmdlU2l6ZSA9ICJTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRp
dmUpLiI7Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1ib29sIGNvcHlUeXBlZEFy
cmF5QnVmZmVyKEMqIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBzb3VyY2UsIHVuc2lnbmVkIHNv
dXJjZUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmll
d1R5cGUgc291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChzb3VyY2VU
eXBlICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KTsKLQotICAgIGlmICh0YXJnZXQt
PmdldFR5cGUoKSA9PSBzb3VyY2VUeXBlKSB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5zZXQoc3Rh
dGljX2Nhc3Q8Qyo+KHNvdXJjZSksIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghdGFyZ2V0LT5jaGVja0lu
Ym91bmREYXRhKG9mZnNldCwgc291cmNlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVJbnQ4OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8
VHlwZWRBcnJheUJhc2U8c2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50ODoKLSAgICBjYXNl
IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQo
aSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+
ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1
ZmZlclZpZXc6OlR5cGVJbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNv
dXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQp
KHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRl
bShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVp
bnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5
cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzI6Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxp
bnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVVaW50MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQs
IChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+ICo+KHNvdXJjZSkt
Pml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVGbG9hdDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nh
c3Q8VHlwZWRBcnJheUJhc2U8ZmxvYXQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDY0OgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8ZG91
YmxlPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5
QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17Ci0gICAgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlC
dWZmZXJWaWV3OjpWaWV3VHlwZSBhcnJheVR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAgIGlm
IChhcnJheVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAyKQotICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50
b0ludDMyKGV4ZWMpOwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oaW1w
bCwgYXJyYXkuZ2V0KCksIGxlbmd0aCwgb2Zmc2V0KSkpCi0gICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotSlND
OjpKU1ZhbHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGlt
cGwpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBKU0M6OnRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotCi0gICAgaWYgKHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+
KGV4ZWMsIGltcGwpKQotICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTDw+QXJyYXkgYXJyYXks
IFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICByZXR1cm4gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25h
bF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJh
eSA9IEpTQzo6YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBv
ZmZzZXQgPSAwOwotICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAg
ICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAg
ICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoIWltcGwtPmNoZWNrSW5i
b3VuZERhdGEob2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UuIikpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJyYXktPmdldChleGVjLCBp
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgaW1w
bC0+c2V0KGkgKyBvZmZzZXQsIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcmd1bWVudCIpOwot
fQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgot
Ly8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFT
Y3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQ
dHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzb3VyY2Ug
PSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFzb3VyY2Up
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBzb3Vy
Y2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHNvdXJjZVR5cGUgPT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDMy
X3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIFJlZlB0cjxD
PiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIGlmICghKGNv
cHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGFycmF5LmdldCgpLCBzb3VyY2UuZ2V0KCksIGxlbmd0
aCwgMCkpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCB0b29MYXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIHJl
dHVybiBhcnJheTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNv
bnN0cnVjdG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0
aHJvd24gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1l
IFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZl
ckFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykg
OiAwOwotICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQz
MihleGVjKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAt
IG9mZnNldCkgJSBzaXplb2YoVCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zm
c2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpIC0gb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICB9Ci0gICAgUmVmUHRyPEM+IGFycmF5
ID0gQzo6Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmICghYXJyYXkpCi0g
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1l
IFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3RvcnM6Ci0gICAgLy8KLSAg
ICAvLyAgMSkgKGluIGludCBzaXplKQotICAgIC8vICAyKSAoaW4gQXJyYXlCdWZmZXIgYnVmZmVy
LCBbT3B0aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgaW50IGxl
bmd0aCkKLSAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMgZW5kcyB1cCBiZWluZyBh
IEpTICJhcnJheS1saWtlIiBvYmplY3QKLSAgICAvLyAgICAKLSAgICAvLyBGb3IgdGhlIDAgYXJn
cyBjYXNlLCBqdXN0IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIHZpZXcuIFdlIGNvdWxkCi0gICAgLy8g
Y29uc2lkZXIgcmFpc2luZyBhIFN5bnRheEVycm9yIGZvciB0aGlzIGNhc2UsIGJ1dCBub3QgYWxs
Ci0gICAgLy8gSmF2YVNjcmlwdCBET00gYmluZGluZ3MgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4g
Im5ldwotICAgIC8vIDxUeXBlPkFycmF5KCkiIGFuZCB3aGF0IG9jY3VycyB3aGVuIGEgcHJldmlv
dXNseS1jb25zdHJ1Y3RlZAotICAgIC8vIEFycmF5QnVmZmVyVmlldyBpcyByZXR1cm5lZCB0byBK
YXZhU2NyaXB0OyBlLmcuLCBmcm9tCi0gICAgLy8gImFycmF5LnN1YnNldCgpIi4KLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEM6OmNyZWF0ZSgwKTsK
LSAgICAKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8g
SW52YWxpZCBmaXJzdCBhcmd1bWVudAotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgUmVmUHRyPEM+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZp
ZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcp
Ci0gICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAKLSAgICAgICAgdmlldyA9IGNvbnN0cnVj
dEFycmF5QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAg
ICAgIGlmICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0KLSAgICAgICAgSlNDOjpK
U09iamVjdCogc3JjQXJyYXkgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAg
IHVpbnQzMl90IGxlbmd0aCA9IHNyY0FycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBSZWZQdHI8Qz4gYXJyYXkg
PSBDOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgICAgIGlmICghYXJyYXkpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
SlNDOjpKU1ZhbHVlIHYgPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgYXJy
YXktPnNldChpLCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7Ci0gICAgUmVmUHRyPEM+IHJlc3VsdDsKLSAgICBpZiAobGVuZ3RoID49IDApCi0g
ICAgICAgIHJlc3VsdCA9IEM6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSk7
Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgSlNUeXBlLCB0eXBlbmFtZSBXZWJDb3JlVHlwZT4KLXN0YXRpYyBKU0M6
OkpTVmFsdWUgdG9KU0FycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQ29yZVR5cGUqIG9iamVjdCkKLXsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0KLSAgICBpZiAoSlNE
T01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IG9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgZXhlYy0+aGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qob2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwotICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyPEpTVHlwZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0hlbHBl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0Nv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEy
ICsyOSwxMiBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQXVkaW9C
dWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0J1
ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNPZmZsaW5l
QXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxNCBAQAogI2luY2x1ZGUgIkJsb2Iu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
aWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QmxvYkJ1
aWxkZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
ICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFw
cGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHJ1bGUp
OworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIHJ1bGUpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXZhbHVlLT5pc0NT
U09NU2FmZSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdmFsdWUpOwor
ICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIHZhbHVlKTsKIAogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAi
SlNDcnlwdG8uaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgogCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC00MSwxMiArNDEsMTIgQEAg
SlNWYWx1ZSBKU0NyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdAogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAK
ICAgICBKU1ZhbHVlIGJ1ZmZlciA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIEFycmF5QnVmZmVy
VmlldyogYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoYnVmZmVyKTsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmll
dyhidWZmZXIpOwogICAgIGlmICghYXJyYXlCdWZmZXJWaWV3KQogICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYyk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBs
KCktPmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcsIGVjKTsKKyAgICBpbXBsKCktPmdl
dFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCksIGVjKTsKIAogICAgIGlmIChlYykg
ewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNSArMzEsMjEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNp
dG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5l
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0RhdGFWaWV3Lmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9M
b29rdXAuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvTnVs
bFB0ci5oPgpAQCAtMTI4LDYgKzEzNCwxNiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAg
ICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7CiAgICAgfQogCisgICAgaW5saW5l
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciopCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQtPnZtKCktPm1fdHlwZWRBcnJheUNv
bnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5l
IHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlC
dWZmZXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdvcmxkOworICAgIH0KKwogICAgIGlubGlu
ZSBKU0RPTVdyYXBwZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwg
dm9pZCopIHsgcmV0dXJuIDA7IH0KICAgICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBwZXIqLCBKU0M6OldlYWtIYW5k
bGVPd25lciosIHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGlubGluZSBib29sIGNsZWFy
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lkKiwgSlNET01XcmFwcGVy
KikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzOSw2ICsxNTUsMTMgQEAgY2xhc3MgRE9NU3RyaW5n
TGlzdDsKICAgICAgICAgcmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOwogICAgIH0KIAorICAg
IGlubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7CisgICAgfQorCiAgICAgaW5saW5lIGJv
b2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBTY3JpcHRX
cmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogICAgIHsKICAgICAgICAgaWYg
KCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE0Nyw2ICsxNzAsMTQgQEAgY2xhc3MgRE9NU3RyaW5n
TGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgc2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVm
ZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAgIGlm
ICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+
KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgY29udGV4dCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVy
KiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE1
NSwyNCArMTg2LDMyIEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTRE9N
V3JhcHBlciogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFz
cyogZG9tT2JqZWN0KQorICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKICAgICB7Ci0gICAgICAgIGlmIChKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QpKQorICAg
ICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QpCisgICAgeworICAgICAgICBpZiAoSlNDOjpKU09i
amVjdCogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkp
CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAgcmV0dXJuIHdvcmxkLT5tX3dy
YXBwZXJzLmdldChkb21PYmplY3QpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBE
T01DbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQs
IERPTUNsYXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQg
Y2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3Qs
IFdyYXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAgIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKICAgICAgICAgdm9p
ZCogY29udGV4dCA9IHdyYXBwZXJDb250ZXh0KHdvcmxkLCBkb21PYmplY3QpOwogICAgICAgICBp
ZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25l
ciwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPiBwYXNzV2Vhayh3cmFwcGVyLCBvd25lciwgY29udGV4dCk7CisgICAgICAg
IEpTQzo6UGFzc1dlYWs8SlNDOjpKU09iamVjdD4gcGFzc1dlYWsod3JhcHBlciwgb3duZXIsIGNv
bnRleHQpOwogICAgICAgICB3ZWFrQWRkKHdvcmxkLT5tX3dyYXBwZXJzLCAodm9pZCopZG9tT2Jq
ZWN0LCBwYXNzV2Vhayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNz
PiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01D
bGFzcyogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVuY2Fj
aGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdy
YXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hl
ZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xOTUsNyArMjM0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICB7CiAgICAgICAg
IGlmICghZG9tT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9tT2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxX
cmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZG9tT2JqZWN0KTsKICAgICB9CkBAIC0z
MjMsNiArMzYyLDI1IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CiAgICAgfQogCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVy
KiBidWZmZXIpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdldEV4
aXN0aW5nV3JhcHBlcjxKU0M6OkpTQXJyYXlCdWZmZXI+KGV4ZWMsIGJ1ZmZlcikpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBidWZmZXItPnJlZigpOworICAgICAgICBKU0M6
OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIgPSBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVj
LT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7Cisg
ICAgICAgIGNhY2hlV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGJ1ZmZlciwgd3JhcHBlcik7
CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKworICAgIGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAgeworICAgICAgICBpZiAoIXZp
ZXcpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIHZp
ZXctPndyYXAoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VD4gcHRyKQog
ICAgIHsKQEAgLTM3Niw2ICs0MzQsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogICAgIEpT
Qzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiB0b0FycmF5QnVmZmVyVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwcGVyID0gSlNDOjpqc0R5
bmFtaWNDYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1ZSk7CisgICAgICAgIGlmICgh
d3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gd3JhcHBlci0+
aW1wbCgpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDhBcnJh
eT4gdG9JbnQ4QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZl
VHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVm
UHRyPEpTQzo6SW50MTZBcnJheT4gdG9JbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odmFsdWUpOyB9
CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b0ludDMyQXJyYXkoSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQ4QXJy
YXk+IHRvVWludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNz
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVWludDhDbGFtcGVkQXJyYXkoSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhD
bGFtcGVkQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50
MTZBcnJheT4gdG9VaW50MTZBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxp
bmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQzMkFycmF5KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0
b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0
b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVU
eXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvRmxvYXQ2NEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2
YWx1ZSk7IH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkRhdGFWaWV3PiB0b0Rh
dGFWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6SlNEYXRhVmll
dyogd3JhcHBlciA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRGF0YVZpZXcqPih2YWx1ZSk7
CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzOwogCiAgICAgdGVtcGxhdGU8PgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkRhdGFWaWV3
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3SGVscGVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIERhdGFWaWV3QWNjZXNzVHlw
ZSB7Ci0gICAgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIsCi0gICAgQWNjZXNzRGF0YVZp
ZXdNZW1iZXJBc0Zsb2F0NjQKLX07Ci0KLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERhdGFWaWV3KiBvYmplY3QpCi17Ci0gICAg
cmV0dXJuIHdyYXA8SlNEYXRhVmlldz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNEYXRhVmlldyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50KDApLmlzTnVsbCgpIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLQotICAgIFJlZlB0cjxEYXRhVmlldz4g
dmlldyA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PERh
dGFWaWV3LCBjaGFyPihleGVjKTsKLSAgICBpZiAoIXZpZXcuZ2V0KCkpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBKU0RhdGFWaWV3Q29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNEYXRhVmlld0NvbnN0cnVjdG9yKj4oZXhl
Yy0+Y2FsbGVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhl
eGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgdmlldy5nZXQoKSkpKTsKLX0KLQot
c3RhdGljIEpTVmFsdWUgZ2V0RGF0YVZpZXdNZW1iZXIoRXhlY1N0YXRlKiBleGVjLCBEYXRhVmll
dyogaW1wLCBEYXRhVmlld0FjY2Vzc1R5cGUgdHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gMSAmJiAodHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxv
YXQzMiB8fCB0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0KSkgewotICAgICAg
ICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQ7Ci0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMjoKLSAgICBjYXNl
IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0OiB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
ICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyKSA/IGltcC0+Z2V0RmxvYXQz
MihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKSA6IGltcC0+Z2V0RmxvYXQ2NChieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLSAgICAgICAgcmVzdWx0ID0gc3RkOjppc25hbih2YWx1
ZSkgPyBqc05hTigpIDoganNOdW1iZXIodmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9IGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1KU1ZhbHVlIEpTRGF0YVZpZXc6OmdldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBnZXREYXRhVmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+
KGltcGwoKSksIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyKTsKLX0KLQotSlNWYWx1ZSBK
U0RhdGFWaWV3OjpnZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YVZpZXdNZW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8RGF0YVZpZXcqPihpbXBsKCkpLCBBY2Nl
c3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2
aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSAiSlNOb2Rl
LmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAjaW5jbHVkZSAiSlNUcmFja0N1c3RvbS5oIgot
I2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTVm9pZENhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
IDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUu
aD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1Vp
bnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgSlNW
YWx1ZSBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIAogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKICAgICBMb2NhdGlvbiogbG9jYXRpb24gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCktPmxvY2F0aW9uKCk7Ci0gICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBsb2NhdGlvbikpCisgICAgaWYgKEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxv
Y2F0aW9uKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBKU0xvY2F0aW9uKiBqc0xv
Y2F0aW9uID0gSlNMb2NhdGlvbjo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0xvY2F0aW9uPihl
eGVjLCBnbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdCgpLCBsb2NhdGlvbik7CkBAIC04Myw3
ICs4Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBp
ZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBw
ZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9jdW1l
bnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29y
bGQoZXhlYyksIGRvY3VtZW50KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFldmVudCkKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2ZW50KTsKKyAgICBKU09iamVjdCogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBldmVudCk7CiAgICAg
aWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRlICJKU0ZpbGVS
ZWFkZXIuaCIKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghY29sbGVj
dGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFw
cGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNvbGxlY3Rpb24pOwor
ICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIGNvbGxlY3Rpb24pOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5LDcgQEAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0
Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0YSk7CisgICAgSlNPYmpl
Y3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VE
YXRhKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFy
cmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRN
TENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0lu
dDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTm9kZS5o
IgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKLSNpbmNs
dWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1
ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZS5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBAIC02Nyw2ICs1OSw3
IEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3QuaD4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlRXZlbnQuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXIuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkpT
TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
RXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU01lc3Nh
Z2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5j
cHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
UGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghb2JqZWN0KQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVjdCkpCisgICAgaWYgKEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9i
amVjdCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgc3dpdGNoIChvYmplY3QtPnBh
dGhTZWdUeXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAg
ICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RP
TVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
c3R5bGVTaGVldCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAg
IHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
YWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIGlmICghdHJh
Y2spCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOworICAg
IEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IHRyYWNrKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxNCBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0VYVERyYXdCdWZmZXJzLmgiCiAjaW5jbHVkZSAiSlNFWFRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgog
I2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJh
eS5oIgogI2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1ZGUgIkpTT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgogI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCiAj
aW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAjaW5jbHVkZSAiSlNPRVNWZXJ0ZXhB
cnJheU9iamVjdC5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1Vp
bnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuaCIKQEAgLTg1LDEwICs4MSw5IEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9N
Rm9ybURhdGEuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgpAQCAtNTAsNiArNDgs
OCBAQAogI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMTI3LDkgKzEyNywxMCBA
QCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgICAgICBp
bXBsKCktPnNlbmQodG9ET01Gb3JtRGF0YSh2YWwpLCBlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZh
bC5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGltcGwoKS0+
c2VuZCh0b0FycmF5QnVmZmVyKHZhbCksIGVjKTsKLSAgICAgICAgZWxzZSBpZiAodmFsLmluaGVy
aXRzKCZKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvKSkKLSAgICAgICAgICAgIGltcGwoKS0+c2Vu
ZCh0b0FycmF5QnVmZmVyVmlldyh2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxz
ZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvKSkgeworICAgICAg
ICAgICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZh
bCk7CisgICAgICAgICAgICBpbXBsKCktPnNlbmQodmlldy5nZXQoKSwgZWMpOworICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLCBlYyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDI1ICszMiwxMyBAQAogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNs
dWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpT
QmxvYi5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxpc3QuaCIKLSNp
bmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAj
aW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNs
dWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUg
IkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJKU05hdmlnYXRvci5oIgotI2luY2x1ZGUgIkpT
VWludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNV
aW50OEFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OENsYW1wZWRBcnJheS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKQEAgLTYzLDEyICs1MSwxNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0
ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTRGF0YVZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9P
cGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvUmVnRXhwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSA8cnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtMTcyMiw0NyArMTcxNSw2IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXpl
ZFNjcmlwdFYKICAgICBtX2Jsb2JVUkxzLnN3YXAoYmxvYlVSTHMpOwogfQogCi1zdGF0aWMgdm9p
ZCBuZXV0ZXJWaWV3KEpTQ2VsbCoganNWaWV3KQotewotICAgIGlmICghanNWaWV3KQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgc3dpdGNoIChqc1ZpZXctPmNsYXNzSW5mbygpLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpIHsKLSAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAvLyBU
aGlzIGNvdWxkIGJlIGEgRGF0YVZpZXcsIGZvciBleGFtcGxlLiBBc3N1bWUgdGhhdCB0aGVyZSBh
cmUgdmlld3MgdGhhdCB0aGUKLSAgICAgICAgLy8gREZHIGRvZXNuJ3QgY2FyZSBhYm91dC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgIGpzQ2FzdDxK
U0ludDhBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAganNDYXN0PEpTSW50MTZBcnJh
eSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAganNDYXN0PEpTSW50MzJBcnJheSo+KGpzVmll
dyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVk
QXJyYXlVaW50ODoKLSAgICAgICAganNDYXN0PEpTVWludDhBcnJheSo+KGpzVmlldyktPm1fc3Rv
cmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50
OENsYW1wZWQ6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQxNjoKLSAgICAgICAganNDYXN0PEpTVWludDE2QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3Jh
Z2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDMy
OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0
aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAg
ICAgICBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAgICAg
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCiBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVyQXJyYXlCdWZmZXJzKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlCdWZmZXJBcnJheSYgYXJyYXlCdWZmZXJzLCBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSYgY29kZSkKIHsKQEAgLTE3NzksMjYgKzE3MzEsMTUgQEAgUGFzc093
blB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU6OkFycmF5QgogCiAgICAgSGFzaFNldDxKU0M6OkFy
cmF5QnVmZmVyKj4gdmlzaXRlZDsKICAgICBmb3IgKHNpemVfdCBhcnJheUJ1ZmZlckluZGV4ID0g
MDsgYXJyYXlCdWZmZXJJbmRleCA8IGFycmF5QnVmZmVycy5zaXplKCk7IGFycmF5QnVmZmVySW5k
ZXgrKykgewotICAgICAgICBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiBuZXV0ZXJl
ZFZpZXdzOwotCiAgICAgICAgIGlmICh2aXNpdGVkLmNvbnRhaW5zKGFycmF5QnVmZmVyc1thcnJh
eUJ1ZmZlckluZGV4XS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmlz
aXRlZC5hZGQoYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKTsKIAotICAgICAg
ICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIo
Y29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpLCBuZXV0ZXJlZFZpZXdzKTsKKyAgICAgICAg
Ym9vbCByZXN1bHQgPSBhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0tPnRyYW5zZmVyKGNv
bnRlbnRzLT5hdChhcnJheUJ1ZmZlckluZGV4KSk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAg
ICAgICAgICAgICBjb2RlID0gVmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSB2aWV3cyBtYXkgaGF2
ZSBiZWVuIG5ldXRlcmVkLCBidXQgdGhlaXIgd3JhcHBlcnMgYWxzbyBuZWVkIHRvIGJlIG5ldXRl
cmVkLCB0b28uCi0gICAgICAgIGZvciAoc2l6ZV90IHZpZXdJbmRleCA9IG5ldXRlcmVkVmlld3Mu
c2l6ZSgpOyB2aWV3SW5kZXgtLTspIHsKLSAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogdmll
dyA9IG5ldXRlcmVkVmlld3Nbdmlld0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IHdvcmxkSW5kZXggPSB3b3JsZHMuc2l6ZSgpOyB3b3JsZEluZGV4LS07KSB7Ci0gICAgICAg
ICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHdvcmxkc1t3b3JsZEluZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBuZXV0ZXJWaWV3KGdldENhY2hlZFdyYXBwZXIod29ybGQsIHZp
ZXcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY29udGVu
dHMucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJE
T01PYmplY3RIYXNoVGFibGVNYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIApAQCAtNzUsNiArNzYsNyBAQCBpbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnRE
YXRhKEpTCiAgICAgV2ViQ29yZUpTQ2xpZW50RGF0YSogd2ViQ29yZUpTQ2xpZW50RGF0YSA9IG5l
dyBXZWJDb3JlSlNDbGllbnREYXRhOwogICAgIHZtLT5jbGllbnREYXRhID0gd2ViQ29yZUpTQ2xp
ZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIHdlYkNvcmVKU0NsaWVu
dERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7
CisgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01H
bG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25z
Lmg+CisjaW5jbHVkZSA8aGVhcC9QYXNzV2Vhay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQoreworfQorV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9
CisKK0pTQXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVm
ZmVyKiBuYXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oCisgICAg
ICAgIHRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwg
bmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5
QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0FycmF5
QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihoYW5kbGUuZ2V0
KCkuYXNDZWxsKCkpOworICAgIGlmICghanNBcnJheUJ1ZmZlci0+aGFzQ3VzdG9tUHJvcGVydGll
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJyYXlCdWZmZXIqIHJvb3QgPSBqc0Fy
cmF5QnVmZmVyLT5pbXBsKCk7CisgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290
KHJvb3QpOworfQorCit2b2lkIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1
ZmZlck93bmVyOjpmaW5hbGl6ZSgKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXh0KQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8SlNB
cnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVu
Y2FjaGVXcmFwcGVyKHdvcmxkLCBqc0FycmF5QnVmZmVyLT5pbXBsKCksIGpzQXJyYXlCdWZmZXIp
OworICAgIGpzQXJyYXlCdWZmZXItPmltcGwoKS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8aGVhcC9X
ZWFrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgSlNDOjpUeXBlZEFycmF5
Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7
CisgICAgdmlydHVhbCB+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAg
dmlydHVhbCBKU0M6OkpTQXJyYXlCdWZmZXIqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOworICAgIAorICAgIEpTQzo6V2Vha0hh
bmRsZU93bmVyKiB3cmFwcGVyT3duZXIoKSB7IHJldHVybiAmbV9vd25lcjsgfQorCitwcml2YXRl
OgorICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7CisgICAgfTsKKworICAgIEpTQXJyYXlC
dWZmZXJPd25lciBtX293bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMjEgKzE4MCwyMiBAQCBzdWIgRm9yQWxsUGFyZW50cwog
CiAgICAgbXkgJHJlY3Vyc2U7CiAgICAgJHJlY3Vyc2UgPSBzdWIgeworICAgICAgICBteSAkb3V0
ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAgICAgICAgbXkgJGN1cnJlbnRJbnRlcmZhY2UgPSBzaGlm
dDsKIAogICAgICAgICBmb3IgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPnBhcmVudHN9KSB7CiAgICAg
ICAgICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRfOwotICAgICAgICAgICAgbXkgJHBhcmVudElu
dGVyZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAg
ICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkb3V0
ZXJJbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKIAogICAgICAgICAgICAgaWYgKCRiZWZvcmVS
ZWN1cnNpb24pIHsKICAgICAgICAgICAgICAgICAmJGJlZm9yZVJlY3Vyc2lvbigkcGFyZW50SW50
ZXJmYWNlKSBlcSAncHJ1bmUnIGFuZCBuZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
JiRyZWN1cnNlKCRwYXJlbnRJbnRlcmZhY2UpOworICAgICAgICAgICAgJiRyZWN1cnNlKCRvdXRl
ckludGVyZmFjZSwgJHBhcmVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAmJGFmdGVyUmVjdXJz
aW9uKCRwYXJlbnRJbnRlcmZhY2UpIGlmICRhZnRlclJlY3Vyc2lvbjsKICAgICAgICAgfQogICAg
IH07CiAKLSAgICAmJHJlY3Vyc2UoJGludGVyZmFjZSk7CisgICAgJiRyZWN1cnNlKCRpbnRlcmZh
Y2UsICRpbnRlcmZhY2UpOwogfQogCiBzdWIgRmluZFN1cGVyTWV0aG9kCkBAIC0yMzgsNiArMjM5
LDcgQEAgc3ViIElETEZpbGVGb3JJbnRlcmZhY2UKIHN1YiBQYXJzZUludGVyZmFjZQogewogICAg
IG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIHVuZGVmIGlmICRpbnRl
cmZhY2VOYW1lIGVxICdPYmplY3QnOwpAQCAtMjQ4LDcgKzI1MCw3IEBAIHN1YiBQYXJzZUludGVy
ZmFjZQogCiAgICAgIyBTdGVwICMxOiBGaW5kIHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdpdGgg
J2ludGVyZmFjZScKICAgICBteSAkZmlsZW5hbWUgPSAkb2JqZWN0LT5JRExGaWxlRm9ySW50ZXJm
YWNlKCRpbnRlcmZhY2VOYW1lKQotICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBm
aWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiIVxuIik7CisgICAgICAgIG9yIGRp
ZSgiQ291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1l
XCIsIHJlYWNoYWJsZSBmcm9tIFwiIiAuICRvdXRlckludGVyZmFjZS0+bmFtZSAuICJcIiFcbiIp
OwogCiAgICAgcHJpbnQgIiAgfCAgfD4gIFBhcnNpbmcgcGFyZW50IElETCBcIiRmaWxlbmFtZVwi
IGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiXG4iIGlmICR2ZXJib3NlOwogCkBAIC0y
NzcsNiArMjc5LDEwIEBAIHN1YiBTa2lwSW5jbHVkZUhlYWRlcgogCiAgICAgIyBTcGVjaWFsIGNh
c2U6IFNWR051bWJlci5oIGRvZXMgbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJTVkdOdW1iZXIiOworICAgIAorICAgICMgVHlwZWQgYXJyYXlzIGFscmVhZHkgaW5jbHVkZWQg
YnkgSlNET01CaW5kaW5nLmguCisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5
VHlwZSgkdHlwZSk7CisgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCw3ICszNzQsNyBA
QCBzdWIgSXNUeXBlZEFycmF5VHlwZQogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkFycmF5
QnVmZmVyIikgb3IgKCR0eXBlIGVxICJBcnJheUJ1ZmZlclZpZXciKSk7CiAgICAgcmV0dXJuIDEg
aWYgKCgkdHlwZSBlcSAiVWludDhBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDhDbGFtcGVkQXJy
YXkiKSBvciAoJHR5cGUgZXEgIlVpbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MzJBcnJh
eSIpKTsKICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJJbnQ4QXJyYXkiKSBvciAoJHR5cGUg
ZXEgIkludDE2QXJyYXkiKSBvciAoJHR5cGUgZXEgIkludDMyQXJyYXkiKSk7Ci0gICAgcmV0dXJu
IDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJy
YXkiKSk7CisgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0
eXBlIGVxICJGbG9hdDY0QXJyYXkiKSBvciAoJHR5cGUgZXEgIkRhdGFWaWV3IikpOwogICAgIHJl
dHVybiAwOwogfQogCkBAIC02MDksNiArNjE1LDcgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICBy
ZXR1cm4gMCBpZiAkb2JqZWN0LT5HZXRTZXF1ZW5jZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAw
IGlmICRvYmplY3QtPklzRW51bVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICRvYmplY3Qt
PklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNUeXBlZEFy
cmF5VHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJHdlYkNvcmVUeXBlSGFzaHskdHlwZX07
CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImFueSI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHN1YiBBZGRJbmNsdWRlc0Zv
clR5cGUKICAgICBteSAkaW5jbHVkZXNSZWYgPSBzaGlmdDsKIAogICAgIHJldHVybiBpZiBTa2lw
SW5jbHVkZUhlYWRlcigkdHlwZSk7Ci0KKyAgICAKICAgICAjIFdoZW4gd2UncmUgZmluaXNoZWQg
d2l0aCB0aGUgb25lLWZpbGUtcGVyLWNsYXNzCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29u
J3QgbmVlZCB0aGVzZSBzcGVjaWFsIGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jl
c29sdmVyIikgewpAQCAtMjI1LDggKzIyNSw2IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CiAg
ICAgfSBlbHNpZiAoJGlzQ2FsbGJhY2sgJiYgJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5cGUo
JHR5cGUpKSB7CiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKUyR7dHlwZX0uaCJ9ID0gMTsKLSAg
ICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKLSAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IjxydW50aW1lLyR7dHlwZX0uaD4ifSA9IDE7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKICAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTY4MiwxMSArNjgwLDcg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCJ9
KSB7Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvJGludGVy
ZmFjZU5hbWUuaD4ifSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgJGhl
YWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKICAgICAk
aGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwpAQCAtOTYyLDIyICs5
NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB9XG4iKTsKICAgICB9CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJh
eVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5k
ICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3Rv
cmFnZVR5cGUgPSBKU0M6OiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheUludDgiKSBpZiAkaW1wbFR5cGUgZXEgIkludDhBcnJheSI7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIkludDE2QXJy
YXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDMyIikgaWYg
JGltcGxUeXBlIGVxICJJbnQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlR5cGVkQXJyYXlVaW50OCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhBcnJheSI7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDhDbGFtcGVkIikgaWYgJGltcGxU
eXBlIGVxICJVaW50OENsYW1wZWRBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJUeXBlZEFycmF5VWludDE2IikgaWYgJGltcGxUeXBlIGVxICJVaW50MTZBcnJheSI7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDMyIikgaWYgJGltcGxUeXBl
IGVxICJVaW50MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFy
cmF5RmxvYXQzMiIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQzMkFycmF5IjsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDY0IikgaWYgJGltcGxUeXBlIGVxICJG
bG9hdDY0QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiO1xuIik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaW50cHRyX3QgbV9zdG9yYWdlTGVuZ3RoO1xu
Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCogbV9zdG9yYWdlO1xu
Iik7Ci0gICAgfQotCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOwog
ICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKQEAgLTE4NjYsMTIgKzE4NDQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7
Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUp
IGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAi
QXJyYXlCdWZmZXIiKSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmJHtjbGFzc05hbWV9OjpzX2luZm8sIE9CSkVD
VF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2Ns
YXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVz
Y3JpcHRvcik7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3Rv
cmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpO1xuIik7Ci0gICAgICAg
IH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQpA
QCAtMjM3MSw3ICsyMzQzLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAo
JGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVz
c2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFs
dWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpIGFuZCBu
b3QgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJBcnJheUJ1ZmZlciIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJuYXRp
dmVWYWx1ZS5nZXQoKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1
bWVudHMsICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRC
eSJ9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKQEAgLTI1MjMsMTMgKzI0OTksNiBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4g
IihleGVjKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInNldCIgYW5kICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFycmF5In0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICR2aWV3VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJUeXBlZEFycmF5In07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldFdlYkdMQXJyYXlIZWxwZXI8JGltcGxU
eXBlLCAkdmlld1R5cGU+KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXBsID0gc3RhdGlj
X2Nhc3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGltcGwtPmlzUmVhZE9ubHkoKSkge1xuIik7CkBA
IC0zMDg0LDcgKzMwNTMsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIp
IHsKKyAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIiB8fCAoJGNvZGVHZW5lcmF0
b3ItPklzVHlwZWRBcnJheVR5cGUoJGFyZ1R5cGUpIGFuZCBub3QgJGFyZ1R5cGUgZXEgIkFycmF5
QnVmZmVyIikpIHsKICAgICAgICAgICAgIHB1c2ggQGFyZ3VtZW50cywgIiRuYW1lLmdldCgpIjsK
ICAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2Zm
KCRhcmdUeXBlKSBhbmQgbm90ICRpbnRlcmZhY2VOYW1lID1+IC9MaXN0JC8pIHsKICAgICAgICAg
ICAgIHB1c2ggQGFyZ3VtZW50cywgIiRuYW1lLT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKQEAgLTMz
NjYsNiArMzMzNSw3IEBAIHN1YiBHZXROYXRpdmVUeXBlCiAgICAgbXkgJHN2Z05hdGl2ZVR5cGUg
PSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBlKTsKICAgICBy
ZXR1cm4gIiR7c3ZnTmF0aXZlVHlwZX0qIiBpZiAkc3ZnTmF0aXZlVHlwZTsKICAgICByZXR1cm4g
IlJlZlB0cjxET01TdHJpbmdMaXN0PiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZ0xpc3QiOworICAg
IHJldHVybiAiUmVmUHRyPCR7dHlwZX0+IiBpZiAkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5
VHlwZSgkdHlwZSkgYW5kIG5vdCAkdHlwZSBlcSAiQXJyYXlCdWZmZXIiOwogICAgIHJldHVybiAk
bmF0aXZlVHlwZXskdHlwZX0gaWYgZXhpc3RzICRuYXRpdmVUeXBleyR0eXBlfTsKIAogICAgIG15
ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKQEAgLTM1
MDUsNiArMzQ3NSwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJKU0RPTVN0cmluZ0xpc3QuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIHJldHVy
biAidG9ET01TdHJpbmdMaXN0KGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KKyAgICAKKyAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVy
biAidG8kdHlwZSgkdmFsdWUpIjsKKyAgICB9CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSFRN
TE9wdGlvbkVsZW1lbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIkhUTUxPcHRpb25F
bGVtZW50IjsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXZlbnQuaCIsICRjb25kaXRpb25hbCkg
aWYgJHR5cGUgZXEgIkV2ZW50IjsKQEAgLTM1NzQsNyArMzU0OCw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+Iiwg
JGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dpdGhDYWNoZShleGVjLCAk
dmFsdWUpIjsKICAgICB9Ci0KKyAgICAKICAgICBteSAkZ2xvYmFsT2JqZWN0OwogICAgIGlmICgk
dGhpc1ZhbHVlKSB7CiAgICAgICAgICRnbG9iYWxPYmplY3QgPSAiJHRoaXNWYWx1ZS0+Z2xvYmFs
T2JqZWN0KCkiOwpAQCAtMzYxNSwxNCArMzU4OSwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAg
ICAgfSBlbHNpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3IgJHR5cGUgZXEg
ImFueSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRl
c2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgp
IjsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkp
IHsKKyAgICAgICAgIyBEbyBub3RoaW5nIC0gYWxsIGhlYWRlcnMgYXJlIGFscmVhZHkgaW5jbHVk
ZWQuCiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIGhlYWRlciB3aXRo
IHNhbWUgbmFtZS4KICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIsICRjb25k
aXRpb25hbCk7Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgk
dHlwZSkpIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS8kdHlwZS5o
PiIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRl
cigkdHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5j
bHVkZUhlYWRlcigkdHlwZSk7Ci0gICAgICAgIH0KKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IiR0eXBlLmgiLCAkY29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1
ZGVIZWFkZXIoJHR5cGUpOwogICAgIH0KIAogICAgIHJldHVybiAkdmFsdWUgaWYgJGNvZGVHZW5l
cmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKTsKQEAgLTQxMDUsMzAgKzQwNzcsNiBAQCBF
TkQKIH0KIAogRU5ECi0gICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVj
dG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgewotICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCJ9ID0gMTsKLSAgICAgICAgICAg
IG15ICR2aWV3VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFy
cmF5In07Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFt
ZX0oRXhlY1N0YXRlKiBleGVjKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfSoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfSo+KGV4ZWMtPmNhbGxlZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFJlZlB0cjwkaW50ZXJmYWNlTmFtZT4gYXJyYXkgPSBjb25zdHJ1Y3RBcnJheUJ1
ZmZlclZpZXc8JGludGVyZmFjZU5hbWUsICR2aWV3VHlwZT4oZXhlYyk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWFycmF5LmdldCgpKVxuIik7Ci0gICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIC8vIEV4Y2VwdGlvbiBoYXMgYWxy
ZWFkeSBiZWVuIHRocm93bi5cbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2Jq
ZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5LmdldCgp
KSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJHtpbnRlcmZh
Y2VOYW1lfSogb2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdG9KU0Fy
cmF5QnVmZmVyVmlldzwke2NsYXNzTmFtZX0+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTtc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVk
U2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7
Y2xhc3NOYW1lfTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgaW1wbCgpLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSAmJiAoISRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdl
bmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgbXkgJG92ZXJsb2FkZWRJ
bmRleFN0cmluZyA9ICIiOwogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+e292ZXJsb2FkZWRJ
bmRleH0gJiYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSA+IDApIHsKQEAgLTQyMDcsNyAr
NDE1NSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogCiAgICAgbXkg
JGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7
Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsK
ICAgICBteSAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDA7Ci0gICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikgfHwgJGNvZGVH
ZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIp
KSB7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVy
ZmFjZSwgIkV2ZW50IikpIHsKICAgICAgICAgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGggPSAxOwog
ICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3Rv
ciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3Rv
ciJ9KSB7CiAgICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVj
dG9yc307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVy
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRC
bG9iQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBCbG9i
QnVpbGRlcjo6YXBwZW5kKEFycmF5QnVmZmVyKiBhcgogICAgIGFwcGVuZEJ5dGVzRGF0YShhcnJh
eUJ1ZmZlci0+ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotdm9pZCBC
bG9iQnVpbGRlcjo6YXBwZW5kKEFycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3KQordm9p
ZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1
ZmZlclZpZXcpCiB7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24o
IldlYkNvcmUuQmxvYi5jb25zdHJ1Y3Rvci5BcnJheUJ1ZmZlck9yVmlldyIsIEJsb2JDb25zdHJ1
Y3RvckFycmF5QnVmZmVyVmlldywgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJPclZpZXdNYXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWls
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmcpOwogI2lmIEVO
QUJMRShCTE9CKQogICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXIqKTsKLSAgICB2b2lk
IGFwcGVuZChKU0M6OkFycmF5QnVmZmVyVmlldyopOworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+KTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxCbG9i
PiBnZXRCbG9iKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01X
aW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAot
ICAgIEN1c3RvbUNvbnN0cnVjdG9yKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKSwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQywKLSAgICBJbXBsZW1l
bnRhdGlvbkxhY2tzVlRhYmxlCi1dIGludGVyZmFjZSBBcnJheUJ1ZmZlciB7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLSAgICBBcnJheUJ1ZmZlciBz
bGljZShsb25nIGJlZ2luLCBvcHRpb25hbCBsb25nIGVuZCk7Ci19OwotCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBDdXN0b21U
b0pTT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBBcnJheUJ1ZmZlclZpZXcgewotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBcnJheUJ1ZmZlciBidWZmZXI7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgYnl0ZU9mZnNldDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBieXRlTGVuZ3RoOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24g
VmFsdWUgewotICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBp
ZiAoIWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIsIDAsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3Ojpj
cmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENo
ZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNl
dCArIGNoZWNrZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8
IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVP
ZmZzZXQsIGJ5dGVMZW5ndGgpKTsKLX0KLQotRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgLCBt
X2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKLXsKLX0KLQotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5
dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVy
biBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlm
Ci19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNo
YXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCAr
IDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAg
ICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQot
Ci1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0
ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRl
cyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0
aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wg
bGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAg
ICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6
OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkg
ewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNl
IGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBz
dXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHko
dmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5
dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMs
IHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0
ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBi
dXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0
b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1
ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0
dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3Mp
ICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3Qg
RGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwot
fQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0
LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
cmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXVpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRh
PHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotaW50MzJfdCBE
YXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MzJfdCBEYXRhVmlldzo6Z2V0VWlu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxl
RW5kaWFuLCBlYyk7Ci19Ci0KLWZsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0K
LWRvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZG91
YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50OF90Pihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFycmF5QnVmZmVy
Vmlldzo6bmV1dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhVmlld19oCi0jZGVmaW5lIERhdGFWaWV3X2gK
LQotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwotCi1jbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsK
LQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
c2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVp
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1
aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMy
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBm
bG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBn
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRV
aW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfQotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQot
ICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRG
bG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotcHJpdmF0ZToKLSAgICBEYXRhVmlldyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIGJl
eW9uZFJhbmdlKHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQg
Pj0gbV9ieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dW5zaWduZWQgbV9ieXRlTGVuZ3RoOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBEYXRhVmlld19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9E
YXRhVmlldy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9EYXRhVmlldy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDdXN0
b21Db25zdHJ1Y3RvcihBcnJheUJ1ZmZlciBidWZmZXIsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
Ynl0ZU9mZnNldCwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoKSwKLSAgICBDdXN0
b21Ub0pTT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKLV0gaW50ZXJmYWNlIERhdGFWaWV3
IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICAvLyBBbGwgdGhlc2UgbWV0aG9kcyByYWlzZSBhbiBl
eGNlcHRpb24gaWYgdGhleSB3b3VsZCByZWFkIG9yIHdyaXRlIGJleW9uZCB0aGUgZW5kIG9mIHRo
ZSB2aWV3LgotCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYnl0ZSBnZXRJbnQ4KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gb2N0ZXQgZ2V0VWludDgodW5z
aWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gc2hvcnQgZ2V0SW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRp
b25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBzaG9ydCBnZXRVaW50MTYodW5zaWduZWQgbG9uZyBieXRl
T2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBsb25nIGdldEludDMyKHVuc2lnbmVkIGxvbmcgYnl0
ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBnZXRVaW50MzIodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAg
ICAvLyBVc2UgY3VzdG9tIGNvZGUgdG8gaGFuZGxlIE5hTiBjYXNlLgotICAgIFtDdXN0b20sIFN0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBmbG9hdCBnZXRGbG9hdDMyKHVuc2ln
bmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAg
IFtDdXN0b20sIFN0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxl
RW5kaWFuKTsKLQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBs
b25nIGJ5dGVPZmZzZXQsIGJ5dGUgdmFsdWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQg
c2V0VWludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvY3RldCB2YWx1ZSk7Ci0KLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50MTYodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVF
bmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBz
ZXRVaW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwg
b3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQs
IGxvbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0
bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotfTsKLQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25z
dHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBD
dXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJh
eT1mbG9hdCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZs
b2F0MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBC
WVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsZW5ndGg7Ci0gICAgRmxvYXQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBmbG9hdCAodW5zaWduZWQgbG9uZyBpbmRleCk7
Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0
aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRl
eHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9
VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05h
dGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3Qs
Ci0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWRvdWJsZSwKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZsb2F0NjRBcnJheSA6IEFy
cmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVO
VCA9IDg7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0g
ICAgRmxvYXQ2NEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9u
ZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsK
LQotICAgIGdldHRlciBkb3VibGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9p
ZCBzZXQoRmxvYXQ2NEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29y
a2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAg
IEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAg
IEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNr
Q29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9c2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRp
b25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcg
ewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDhBcnJheSBz
dWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgYnl0ZSAo
dW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQ4QXJyYXkgYXJyYXks
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5j
ZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQg
c2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5p
ZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2
QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2Nv
cGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4
ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNU
YWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAot
ICAgIFR5cGVkQXJyYXk9c2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1d
IGludGVyZmFjZSBJbnQxNkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgc2hvcnQgKHVuc2lnbmVkIGxvbmcg
aW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2Jh
bENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVt
cGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNP
YmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWludCwKLSAg
ICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDMyQXJyYXkgOiBB
cnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1F
TlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwot
ICAgIEludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQot
ICAgIGdldHRlciBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0
KEludDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAv
LyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDhBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJH
bG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3Vz
dG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNO
b1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25z
dGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9u
TmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDhBcnJheSBz
dWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFs
IGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0K
LSAgICAvLyB2b2lkIHNldChVaW50OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFy
cmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25z
dHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBD
dXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJh
eT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRl
cmZhY2UgVWludDhDbGFtcGVkQXJyYXkgOiBVaW50OEFycmF5IHsKLSAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50OENsYW1wZWRBcnJheSBzdWJhcnJheShbRGVm
YXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsK
LQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyBGSVhN
RTogTWlzc2luZyBvdGhlciBzZXR0ZXJzIQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4Q2xhbXBlZEFy
cmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBz
ZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
LSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Vp
bnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50MTZBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1VpbnQxNkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgc2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50MTZBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0g
ICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDE2QXJyYXkgc3Vi
YXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBs
b25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5zaWduZWQgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5k
ZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25l
ZCBpbnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50
MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRF
U19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7Ci0gICAgVWludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBv
cHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5z
aWduZWQgbG9uZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50
MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZv
aWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKICNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogCisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5
UHRyLmg+CkBAIC0zNDE1LDcgKzM0MTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVhZFBpeGVscyhHCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVmFsaWRhdGUgYXJy
YXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4KSB7CisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgp
ICE9IEpTQzo6VHlwZVVpbnQ4KSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJW
aWV3IG5vdCBVaW50OEFycmF5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MTU2LDcg
KzUxNTcsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpU
eXBlVWludDgpIHsKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVp
bnQ4KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBidXQg
QXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTUxNjQsMTMgKzUxNjUsMTMgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUXzVfNl81OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmll
dzo6VHlwZVVpbnQxNikgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpU
eXBlVWludDE2KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hP
UlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgaWYgKHBpeGVs
cy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKICAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMy
QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ3J5cHRvLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9DcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsNyBAQCBuYW1lc3BhY2Ug
ewogCiBib29sIGlzSW50ZWdlckFycmF5KEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7Ci0gICAg
QXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSB0eXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICBy
ZXR1cm4gdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4Ci0gICAgICAgICAgIHx8IHR5
cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgKLSAgICAgICAgICAgfHwgdHlwZSA9PSBB
cnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OENsYW1wZWQKLSAgICAgICAgICAgfHwgdHlwZSA9PSBB
cnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVm
ZmVyVmlldzo6VHlwZVVpbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmll
dzo6VHlwZUludDMyCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBl
VWludDMyOworICAgIHJldHVybiBKU0M6OmlzSW50KGFycmF5LT5nZXRUeXBlKCkpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKIAogI2lt
cG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJEYXRhVmlldy5oIgogI2ltcG9ydCAi
RXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgpAQCAtNDcsNiArNDYsNyBAQAogI2ltcG9ydCAi
V2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvRGF0YVZp
ZXcuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUv
VWludDMyQXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDhBcnJheS5oPgpAQCAtOTIzLDgg
KzkyMyw4IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAg
ICAgLy8gWzQgYnl0ZXM6IGtleVVSSSBzaXplXSwgW2tleVVSSSBzaXplIGJ5dGVzOiBrZXlVUkld
CiAgICAgICAgIHVuc2lnbmVkIGtleVVSSVNpemUgPSBrZXlVUkkubGVuZ3RoKCkgKiBzaXplb2Yo
VUNoYXIpOwogICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gQXJy
YXlCdWZmZXI6OmNyZWF0ZSg0ICsga2V5VVJJU2l6ZSwgMSk7Ci0gICAgICAgIFJlZlB0cjxEYXRh
Vmlldz4gaW5pdERhdGFWaWV3ID0gRGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwg
aW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgICAgIGluaXREYXRhVmlldy0+c2V0
VWludDMyKDAsIGtleVVSSVNpemUsIHRydWUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBS
ZWZQdHI8SlNDOjpEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRl
KGluaXREYXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAg
ICAgaW5pdERhdGFWaWV3LT5zZXQ8dWludDMyX3Q+KDAsIGtleVVSSVNpemUsIHRydWUpOwogCiAg
ICAgICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3Jl
YXRlKGluaXREYXRhQnVmZmVyLCA0LCBrZXlVUkkubGVuZ3RoKCkpOwogICAgICAgICBrZXlVUklB
cnJheS0+c2V0UmFuZ2Uoa2V5VVJJLmNoYXJhY3RlcnMoKSwga2V5VVJJLmxlbmd0aCgpIC8gc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpLCAwKTsKQEAgLTEyMDQsMTMgKzEyMDQsMTMgQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
aW5pdERhdGFCdWZmZXIgPSBpbml0RGF0YS0+YnVmZmVyKCk7CiAKICAgICAvLyBVc2UgYSBEYXRh
VmlldyB0byByZWFkIHVpbnQzMiB2YWx1ZXMgZnJvbSB0aGUgYnVmZmVyLCBhcyBVaW50MzJBcnJh
eSByZXF1aXJlcyB0aGUgcmVhZHMgYmUgYWxpZ25lZCBvbiA0LWJ5dGUgYm91bmRhcmllcy4gCi0g
ICAgUmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXRE
YXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBSZWZQdHI8
SlNDOjpEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGluaXRE
YXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAgICB1aW50MzJf
dCBvZmZzZXQgPSAwOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgc3RhdHVz
ID0gdHJ1ZTsKIAotICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0
VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGlu
aXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9m
ZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBrZXlVUklMZW5ndGggPiBpbml0RGF0
YS0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4g
aW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8
VWludDE2QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1
ZmZlciwgb2Zmc2V0LCBrZXlVUklMZW5ndGgpOwpAQCAtMTIyMCw5ICsxMjIwLDkgQEAgYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleVVSSSA9IFN0cmluZyhr
ZXlVUklBcnJheS0+ZGF0YSgpLCBrZXlVUklMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
KTsKICAgICBvZmZzZXQgKz0ga2V5VVJJTGVuZ3RoOwogCi0gICAgdWludDMyX3Qga2V5SURMZW5n
dGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50
MzJfdCBrZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRy
dWUsICZzdGF0dXMpOwogICAgIG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBr
ZXlJRExlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZz
ZXQgKyBrZXlJRExlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlJREFycmF5ID0gVWludDE2QXJyYXk6
OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBrZXlJRExlbmd0aCk7CkBAIC0xMjMyLDkg
KzEyMzIsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAg
a2V5SUQgPSBTdHJpbmcoa2V5SURBcnJheS0+ZGF0YSgpLCBrZXlJRExlbmd0aCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBrZXlJRExlbmd0aDsKIAotICAgIHVpbnQz
Ml90IGNlcnRpZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0
cnVlLCBlYyk7CisgICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXct
PmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsK
LSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0YS0+bGVu
Z3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBp
bml0RGF0YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNlcnRpZmlj
YXRlID0gVWludDhBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGNlcnRpZmlj
YXRlTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDdXN0b21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDkgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
KyNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotfQot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1c3RvbUZpbHRlclJlbmRlcmVyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKIAorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlu
bGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlIDxydW50aW1lL1R5cGVk
QXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgog
CiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01v
Y2tDRE0uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01v
Y2tDRE0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJD
RE0uaCIKICNpbmNsdWRlICJNZWRpYUtleUVycm9yLmgiCisjaW5jbHVkZSA8cnVudGltZS9PcGVy
YXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTM5NzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0
dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkw
NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFlvdSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgSlNVaW50OEFycmF5IGFueW1vcmUgaWYgeW91
IGp1c3Qgd2FudCB0bworICAgICAgICB1bndyYXAgb25lOyBKU0RPTUJpbmRpbmcgZ2l2ZXMgeW91
IGFsbCBvZiB0aGUgdGhpbmdzIHlvdSBuZWVkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisKIDIwMTMtMDgtMTIgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhlZCBhbiBvZmYtYnktKHNpemVvZihj
aGFyKikgLSAxKSBidWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2lu
ZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU05vdGlmaWNhdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvSlNVaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1ByaW50Q29udGV4dC5o
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208596</attachid>
            <date>2013-08-12 23:25:38 -0700</date>
            <delta_ts>2013-08-13 23:05:32 -0700</delta_ts>
            <desc>builds on mac</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>641071</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyMiBA
QAorMjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpZ24gdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3YWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2llIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUgaXQKKyAgICAgICAgICB3
YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAgICAgIC0gVHlw
ZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1Y3R1cmUqLCBC
dXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3IuIEJlZm9yZSBp
dCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAgICB0aGVyZSB3
ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkgbm90aGluZyBm
b3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFyZW4ndCB0cmFj
a2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUKKyAgICAgICAg
ICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNoIHRvIG5vdCBl
dmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAgIAorICAgICAg
ICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBvZiB0cmFja2lu
ZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3RoIGZvciBuZXV0
ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAgICAgICAgIHNw
ZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBidW5jaCBvZiBn
cmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMgdmlldyB3cmFw
cGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAorICAgICAgICAg
IHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5hbGl6ZS4KKyAg
ICAgICAgCisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQg
YWxsb2NhdGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nngg
c3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4K
KworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogSlNDVHlwZWRBcnJh
eVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAg
KEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6
OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBl
Rm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZn
L0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJh
eUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAg
IChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlND
OjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9H
Q0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlND
OjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6
OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNv
dW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNl
KToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAq
IGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5n
UmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVw
KToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURl
YWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJl
ZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChK
U0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVy
L0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
OjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGlu
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAg
IChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAg
ICogcnVudGltZS9EYXRhVmlldy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmNwcC4KKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6OkRhdGFWaWV3Ojp3cmFwKToKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmguCisg
ICAgICAgIChKU0M6OkRhdGFWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RGF0YVZp
ZXc6OmdldFR5cGUpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0KToKKyAgICAgICAgKEpT
Qzo6RGF0YVZpZXc6OnNldCk6CisgICAgICAgICogcnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL0Zsb2F0NjRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OmRhdGEpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6
CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAg
ICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5
Vmlldzo6Ynl0ZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6
aXRlbSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2hlY2tJbmJvdW5k
RGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0VHlwZSk6Cisg
ICAgICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjo6OkdlbmVyaWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6
Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAg
KEpTQzo6OjpzdWJhcnJheSk6CisgICAgICAgIChKU0M6Ojo6d3JhcCk6CisgICAgICAgICogcnVu
dGltZS9JbmRleGluZ0hlYWRlci5oOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJy
YXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXJyYXlCdWZmZXIp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50
MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50OEFycmF5Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXI6OkpTQXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6aW1wbCk6CisgICAgICAgIChKU0M6OnRvQXJyYXlCdWZmZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVh
dGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1
ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlw
ZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclBy
b3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4
dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1v
ZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9y
eUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAg
IChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6Cisg
ICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6dHlw
ZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcu
aDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoSlNDOjpnZXREYXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMy
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNHZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY1NldEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNT
ZXRJbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNTZXRGbG9hdDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0
KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTRmxvYXQ2NEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6
OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVk
VmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldElu
ZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5T
ZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1
aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNz
UmFuZ2VRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5
cGVkSW1wbCk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVT
dHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjp0b05hdGl2ZVR5cGVkVmlldyk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjo6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpnZXRD
b25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6OjpnZXRDYWxsRGF0YSk6CisgICAgICAgICog
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgIChKU0M6
Ojo6dmFsaWRhdGVSYW5nZSk6CisgICAgICAgIChKU0M6Ojo6c2V0V2l0aFNwZWNpZmljVHlwZSk6
CisgICAgICAgIChKU0M6Ojo6c2V0KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6Ojo6cHV0KToKKyAgICAgICAgKEpTQzo6OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgpOgorICAgICAgICAoSlNDOjo6OnB1dEJ5SW5kZXgpOgorICAgICAgICAo
SlNDOjo6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6Ojpjb3B5
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKEpTQzo6OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToK
KyAgICAgICAgKEpTQzo6OjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgICogcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KToKKyAgICAgICAg
KEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXkpOgorICAgICAgICAo
SlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFy
cmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFycmF5
QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnR5cGVkQXJy
YXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQxNkFycmF5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlw
ZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDMy
QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4QXJyYXkuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5Lmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcik6
CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKToKKyAgICAg
ICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpJbnRlZ3Jh
bFR5cGVkQXJyYXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5
cGVkQXJyYXlBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJh
eUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRv
cjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9E
b3VibGUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b05hdGl2ZSk6Cisg
ICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChK
U0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhD
bGFtcGVkQWRhcHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5
cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6
On5UeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OmNsYXNzSW5mb0ZvclR5cGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlND
Ojp0b0luZGV4KToKKyAgICAgICAgKEpTQzo6aXNUeXBlZFZpZXcpOgorICAgICAgICAoSlNDOjpl
bGVtZW50U2l6ZSk6CisgICAgICAgIChKU0M6OmlzSW50KToKKyAgICAgICAgKEpTQzo6aXNGbG9h
dCk6CisgICAgICAgIChKU0M6OmlzU2lnbmVkKToKKyAgICAgICAgKEpTQzo6aXNDbGFtcGVkKToK
KyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvVWludDE2QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQzMkFycmF5Lmg6CisgICAg
ICAgICogcnVudGltZS9VaW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9VaW50OENsYW1w
ZWRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisK
IDIwMTMtMDgtMTIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgQ29kZUJsb2NrJ3Mgbm90aW9uIG9mIGFkZGluZyBpZGVudGlmaWVycyBlbnRpcmVseQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBEYXRlQ29uc3RydWN0
b3IubHV0LmggXAogICAgIERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVycm9yUHJvdG90eXBl
Lmx1dC5oIFwKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAgICBKU09OT2JqZWN0
Lmx1dC5oIFwKICAgICBKU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1
YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5cGVkQXJyYXlTdHVic19o
Ci0jZGVmaW5lIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRlICJGbG9hdDMyQXJyYXku
aCIKLSNpbmNsdWRlICJGbG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQxNkFycmF5LmgiCi0j
aW5jbHVkZSAiSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJheS5oIgotI2luY2x1ZGUg
IkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCi0j
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFycmF5LmgiCi0jaW5jbHVk
ZSAiVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiVWlu
dDhDbGFtcGVkQXJyYXkuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotICAgIAotI2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0eXBlKSBcCi1jbGFzcyBK
UyMjbmFtZSMjQXJyYXkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeyBcCi1wdWJsaWM6
IFwKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7IFwKLSAgICBzdGF0aWMg
SlMjI25hbWUjI0FycmF5KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNBcnJheT4gaW1wbCkgXAot
ICAgIHsgXAotICAgICAgICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkp
IEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgaW1wbCk7IFwKLSAgICAg
ICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOyBcCi0gICAgICAgIHJl
dHVybiBwdHI7IFwKLSAgICB9XAotXAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7XAotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
O1wKLSAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlND
OjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCk7
XAotICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87XAotXAotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtc
Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgJnNfaW5mbyk7XAotICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7XAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBK
U0M6OlR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJh
eSMjbmFtZTtcCi0gICAgdWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0
b3JhZ2U7XAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0g
ICAgSlMjI25hbWUjI0FycmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPG5hbWUjI0FycmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
O1wKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5
SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19
O1wKLVwKLWNvbnN0IENsYXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUg
IkFycmF5IiAsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25h
bWUjI0FycmF5KSB9O1wKLVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PG5hbWUjI0FycmF5PiBpbXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1
Y3R1cmUpXAotICAgICwgbV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNB
cnJheTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pO1wKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMj
QXJyYXk6OnNfaW5mbywgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdl
KSwgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAot
ICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlw
dG9yKTtcCi0gICAgbV9zdG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxl
bmd0aCA9IG1faW1wbC0+bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoJnNfaW5mbykpO1wKLX1c
Ci1cCi1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVy
dHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdl
TGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVj
LCBpbmRleCkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcCi0gICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXgg
PCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNj
cmlwdG9yKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtc
Ci0gICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
O1wKLX1cCi1cCi1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XAotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAg
IHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJy
YXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAg
SlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNl
bGwpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8p
O1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmpl
Y3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAot
ICAgIH1cCi0gICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwK
LXtcCi0gICAgbV9pbXBsLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAot
XAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17
XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJy
YXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcCi0gICAgdGhpc09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7XAotICAgIHJldHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wK
LSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5
Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAm
c19pbmZvKTtcCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3Rv
cmFnZUxlbmd0aDsgKytpKVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBpKSk7XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUj
I0FycmF5OjpnZXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTtcCi0gICAgdHlwZSByZXN1
bHQgPSBtX2ltcGwtPml0ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJl
c3VsdCkpXAotICAgICAgICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVz
dWx0KTtcCi19XAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlMjI25hbWUjI0FycmF5KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkudG9JbnQzMihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZy
YW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxu
YW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAg
aWYgKCFidWZmZXIpIFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNy
ZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFs
bCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShV
aW50OCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQ
RURfQVJSQVkoVWludDE2LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90
KTsKLVRZUEVEX0FSUkFZKEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZf
dCk7Ci1UWVBFRF9BUlJBWShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBm
bG9hdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVk
ZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5
LmgiCkBAIC0yMzgsMTYgKzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7
CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBhZGRDb25z
dHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWlu
dDhDbGFtcGVkQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0s
ICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRD
b25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMy
QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJy
YXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0
SlNJbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAi
RmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAgICBhZGRD
b25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0
NjRBcnJheSwgMSk7Ci0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJn
dW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGds
b2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYx
NjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMz
NDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFG
MTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAq
LzsgfTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3Bw
ICovOyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9Owor
CQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJC
NjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2
NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9Owor
CQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5j
cHAgKi87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDhDbGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FF
M0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAq
LzsgfTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07
CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJ
CTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1
RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUx
NEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAv
KiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBG
NEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJ
CTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0Uz
RTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpA
QCAtMzQ5LDcgKzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21t
b25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAq
LzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2
MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1h
Y3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyog
REZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlB
N0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVG
MzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNG
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAw
NUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQx
NkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
N0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJ
CTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBh
dGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0Yy
NzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJh
eUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmll
dy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZC
RjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRh
Vmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0Qx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVk
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcx
N0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBl
ZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZE
QjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBo
YXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0g
ZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1
NCw2ICsxMzUyLDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENh
bGxSZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQx
MTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQw
M0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9p
bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBYnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBG
RUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25E
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGgg
PSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VD
QjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1i
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAw
NTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZE
RDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkw
NTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3
QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYy
QzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQg
LyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYz
MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlC
MEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAv
KiBjb25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlw
dENvcmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlw
ZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2
ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdv
cmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8q
IEFQSSAqLywKQEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEy
MUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFF
NEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAv
KiBHQ0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyog
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJ
CUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlE
MTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEs
OCBAQAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5o
ICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAq
LywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAor
CQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYy
QjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMx
MEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBA
QAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICov
LAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3Bw
ICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2su
aCAqLywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0
dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVy
U2V0dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIu
Y3BwICovLApAQCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJh
eS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8q
IEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTRE
QTgxOEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2
MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5
MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2Qjkx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJC
NjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBG
MkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBG
MkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywK
IAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywK
IAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJ
CQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3
ICszMDQ4LDMyIEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUu
Y3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8s
CiAJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8s
CisJCQkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJ
CTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2
QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBG
MkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJ
OTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhG
QzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0
MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUx
NDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAx
RkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBG
NyAvKiBKU0Z1bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpT
RnVuY3Rpb25JbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZD
NTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
ICovLAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAg
Ki8sCiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8s
CiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25z
LmNwcCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFy
cmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5o
ICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAog
CQkJCTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0
QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRB
MDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJ
CQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICov
LAogCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0Lmgg
Ki8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBG
MkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICov
LAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheXMuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5m
by5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5Lmgg
Ki8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywK
KwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJ
CQlCQzIyQTM5QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJ
CQkJMTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJ
CQkxNDQyNTY1RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1
MSw2ICszMTg2LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0Lmgg
Ki8sCiAJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
Ki8sCiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICov
LAorCQkJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgKi8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNt
YWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5oICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJh
eVZhbHVlTWFwLmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENE
MjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIw
MDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8q
IFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJh
eUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURl
c2NyaXB0b3IuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyog
VHlwZWRBcnJheUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5VHlwZS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJh
eS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rp
b24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAq
LywKQEAgLTM1MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAg
LyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4
RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0Ix
NTBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1
ZmZlcldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2
MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBF
NkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFu
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYx
NjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYw
MEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3
RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNTU1LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBD
YWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBC
MkQxQzEgLyogQ2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRC
Q0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyog
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzU2Niw2ICszNzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyog
Q29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRC
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50
aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJ
CQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9v
dHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRE
RjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYg
LyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYx
OThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJ
QTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZH
Qnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdC
MEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBE
RkdDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJ
CQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEy
IC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
RTZDNEUxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjU4LDYgKzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyog
REZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlE
Rjc0NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcz
QTUzNUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0Ez
RUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5
MjFCMTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkE1ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkg
LyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJC
MkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBC
OENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVD
MTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3
N0IxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAw
QzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVC
OEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAw
QTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBA
CiAJCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25S
YW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgx
N0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBC
QjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdG
MTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnku
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2
MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyAr
Mzk1Miw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFy
cmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50
ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYy
OTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVB
OENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJz
TUlQUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFE
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRl
eHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBK
U0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFF
MDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUs
NiArNDAxNCw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNO
YW1lU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4
MTE1NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzg2Niw2ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpT
U2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAw
NEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlE
QjIgLyogSlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUs
NyBAQAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAz
QjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNX
aXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAv
KiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJ
CQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYw
IC8qIExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcy
IC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJE
N0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MzkyNiw2ICs0MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9B
c3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcx
MCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyog
TWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAog
CQkJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRh
Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0
NDYwIC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0
MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBT
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZB
MDA4RTkyMjIgLyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1
NjBGMDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
MkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIg
LyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5
QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3
IEBACiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUw
IC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRl
TmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQ
cm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAog
CQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgw
MDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3
MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQw
MjQsNiArNDE5NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRo
Q2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNt
YWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYw
IC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNE
MDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZD
MTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0u
aCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5
OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkZEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3Ry
aW5nUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAog
CQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVE
YXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2
IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBB
QUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
OTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAw
RTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjEx
ODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkg
LyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0
IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjRE
MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9l
eHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4
ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3
MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3
RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2
NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQy
M0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyog
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5
NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJB
MTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
ODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5k
bGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8q
IEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVC
N0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAog
CQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0
MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgy
QjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIw
MEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2
REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1
RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRB
RDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NjkwLDYgKzQ4NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtP
YmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5
OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYx
ODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVy
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAv
KiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4
QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NzEyLDYgKzQ4OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcy
OTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUw
ODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1h
cmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBC
MDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlG
NEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2Miwx
NyArNDk0NywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5
Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1
MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4
ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1
IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZC
MTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDgwNSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyog
Vk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZN
SW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVE
OTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZv
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBp
c09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxl
SW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAg
cmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25l
OworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJh
eU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0lu
Zm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8t
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAg
Y2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5
cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVElu
dDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6
CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4
OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVk
OgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQx
NkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6
CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9h
dDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJy
YXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0Ogog
ICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENS
QVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlN
b2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5
VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4Owor
ICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBj
YXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBK
SVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWlu
dDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNh
c2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2Ug
SklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklU
RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRG
bG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9
CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21D
bGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU0Z1bmN0aW9uOjpz
X2luZm8pKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwogICAgIAotICAgIGlmIChjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZSkgewotICAgICAg
ICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgIGNh
c2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKLSAg
ICAgICAgY2FzZSBUeXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDE2
QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNJbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAg
ICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhD
bGFtcGVkOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKLSAgICAg
ICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZB
cnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNVaW50MzJBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAg
ICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlG
bG9hdDY0OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDY0QXJyYXk7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoY2xhc3NJ
bmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICByZXR1cm4gU3BlY0ludDhBcnJheTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0
dXJuIFNwZWNJbnQxNkFycmF5OworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4g
U3BlY0ludDMyQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBTcGVj
VWludDhBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBT
cGVjVWludDhDbGFtcGVkQXJyYXk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1
cm4gU3BlY1VpbnQxNkFycmF5OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJu
IFNwZWNVaW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4g
U3BlY0Zsb2F0MzJBcnJheTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
U3BlY0Zsb2F0NjRBcnJheTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDYgKzQ1OCwzMiBAQCBjb25zdCBjaGFyKiBhcnJheUNv
bnZlcnNpb25Ub1N0cmluZyhBcnJhCiAgICAgfQogfQogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVk
QXJyYXlUeXBlKEFycmF5OjpUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDg7CisgICAgY2Fz
ZSBBcnJheTo6SW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNl
IEFycmF5OjpJbnQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUludDMyOworICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDg7CisgICAgY2FzZSBB
cnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVk
OworICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQx
NjsKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50
MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZs
b2F0MzI7CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgorICAgICAgICByZXR1cm4gVHlw
ZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7Cisg
ICAgfQorfQorCiB2b2lkIEFycmF5TW9kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewogICAgIG91dC5wcmludCh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24oKSwgY29u
dmVyc2lvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
aAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCw4IEBAIGNvbnN0IGNoYXIqIGFy
cmF5Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2wKIGNvbnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25U
b1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOwogY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9u
VG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOwogCitUeXBlZEFycmF5VHlwZSB0b1R5cGVkQXJy
YXlUeXBlKEFycmF5OjpUeXBlKTsKKwogY2xhc3MgQXJyYXlNb2RlIHsKIHB1YmxpYzoKICAgICBB
cnJheU1vZGUoKQpAQCAtMzgwLDYgKzM4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gQXJyYXk6OlN0cmluZzsKICAgICB9CiAgICAgCisgICAgVHlwZWRBcnJheVR5cGUg
dHlwZWRBcnJheVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvVHlwZWRBcnJh
eVR5cGUodHlwZSgpKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFy
cmF5TW9kZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09IG90
aGVyLnR5cGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjY3LDM3ICsyNjY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwg
c2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQz
Ml90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRv
dWJsZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckludFR5cGVkQXJyYXkobm9k
ZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yODczLDQ2ICsyODQ5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
YXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkp
CisgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgx
LDM3ICsyNTgxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25Bcmd1bWVudHMobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGlu
dDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5z
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihm
bG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0
LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlw
ZSkpCisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUs
IHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0yODcyLDQ2ICsyODQ4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBl
ZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFt
cFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAg
ICAgIH0gfQogCiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTM5NTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgzLDMyICs1ODMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxlbnRG
aWxsKGNvbnN0IFNpCiAgICAgfQogfQogICAgIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Iq
IFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2Rl
KQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQu
dm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZt
KCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogSklUQ29tcGls
ZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BS
UmVnIHRlbXBHUFIsIEFycmF5TW9kZSBhcnJheU1vZGUsIEluZGV4aW5nVHlwZSBzaGFwZSkKIHsK
ICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKQEAgLTY5NCw4ICs2NjgsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBy
ZXN1bHQgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7Ci0gICAgCiAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5v
ZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0
KG1fY3VycmVudE5vZGUpOwogICAgICAgICByZXR1cm47CkBAIC03MjcsMjIgKzY5OSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZBcmd1bWVudHM6OnNfaW5m
bzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2Ug
QXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNl
IEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5Ogot
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5
OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0
QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsK
LSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBl
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAog
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21w
aWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBB
U1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAog
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0
aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6
Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlm
IChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0
LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkK
KyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2ln
bmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAt
MjYzOSwxMiArMjYwNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1l
bnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAo
ZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlw
ZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVk
KHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAg
ICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3Rl
ZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVz
dWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXpl
X3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJy
YXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9k
ZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAg
IAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwog
ICAgIApAQCAtMjY3Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1
dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJs
ZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAg
ICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAg
ICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2
NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5n
cHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3Vu
ZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAg
ICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdl
clRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2
YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAg
ICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNj
cmF0Y2godGhpcyk7CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJh
eSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwg
TWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVE
b3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVG
YWlsZWQpOwpAQCAtMjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5n
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jl
c3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5v
ZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3Vs
YXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2Ny
aXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91
ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3Vs
dFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
CiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5
NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNT
RVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2pp
dC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQ
dXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1
dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1f
aml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252
ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDks
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0g
dHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRj
aCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpT
U3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
ZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VS
VChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAg
ICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0
MTI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAg
ICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNj
cmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgpAQCAtNDE5MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkp
KTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5n
dGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
LCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVB
cml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
Tm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZv
aWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVu
dFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0g
ICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90
IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShO
b2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5
cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5
cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwog
ICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBF
eGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1
bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJy
YXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVk
QXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRl
eGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVk
QXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAg
ICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29weVRva2VuLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3Bh
Y2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAg
IEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rl
ZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdD
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVy
R0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFw
JiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdo
aWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBt
X2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJH
Q0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0
aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKyNkZWZp
bmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0RlZmVycmFibGVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNDZWxsOworCisvLyBBIEMtaGVhcC1hbGxvY2F0ZWQgb2JqZWN0IHRoYXQgbWF5IGhh
dmUgYWRkaXRpb25hbCByZWZlcmVuY2UgY291bnRzCisvLyBkdWUgdG8gaW5jb21pbmcgcmVmZXJl
bmNlcyBmcm9tIHRoZSBoZWFwLCB3aGljaCBhcmUgdHJhY2tlZCBpbgorLy8gcmV2ZXJzZTogdGhl
IG9iamVjdCBrbm93cyBpdHMgaW5jb21pbmcgcmVmZXJlbmNlcy4gU3VjaCBvYmplY3RzIGFsc28K
Ky8vIGhhdmUgdGhlIGludmFyaWFudCB0aGF0IHRoZXkgZG9uJ3QgaGF2ZSByZWZlcmVuY2VzIGJh
Y2sgaW50byB0aGUgR0MKKy8vIGhlYXAuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBH
Q0luY29taW5nUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZDxUPiB7Citw
dWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgICAgICA6IG1fZW5jb2RlZFBv
aW50ZXIoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5HQ0luY29taW5nUmVmQ291bnRlZCgp
CisgICAgeworICAgICAgICBpZiAoaGFzVmVjdG9yT2ZDZWxscygpKQorICAgICAgICAgICAgZGVs
ZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mSW5j
b21pbmdSZWZlcmVuY2VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzQW55SW5jb21p
bmcoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkp
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+
c2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBKU0NlbGwqIGluY29taW5nUmVmZXJlbmNlQXQoc2l6
ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0FueUluY29taW5nKCkp
OworICAgICAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghaW5k
ZXgpOworICAgICAgICAgICAgcmV0dXJuIHNpbmdsZXRvbigpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPmF0KGluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8g
SXQncyBnZW5lcmFsbHkgbm90IGEgZ29vZCBpZGVhIHRvIGNhbGwgdGhpcyBkaXJlY3RseSwgc2lu
Y2UgaWYgdGhpcworICAgIC8vIHJldHVybnMgdHJ1ZSwgeW91J3JlIHN1cHBvc2VkIHRvIGFkZCB0
aGlzIG9iamVjdCB0byB0aGUgR0MncyBsaXN0LgorICAgIC8vIENhbGwgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQ6OmFkZFJlZmVyZW5jZSgpIGluc3RlYWQuCisgICAgYm9vbCBhZGRJbmNvbWluZ1Jl
ZmVyZW5jZShKU0NlbGwqKTsKKyAgICAKKyAgICAvLyBBIGZpbHRlciBmdW5jdGlvbiByZXR1cm5z
IHRydWUgaWYgd2Ugd2lzaCB0byBrZWVwIHRoZSBpbmNvbWluZworICAgIC8vIHJlZmVyZW5jZSwg
YW5kIGZhbHNlIGlmIHdlIGRvbid0LiBUaGlzIG1heSBkZWxldGUgdGhlIG9iamVjdCwKKyAgICAv
LyBhbmQgaWYgaXQgZG9lcyBzbywgdGhpcyByZXR1cm5zIHRydWUuIEluIGdlbmVyYWwsIHlvdSBk
b24ndCB3YW50CisgICAgLy8gdG8gdXNlIHRoaXMgd2l0aCBhIGZpbHRlciBmdW5jdGlvbiB0aGF0
IGNhbiByZXR1cm4gZmFsc2UgdW5sZXNzCisgICAgLy8geW91J3JlIGFsc28gd2Fsa2luZyB0aGUg
R0MncyBsaXN0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KKyAg
ICBib29sIGZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBzaW5nbGV0b25GbGFnKCkgeyByZXR1
cm4gMTsgfQorICAgIAorICAgIGJvb2wgaGFzVmVjdG9yT2ZDZWxscygpIGNvbnN0IHsgcmV0dXJu
ICEobV9lbmNvZGVkUG9pbnRlciAmIHNpbmdsZXRvbkZsYWcoKSk7IH0KKyAgICBib29sIGhhc0Fu
eUluY29taW5nKCkgY29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CisgICAgYm9v
bCBoYXNTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBoYXNBbnlJbmNvbWluZygpICYmICFoYXNW
ZWN0b3JPZkNlbGxzKCk7IH0KKyAgICAKKyAgICBKU0NlbGwqIHNpbmdsZXRvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEpTQ2VsbCo+KG1fZW5jb2RlZFBvaW50ZXIgJiB+c2luZ2xldG9uRmxhZygpKTsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3JPZkNlbGxzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFZlY3RvcjxKU0NlbGwqPio+KG1fZW5jb2RlZFBvaW50ZXIpOworICAg
IH0KKyAgICAKKyAgICAvLyBTaW5nbGV0b24gZmxhZyBpcyBzZXQ6IHRoaXMgaXMgYSBKU0NlbGwq
LgorICAgIC8vIFNpbmdsZXRvbiBmbGFnIG5vdCBzZXQ6IHRoaXMgaXMgYSBwb2ludGVyIHRvIGEg
dmVjdG9yIG9mIGNlbGxzLgorICAgIHVpbnRwdHJfdCBtX2VuY29kZWRQb2ludGVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZl
cmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBz
aW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAg
ICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChpbmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBI
ZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAg
ICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBuZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAg
ICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigpKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQo
Y2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChj
ZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0
ZXJGdW5jdGlvbikKK3sKKyAgICBpZiAoIWhhc0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNT
RVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NFUlQodGhpcy0+cmVmQ291bnQo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIEFTU0VSVCh0
aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAKKyAgICBpZiAoaGFzU2luZ2xldG9uKCkpIHsK
KyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNpbmdsZXRvbigpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsK
KyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgcmV0dXJuIHRoaXMt
PnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgIH0KKyAgICAgICAgCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChm
aWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCkt
Pmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQor
ICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0gMikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICAgICAgbV9lbmNvZGVk
UG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAg
IHJldHVybiB0aGlzLT5zZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgSlND
ZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxzKCktPmF0KDApOworICAgIGRlbGV0ZSB2ZWN0
b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgQVNTRVJUKGhhc1NpbmdsZXRv
bigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVCA9IHNvbWUg
c3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwgbXVzdCBzdXBwb3J0IGEgZ2NTaXplRXN0
aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBH
Q0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6CisgICAgR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICAKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3QgaXMgbmV3IHRvIHRoaXMgc2V0LgorICAg
IGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsKKyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7
CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzOyB9OworICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVBbGwoSlNDZWxsKik7CisgICAgc3Rh
dGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAgICAKKyAgICBWZWN0b3I8VCo+IG1fdmVj
dG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
IgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5j
b21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9y
W2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21p
bmdSZWZlcmVuY2UoY2VsbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3ZlY3Rvci5h
cHBlbmQob2JqZWN0KTsKKyAgICBtX2J5dGVzICs9IG9iamVjdC0+Z2NTaXplRXN0aW1hdGVJbkJ5
dGVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lk
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBt
X3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRl
SW5CeXRlcygpOworICAgICAgICBpZiAoIW9iamVjdC0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2Vz
KHJlbW92ZURlYWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fYnl0ZXMgLT0g
c2l6ZTsKKyAgICAgICAgbV92ZWN0b3JbaS0tXSA9IG1fdmVjdG9yLmxhc3QoKTsKKyAgICAgICAg
bV92ZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZUFsbChKU0NlbGwqKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQ8VD46OnJlbW92ZURlYWQoSlNDZWxsKiBjZWxsKQoreworICAgIHJl
dHVybiBIZWFwOjppc01hcmtlZChjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
ICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNs
dWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFsU3dlZXBlci5oIgpA
QCAtMzU4LDYgKzM1OSwxNCBAQCB2b2lkIEhlYXA6OmpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NS
ZWZQCiAgICAgbV9kZmdDb2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7CiB9CiAKK3ZvaWQg
SGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sK
KyAgICBpZiAobV9hcnJheUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKKyAg
ICAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOworICAgICAgICBkaWRBbGxvY2F0ZShi
dWZmZXItPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpKTsKKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6
bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCiB7
CiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3RlZFZhbHVlcy5l
bmQoKTsKQEAgLTYyMSwxNCArNjMwLDE5IEBAIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCiAg
ICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uub2JqZWN0Q291bnQoKTsKIH0KIAorc2l6ZV90IEhlYXA6
OmV4dHJhU2l6ZSgpCit7CisgICAgcmV0dXJuIG1fZXh0cmFNZW1vcnlVc2FnZSArIG1fYXJyYXlC
dWZmZXJzLnNpemUoKTsKK30KKwogc2l6ZV90IEhlYXA6OnNpemUoKQogewotICAgIHJldHVybiBt
X29iamVjdFNwYWNlLnNpemUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIG1fZXh0cmFNZW1v
cnlVc2FnZTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFj
ZS5zaXplKCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OmNhcGFjaXR5KCkKIHsK
LSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdlU3BhY2UuY2Fw
YWNpdHkoKTsKKyAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5jYXBhY2l0eSgpICsgbV9zdG9yYWdl
U3BhY2UuY2FwYWNpdHkoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6cHJvdGVj
dGVkR2xvYmFsT2JqZWN0Q291bnQoKQpAQCAtNzQ1LDYgKzc1OSwxMSBAQCB2b2lkIEhlYXA6OmNv
bGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVf
R0NfTUFSS0VEKCk7CisgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlC
dWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7
CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5z
ZXQoKS5zaXplKCkpOwpAQCAtOTI0LDEyICs5NDMsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnRE
ZWZlcnJhbERlcHRoKCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpk
ZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVu
dERlZmVycmFsRGVwdGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+
PSAxKTsKICAgICAKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFw
OjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50
RGVmZXJyYWxEZXB0aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsy
MiwxMSBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZp
c2l0b3IuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNs
dWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRG
R0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRy
YVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVk
IGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5l
KTsKICAgICAgICAgCiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91
dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAg
dm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9yQVdoaWxlOwogICAgICAgICBmcmllbmQgY2xh
c3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRv
cigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7Cisg
ICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3Jl
bWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5
cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsKICAgICAgICAgTWFya2VkU3BhY2Ug
bV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVkU3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAg
ICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsK
ICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVf
SEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcg
QEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJh
eUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9yVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhh
c2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1
cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5UHJvdG90eXBlVGFibGU7IH0KICAgICAgICAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRhVmlld1RhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0
ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImLCBzaXplX3QgZWxlbWVudFNpemUpOworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAg
ICAgICAgIAogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdU
MC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRv
IHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKQEAg
LTUwMyw4ICs1MDMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBKdW1w
TGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlID0gQ29udGlndW91c1No
YXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJh
eVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRG
bG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3Qg
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgZW51bSBGaW5hbE9i
amVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0OSwzNSArMTU0OSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFy
cmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIs
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMy
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9h
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2Rl
KTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CkBAIC0xNjE4LDM1
ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAg
ICBjYXNlIEpJVEFycmF5U3RvcmFnZToKICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUSW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCAxLCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgbV92bS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRB
cnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
MiwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCA0LCBVbnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRp
bmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSwgbV92bS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0
eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisg
ICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IApAQCAtMTY2OCw4ICsxNjIzLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1K
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5l
c3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7Cisg
ICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVz
dCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBz
byB3aXRob3V0CiAgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUg
aW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5
IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwg
ZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
ZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwg
YmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09
IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAg
ICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1
bHRQYXlsb2FkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJh
c2UsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkp
CisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRp
bWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CkBAIC0xNzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgfQogICAgIAogICAgIEp1bXAgZG9u
ZTsKLSAgICBpZiAoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlw
ZWRBcnJheSkgeworICAgIGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBj
YW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1
c3RlZEltbTMyKDApKTsKICAgICAgICAgCiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJl
c3VsdFBheWxvYWQsIGZwUmVnVDApOwpAQCAtMTc0MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQog
Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsK
KyAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwog
ICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSks
IFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNl
KTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50
U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChi
YXNlLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgZnBSZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9h
dFRvRG91YmxlKGZwUmVnVDAsIGZwUmVnVDApOwpAQCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2Vz
OyAgICAKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mgc2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJv
dW5kaW5nKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAg
IHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4LDggKzE3NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
bGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAg
LTE4MjEsMTEgKzE3ODIsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRl
c2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3Jh
dGNoKTsKICAgICAKLSAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVk
bmVzcywgc2lnbmVkbmVzcyA9IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAg
ICAgIEFTU0VSVCghaXNTaWduZWQodHlwZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3dPckVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAg
ICAgICAgIEp1bXAgdG9vQmlnID0gYnJhbmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwg
VHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAgICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNj
cmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QgogICAgICAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwogICAgIH0KICAgICAK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBl
KSkgewogICAgIGNhc2UgMToKICAgICAgICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4
KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
ODUzLDggKzE4MTQsMTAgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0
QgogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBl
ZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7CisgICAgCiAgICAgdW5zaWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5m
b09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkp
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAg
ICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5OCw5ICsxODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcg
dGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAg
ICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7
CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAg
Y29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxv
YXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQXJyYXlCdWZm
ZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJy
YXlCdWZmZXJDb250ZW50cyYgcmVzdWx0LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
PiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVy
Q29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0
aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkgQEAgYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJy
YXlCdWZmZXJDbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBhbGxW
aWV3c0FyZU5ldXRlcmFibGUgPSB0cnVlOwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0g
bV9maXJzdFZpZXc7IGk7IGkgPSBpLT5tX25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNO
ZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsK
LSAgICB9CisgICAgYm9vbCBpc05ldXRlcmFibGUgPSAhbV9waW5Db3VudDsKIAotICAgIGlmIChh
bGxWaWV3c0FyZU5ldXRlcmFibGUpCisgICAgaWYgKGlzTmV1dGVyYWJsZSkKICAgICAgICAgbV9j
b250ZW50cy50cmFuc2ZlcihyZXN1bHQpOwogICAgIGVsc2UgewogICAgICAgICBtX2NvbnRlbnRz
LmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYsMzYgKzUxLDEzIEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRy
YW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICB3aGlsZSAobV9maXJzdFZpZXcpIHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJy
ZW50ID0gbV9maXJzdFZpZXc7Ci0gICAgICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAg
IGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0g
ICAgICAgICAgICBjdXJyZW50LT5uZXV0ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBl
bmQoY3VycmVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mSW5jb21pbmdSZWZlcmVu
Y2VzKCk7IGktLTspIHsKKyAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFt
aWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7CisgICAg
ICAgIGlmICh2aWV3KQorICAgICAgICAgICAgdmlldy0+bmV1dGVyKCk7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmll
dyogdmlldykKLXsKLSAgICB2aWV3LT5tX2J1ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2
VmlldyA9IDA7Ci0gICAgdmlldy0+bV9uZXh0VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmICht
X2ZpcnN0VmlldykKLSAgICAgICAgbV9maXJzdFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAg
IG1fZmlyc3RWaWV3ID0gdmlldzsKLX0KLQotdm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhB
cnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZm
ZXIpOwotICAgIGlmICh2aWV3LT5tX25leHRWaWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3
LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9wcmV2VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2Vmll
dykKLSAgICAgICAgdmlldy0+bV9wcmV2Vmlldy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZp
ZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3ID09IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0g
dmlldy0+bV9uZXh0VmlldzsKLSAgICB2aWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0Vmll
dyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAt
MjYsMTUgKzI2LDE3IEBACiAjaWZuZGVmIEFycmF5QnVmZmVyX2gKICNkZWZpbmUgQXJyYXlCdWZm
ZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZC5oIgorI2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEFycmF5QnVmZmVyOwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZl
cjsKIAogY2xhc3MgQXJyYXlCdWZmZXJDb250ZW50cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQXJyYXlCdWZmZXJDb250ZW50cyk7CkBAIC00NSw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7
IH0KIAogICAgIGlubGluZSB+QXJyYXlCdWZmZXJDb250ZW50cygpOwotCisgICAgCiAgICAgdm9p
ZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkg
eyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogCkBAIC04NiwxMiArODgsMTMgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOwogfTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4geworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJs
aWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5z
aWduZWQgYnl0ZUxlbmd0aCk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJDb250ZW50cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBieXRlTGVuZ3RoKTsKIAogICAgIC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZC4KICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVu
c2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CkBAIC05OSwxNCArMTAyLDE2IEBAIHB1YmxpYzoKICAg
ICBpbmxpbmUgdm9pZCogZGF0YSgpOwogICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29u
c3Q7CiAgICAgaW5saW5lIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKKyAgICAKKyAgICBp
bmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpIGNvbnN0OwogCiAgICAgaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7
CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29u
c3Q7CisgICAgCisgICAgaW5saW5lIHZvaWQgcGluKCk7CisgICAgaW5saW5lIHZvaWQgdW5waW4o
KTsKIAotICAgIHZvaWQgYWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92
ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+ID4mIG5ldXRlcmVkVmlld3MpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5z
ZmVyKEFycmF5QnVmZmVyQ29udGVudHMmKTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVy
biAhbV9jb250ZW50cy5tX2RhdGE7IH0KIAogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQpAQCAtMTE5
LDggKzEyNCwxMSBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGlu
dCBpbmRleCkgY29uc3Q7CiAgICAgc3RhdGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwg
aW50IGxlZnQsIGludCByaWdodCk7CiAKKyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OwogICAgIEFy
cmF5QnVmZmVyQ29udGVudHMgbV9jb250ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmly
c3RWaWV3OworCitwdWJsaWM6CisgICAgV2VhazxKU0FycmF5QnVmZmVyPiBtX3dyYXBwZXI7CiB9
OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmln
aHQpCkBAIC0xNTksNiArMTY3LDEyIEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVm
ZmVyOjpjcmUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7
CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVk
KGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZm
ZXJDb250ZW50cyBjb250ZW50cyhjb25zdF9jYXN0PHZvaWQqPihkYXRhKSwgYnl0ZUxlbmd0aCk7
CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZW50cyk7Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRz
LCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVt
ZW50cywgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6
ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZm
ZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZlcjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50
cyYgY29udGVudHMpCi0gICAgOiBtX2ZpcnN0VmlldygwKQorICAgIDogbV9waW5Db3VudCgwKQog
ewogICAgIGNvbnRlbnRzLnRyYW5zZmVyKG1fY29udGVudHMpOwogfQpAQCAtMTk0LDYgKzIwOCwx
MSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29udGVudHMubV9zaXplSW5CeXRlczsKIH0KIAorc2l6ZV90IEFycmF5QnVmZmVyOjpnY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBzaXplb2YoQXJyYXlCdWZm
ZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90PihieXRlTGVuZ3RoKCkpOworfQorCiBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25z
dAogewogICAgIHJldHVybiBzbGljZUltcGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgo
ZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywyMyBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJ
bmRleChpbnQgaW5kCiAgICAgcmV0dXJuIGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5n
dGgpOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsK
K30KKwordm9pZCBBcnJheUJ1ZmZlcjo6dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30K
Kwogdm9pZCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0
aWFsaXphdGlvblBvbGljeSBwb2xpY3ksIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsK
LSAgICAvLyBEbyBub3QgYWxsb3cgMzItYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgot
ICAgIC8vIEZJWE1FOiBXaHkgbm90PyBUaGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5
IGNoZWNrcyBpdHMgYXJndW1lbnRzLAotICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMg
YW55IG92ZXJmbG93LCBzbyB3aHkgc2hvdWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50
IHVubmVjZXNzYXJpbHkgcmVzdHJpY3RpdmUgY2hlY2sgaGVyZT8KKyAgICAvLyBEbyBub3QgYWxs
b3cgMzEtYml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgogICAgIGlmIChudW1FbGVtZW50
cykgewogICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRC
eXRlU2l6ZTsKLSAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRC
eXRlU2l6ZSkgeworICAgICAgICBpZiAodG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVu
dEJ5dGVTaXplCisgICAgICAgICAgICB8fCB0b3RhbFNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgICAgICBy
ZXN1bHQubV9kYXRhID0gMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0
LDYgKzI4MSw2IEBAIEFycmF5QnVmZmVyQ29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiB1c2luZyBKU0M6OkFycmF5QnVmZmVyOwotdXNpbmcgSlNDOjpB
cnJheUJ1ZmZlckNvbnRlbnRzOwogCiAjZW5kaWYgLy8gQXJyYXlCdWZmZXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI4ICszMCwzNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotQXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgIDogbV9ieXRl
T2Zmc2V0KGJ5dGVPZmZzZXQpCi0gICAgLCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICwgbV9i
dWZmZXIoYnVmZmVyKQotICAgICwgbV9wcmV2VmlldygwKQotICAgICwgbV9uZXh0VmlldygwKQor
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRl
T2Zmc2V0KGJ5dGVPZmZzZXQpCisgICAgICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKKyAgICAg
ICAgLCBtX2J1ZmZlcihidWZmZXIpCiB7CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8g
KHN0YXRpY19jYXN0PGNoYXIqPihtX2J1ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAw
OwotICAgIGlmIChtX2J1ZmZlcikgCi0gICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwog
fQogCiBBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcoKQogewotICAgIGlmIChtX2J1
ZmZlcikKLSAgICAgICAgbV9idWZmZXItPnJlbW92ZVZpZXcodGhpcyk7CisgICAgaWYgKCFtX2lz
TmV1dGVyYWJsZSkKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CiB9CiAKLXZvaWQgQXJyYXlC
dWZmZXJWaWV3OjpuZXV0ZXIoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUo
Ym9vbCBmbGFnKQogewotICAgIG1fYnVmZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOwor
ICAgIGlmIChmbGFnID09IG1faXNOZXV0ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgbV9pc05ldXRlcmFibGUgPSBmbGFnOworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGlu
KCk7CisgICAgZWxzZQorICAgICAgICBtX2J1ZmZlci0+cGluKCk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBA
CiAjZGVmaW5lIEFycmF5QnVmZmVyVmlld19oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgot
CisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5j
bHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM2LDYxICsz
Niw1NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7Citj
bGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEV4ZWNTdGF0ZTsKKwogY2xhc3MgQXJyYXlCdWZm
ZXJWaWV3IDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7Ci1wdWJsaWM6Ci0g
ICAgZW51bSBWaWV3VHlwZSB7Ci0gICAgICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgs
Ci0gICAgICAgIFR5cGVVaW50OENsYW1wZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAg
VHlwZVVpbnQxNiwKLSAgICAgICAgVHlwZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAg
ICAgICBUeXBlRmxvYXQzMiwKLSAgICAgICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRh
VmlldwotICAgIH07Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOwor
ICBwdWJsaWM6CisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAw
OwogCisgICAgYm9vbCBpc05ldXRlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9idWZmZXIgfHwgbV9idWZmZXItPmlzTmV1dGVyZWQoKTsKKyAgICB9CisgICAgCiAgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChp
c05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyOwogICAgIH0KIAogICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKICAgICB7CisgICAg
ICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIG1fYmFzZUFkZHJlc3M7CiAgICAgfQogCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNv
bnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIHJldHVybiBtX2J5dGVPZmZzZXQ7CiAgICAgfQogCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwogCi0gICAgdm9pZCBzZXROZXV0ZXJhYmxl
KGJvb2wgZmxhZykgeyBtX2lzTmV1dGVyYWJsZSA9IGZsYWc7IH0KKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKTsKICAgICBib29sIGlzTmV1dGVyYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXV0ZXJhYmxlOyB9CiAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdmlydHVhbCB+QXJyYXlCdWZmZXJWaWV3KCk7CiAKLXByb3RlY3RlZDoKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgQXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldEltcGwoQXJyYXlCdWZm
ZXJWaWV3KiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCBzZXRSYW5n
ZUltcGwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFCeXRlTGVuZ3RoLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHplcm9SYW5nZUltcGwodW5zaWduZWQgYnl0
ZU9mZnNldCwgc2l6ZV90IHJhbmdlQnl0ZUxlbmd0aCk7Ci0KLSAgICBzdGF0aWMgaW5saW5lIHZv
aWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQg
YXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKLQogICAgIC8v
IEhlbHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZl
ciBpcwogICAgIC8vIHdpdGhpbiByYW5nZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
ICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgIHN0YXRp
YyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKQogICAgIHsKLSAg
ICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgIGlmIChidWZmZXItPmlzTmV1dGVyZWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHNpemVvZihUKSA+IDEgJiYgYnl0
ZU9mZnNldCAlIHNpemVvZihUKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMSwx
MSArOTUsMjggQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmll
dyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopID0gMDsKKyAgICAKKyAgcHJvdGVj
dGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0
SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGlu
ZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5n
dGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1w
bCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0
YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQg
ZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwogCiAgICAgLy8g
SW5wdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2
aWV3OwogICAgIC8vIG91dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhl
IHVuZGVybHlpbmcgYnVmZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAg
ICBzdGF0aWMgdm9pZCBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0
LCB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmRO
dW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcnJheUJ5dGVPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKm51
bUVsZW1lbnRzKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbWF4T2Zmc2V0ID0gKFVJTlRfTUFY
IC0gYXJyYXlCeXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKCpvZmZzZXQgPiBt
YXhPZmZzZXQpIHsKQEAgLTExOSwxOSArMTMwLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51
bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAg
ICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQog
ICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwg
cGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIAogICAgIHVu
c2lnbmVkIG1fYnl0ZU9mZnNldCA6IDMxOwogICAgIGJvb2wgbV9pc05ldXRlcmFibGUgOiAxOwog
Ci1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBcnJheUJ1ZmZlcjsKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fYnVmZmVyOwotICAgIEFycmF5QnVmZmVyVmlldyogbV9w
cmV2VmlldzsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fbmV4dFZpZXc7CiB9OwogCiBib29sIEFy
cmF5QnVmZmVyVmlldzo6c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqIGFycmF5LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0KQpAQCAtMTc2LDcgKzE4Myw4IEBAIGJvb2wgQXJyYXlCdWZmZXJWaWV3Ojp6ZXJv
UmFuZ2VJbXBsKHVuc2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlclZp
ZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVk
IGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKK3ZvaWQgQXJy
YXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5k
LCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpCiB7CiAgICAg
aWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSGFzaEVudHJ5Owor
Y2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFzaFRhYmxlOwogCiBzdHJ1Y3QgTWV0
aG9kVGFibGUgewpAQCAtOTYsNiArOTcsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKIAogICAg
IHR5cGVkZWYgYm9vbCAoKkdldE93blByb3BlcnR5RGVzY3JpcHRvckZ1bmN0aW9uUHRyKShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIgZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yOworICAgIAorICAgIHR5cGVkZWYgdm9pZCAoKlNsb3dEb3duQW5kV2FzdGVNZW1vcnkp
KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSBzbG93RG93
bkFuZFdhc3RlTWVtb3J5OworICAgIAorICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+ICgqR2V0VHlwZWRBcnJheUltcGwpKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgR2V0
VHlwZWRBcnJheUltcGwgZ2V0VHlwZWRBcnJheUltcGw7CiB9OwogCiAjZGVmaW5lIENSRUFURV9N
RU1CRVJfQ0hFQ0tFUihtZW1iZXIpIFwKQEAgLTEzOSw2ICsxNDYsOCBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpwdXREaXJlY3RWaXJ0dWFsLCBcCiAgICAgICAg
ICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCiAgICAgICAgICZDbGFzc05hbWU6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvciwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5LCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFR5cGVkQXJyYXlJbXBsIFwK
ICAgICB9LCBcCiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAvLyB3YXlz
IHdpdGhvdXQgcmVwZWF0aW5nIHRoZSBsaXN0LgogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJ
RVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAogICAgIG1hY3JvKEFycmF5KSBcCisgICAg
bWFjcm8oQXJyYXlCdWZmZXIpIFwKICAgICBtYWNybyhCb29sZWFuKSBcCiAgICAgbWFjcm8oRGF0
ZSkgXAogICAgIG1hY3JvKEVycm9yKSBcCkBAIC01NSw2ICs1Niw5IEBACiAgICAgbWFjcm8oYXBw
bHkpIFwKICAgICBtYWNybyhhcmd1bWVudHMpIFwKICAgICBtYWNybyhiaW5kKSBcCisgICAgbWFj
cm8oYnVmZmVyKSBcCisgICAgbWFjcm8oYnl0ZUxlbmd0aCkgXAorICAgIG1hY3JvKGJ5dGVPZmZz
ZXQpIFwKICAgICBtYWNybyhieXRlY29kZSkgXAogICAgIG1hY3JvKGJ5dGVjb2RlSW5kZXgpIFwK
ICAgICBtYWNybyhieXRlY29kZXMpIFwKQEAgLTExMiw2ICsxMTYsNyBAQAogICAgIG1hY3JvKHBy
b3BlcnR5SXNFbnVtZXJhYmxlKSBcCiAgICAgbWFjcm8ocHJvdG90eXBlKSBcCiAgICAgbWFjcm8o
c2V0KSBcCisgICAgbWFjcm8oc2xpY2UpIFwKICAgICBtYWNybyhzb3VyY2UpIFwKICAgICBtYWNy
byhzb3VyY2VDb2RlKSBcCiAgICAgbWFjcm8oc3RhY2spIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDE1Mzc3NCkJKGZyb20gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOjE1Mzc3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhVmll
dy5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorCituYW1lc3BhY2UgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgordW5pb24gVmFsdWUgeworICAgIFQgZGF0YTsKKyAgICBjaGFyIGJ5
dGVzW3NpemVvZihUKV07Cit9OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwg
c2l6ZW9mKHVpbnQ4X3QpKTsKKyAgICBpZiAoIWJ1ZmZlci5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQ
dHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIGlm
IChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVP
ZmZzZXQpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVu
Z3RoKGJ5dGVMZW5ndGgpOworICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNrZWRMZW5ndGg7CisgICAgaWYgKGNoZWNr
ZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXIt
PmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworRGF0YVZp
ZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZm
ZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKwor
c3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQ
VShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVy
biAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFy
KiBwLCBjaGFyKiBxKQoreworICAgIGNoYXIgdGVtcCA9ICpwOworICAgICpwID0gKnE7CisgICAg
KnEgPSB0ZW1wOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkK
K3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDEpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNG
b3IzMkJpdHMoY2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDMpOworICAgIHN3YXBC
eXRlcyhwICsgMSwgcCArIDIpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMo
Y2hhciogcCkKK3sKKyAgICBzd2FwQnl0ZXMocCwgcCArIDcpOworICAgIHN3YXBCeXRlcyhwICsg
MSwgcCArIDYpOworICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOworICAgIHN3YXBCeXRlcyhw
ICsgMywgcCArIDQpOworfQorCitzdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2
YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQoreworICAgIGlmICghbmVlZFRv
RmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAo
c2l6ZSkgeworICAgIGNhc2UgMToKKyAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgZmxpcEJ5dGVzRm9y
NjRCaXRzKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK1QgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmIChiZXlv
bmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2Fk
IHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFy
Y2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KKyAgICBWYWx1
ZTxUPiB2YWx1ZTsKKyAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7CisgICAgZmxpcEJ5
dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBy
ZXR1cm4gdmFsdWUuZGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgRGF0YVZp
ZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zm
c2V0KSkgeworICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkg
c2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRv
bid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KKyAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Cisg
ICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKKyAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFs
dWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKKyAgICBtZW1jcHkoc3RhdGljX2Nh
c3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBz
aXplb2YoVCkpOworfQorCitpbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50OF90Pihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCit1aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0
RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOworfQorCitpbnQxNl90IERhdGFW
aWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3VpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKTsKK30KKworaW50MzJfdCBEYXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHJldHVy
biBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit1
aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTx1aW50
MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2Zsb2F0IERhdGFWaWV3
OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwg
bGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK2RvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVj
KTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8aW50OF90PihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6c2V0VWludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKK30K
Kwordm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRh
PGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9p
ZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTx1
aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lk
IERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgc2V0RGF0YTxpbnQz
Ml90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Cit9CisKK3ZvaWQgRGF0
YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8dWludDMy
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRh
Vmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIHNldERhdGE8ZmxvYXQ+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKK30KKwordm9pZCBEYXRhVmlldzo6
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworfQorCit2b2lkIERhdGFWaWV3OjpuZXV0
ZXIoKQoreworICAgIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCk7CisgICAgbV9ieXRlTGVuZ3Ro
ID0gMDsKK30KKworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFW
aWV3LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMzkgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRGF0YVZpZXcuaCIKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKIAot
bmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBU
IGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4g
Y2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVu
Z3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVu
c2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVu
Z3RoKSk7Ci19CituYW1lc3BhY2UgSlNDIHsKIAogRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCkKICAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCkBAIC02
NiwxNzkgKzM3LDE4IEBAIERhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmUK
IHsKIH0KIAotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQot
ewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBsaXR0bGVFbmRpYW47Ci0jZWxzZQot
ICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIHN3YXBC
eXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIgdGVtcCA9ICpwOwotICAgICpwID0g
KnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMo
Y2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBm
bGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDMpOwot
ICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNG
b3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDcpOwotICAgIHN3YXBC
eXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhwICsgMiwgcCArIDUpOwotICAgIHN3
YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRl
ZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5kaWFuKQotewotICAgIGlm
ICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBmbGlwQnl0ZXNGb3IxNkJpdHMo
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGZsaXBCeXRlc0Zv
cjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZmxp
cEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6OmdldERhdGEodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAg
IGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJ
WkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2Fu
dCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVy
cm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4K
LSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0g
ICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFu
KTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZv
aWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChiZXlvbmRSYW5nZTxU
PihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEg
ZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJl
cyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1w
VmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRl
ZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICBtZW1jcHko
c3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVl
LmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0YVZpZXc6OmdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8
aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi11aW50OF90IERhdGFWaWV3Ojpn
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi1pbnQx
Nl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MTZfdD4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQxNl90IERhdGFWaWV3Ojpn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQorUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZz
ZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
ZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0
PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3Ojpn
ZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
dWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsK
LX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQz
Ml90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
c2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0
RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KSk7CiB9CiAKLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitKU0Fy
cmF5QnVmZmVyVmlldyogRGF0YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7CisgICAgcmV0dXJuIEpTRGF0YVZpZXc6OmNyZWF0ZSgK
KyAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKFR5cGVEYXRh
VmlldyksIGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksCisgICAgICAgIGJ5dGVMZW5ndGgoKSk7CiB9
CiAKLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0
ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24g
MTUzNzc0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oOjE1Mzc3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERhdGFWaWV3X2gKKyNkZWZp
bmUgRGF0YVZpZXdfaAorCisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVm
ZmVyVmlldyB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAg
aW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQx
Nl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2Us
IGVjKTsgfQorICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGludDMyX3QgZ2V0SW50MzIodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5
dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KKyAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7CisgICAgdWludDMy
X3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQorICAgIHVpbnQzMl90IGdl
dFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsg
fQorICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zm
c2V0LCBmYWxzZSwgZWMpOyB9CisgICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgc2V0
SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZh
bHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNl
cHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7
IH0KKyAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAorICAgIHZvaWQgc2V0
SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9CisgICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZs
b2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KKyAg
ICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOworCitwcml2YXRlOgor
ICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
aW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1
cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+
IG1fYnl0ZUxlbmd0aDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldERh
dGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KSBjb25zdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXREYXRhKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7CisKKyAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Cit9OworCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDc2ICsyNiw2NyBAQAog
I2lmbmRlZiBEYXRhVmlld19oCiAjZGVmaW5lIERhdGFWaWV3X2gKIAotI2luY2x1ZGUgPHJ1bnRp
bWUvQXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5j
bHVkZSA8d3RmL0ZsaXBCeXRlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKK25hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgeworcHJv
dGVjdGVkOgorICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
LSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVM
ZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShp
bnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5z
aWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWlu
dDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90
IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0g
ICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRV
aW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3Qg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQo
Ynl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ieXRlTGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFR5
cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIFR5cGVE
YXRhVmlldzsKICAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7
Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCisgICAgdmlydHVhbCBKU0Fy
cmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5z
aWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5n
dGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQorICAgIFQgZ2V0KHVuc2ln
bmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgewor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQp
ID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3Rh
dHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzKSArIG9m
ZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBU
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0
KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1
cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zm
c2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1
cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVu
Z3RoKCkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhf
dCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxp
dHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9CiAKK3ByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9ieXRlTGVuZ3RoOwogfTsKIAotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9
IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERhdGFWaWV3X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNyw4MSArMjYsOSBAQAogI2lmbmRlZiBGbG9hdDMyQXJyYXlfaAogI2RlZmluZSBGbG9h
dDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQzMkFycmF5IDog
cHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKGNvbnN0IGZsb2F0
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFR5cGVk
QXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1
ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8g
TWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNz
IFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBG
bG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKGNvbnN0IGZsb2F0KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9h
dD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJheT4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxv
YXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEZsb2F0MzJB
cnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5OjpGbG9hdDMyQXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0
aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8
RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpGbG9hdDMyQXJyYXk7CiAKICNlbmRp
ZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsOTggKzEwLDI1IEBACiAg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8K
IAogI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAogI2RlZmluZSBGbG9hdDY0QXJyYXlfaAogCi0jaW5j
bHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQ2NEFycmF5IDogcHVibGljIFR5cGVkQXJyYXlC
YXNlPGRvdWJsZT4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDY0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShjb25zdCBkb3VibGUqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxk
b3VibGU+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5cGVkQXJyYXlCYXNlPGRvdWJsZT46Om1f
bGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxkb3Vi
bGU+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUZsb2F0NjQ7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIGlubGluZSBGbG9hdDY0QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgCi0gICAgLy8gTWFrZSBj
b25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVk
QXJyYXlCYXNlPGRvdWJsZT47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2
NEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+
OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxG
bG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9h
dDY0QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGVVbmluaXRpYWxpemVkPEZsb2F0NjRB
cnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQ2NEFycmF5OjpGbG9hdDY0QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxkb3VibGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpzdWJh
cnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5n
dGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PEZsb2F0NjRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQ2NEFycmF5OwogCiAjZW5k
aWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVm
aW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1Ymxp
YyBBcnJheUJ1ZmZlclZpZXcgeworcHJvdGVjdGVkOgorICAgIEdlbmVyaWNUeXBlZEFycmF5Vmll
dyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpOworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4oYmFzZUFk
ZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgemVyb1JhbmdlKHVuc2lnbmVk
IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVybiB6ZXJvUmFuZ2VJ
bXBsKG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwgbGVuZ3RoICogc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB6ZXJv
RmlsbCgpIHsgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisgICAgCisgICAg
dmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBsZW5ndGgoKSAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICB9CisKKyAg
ICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHRoaXMt
Pmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHRoaXMtPmxl
bmd0aCgpKTsKKyAgICAgICAgZGF0YSgpW2luZGV4XSA9IEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGVja0luYm91bmREYXRhKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiAob2Zmc2V0IDw9IGxlbmd0aAorICAgICAg
ICAgICAgJiYgb2Zmc2V0ICsgcG9zIDw9IGxlbmd0aAorICAgICAgICAgICAgLy8gY2hlY2sgb3Zl
cmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA+PSBvZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gc3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gc3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFR5cGVkQXJy
YXlUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OnR5
cGVWYWx1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9s
ZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
KyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3KAor
ICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQorICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNl
dCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4gR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgs
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3Ro
KQoreworICAgIFJlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHJlc3VsdCA9IGNyZWF0ZShs
ZW5ndGgpOworICAgIG1lbWNweShyZXN1bHQtPmRhdGEoKSwgYXJyYXksIGxlbmd0aCAqIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBw
YXNzZWRCdWZmZXI7CisgICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQ
YXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQor
eworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0KKyAgICAgICAgQXJyYXlCdWZmZXI6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3Jl
YXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAoreworICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Cit7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zm
c2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIHRoaXMtPmxlbmd0aCgpLCAmb2Zmc2V0LCAmbGVuZ3Ro
KTsKKyAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPEFkYXB0b3I6OlR5cGU+KGJ1ZmZlcigp
LCBieXRlT2Zmc2V0KCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyKCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTQXJyYXlCdWZmZXJWaWV3KiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OndyYXAo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBBZGFwdG9yOjpKU1ZpZXdUeXBlOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShBZGFwdG9yOjp0eXBlVmFsdWUp
LCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdIZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNs
YXNzIEJ1dHRlcmZseTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFN0cnVj
dHVyZTsKQEAgLTY0LDYgKzY1LDkgQEAgcHVibGljOgogICAgIHVpbnQzMl90IHB1YmxpY0xlbmd0
aCgpIHsgcmV0dXJuIHUubGVuZ3Rocy5wdWJsaWNMZW5ndGg7IH0KICAgICB2b2lkIHNldFB1Ymxp
Y0xlbmd0aCh1aW50MzJfdCBhdXhXb3JkKSB7IHUubGVuZ3Rocy5wdWJsaWNMZW5ndGggPSBhdXhX
b3JkOyB9CiAgICAgCisgICAgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyKCkgeyByZXR1cm4gdS50
eXBlZEFycmF5LmJ1ZmZlcjsgfQorICAgIHZvaWQgc2V0QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXIq
IGJ1ZmZlcikgeyB1LnR5cGVkQXJyYXkuYnVmZmVyID0gYnVmZmVyOyB9CisgICAgCiAgICAgc3Rh
dGljIEluZGV4aW5nSGVhZGVyKiBmcm9tKEJ1dHRlcmZseSogYnV0dGVyZmx5KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPihidXR0ZXJmbHkp
IC0gMTsKQEAgLTExNyw2ICsxMjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHVpbnQzMl90
IHB1YmxpY0xlbmd0aDsgLy8gVGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBkZXBlbmRzIG9uIHRo
ZSBhcnJheSB0eXBlLCBidXQgZm9yIGFsbCBKU0FycmF5cyB3ZSByZWx5IG9uIHRoaXMgYmVpbmcg
dGhlIHB1YmxpY2x5IHZpc2libGUgbGVuZ3RoIChhcnJheS5sZW5ndGgpLgogICAgICAgICAgICAg
dWludDMyX3QgdmVjdG9yTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBpbmRleGVkIHByb3Bl
cnR5IHN0b3JhZ2UuIFRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgc3RvcmFnZSBkZXBlbmRzIG9uIHRo
aXMsIGFuZCB0aGUgdHlwZS4KICAgICAgICAgfSBsZW5ndGhzOworICAgICAgICAKKyAgICAgICAg
c3RydWN0IHsKKyAgICAgICAgICAgIEFycmF5QnVmZmVyKiBidWZmZXI7CisgICAgICAgIH0gdHlw
ZWRBcnJheTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc3ICsyNiw5IEBACiAjaWZuZGVm
IEludDhBcnJheV9oCiAjZGVmaW5lIEludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgSW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90
PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhB
cnJheT4gY3JlYXRlKGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkg
d2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVj
dGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLSAgICB1c2lu
ZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDhfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIFR5cGVJbnQ4OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50OEFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDhfdD47Ci19OwotCi1QYXNzUmVm
UHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoY29uc3QgaW50
OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGU8SW50OEFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxpbnQ4X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDhBcnJheT4obGVuZ3Ro
KTsKLX0KLQotSW50OEFycmF5OjpJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPGludDhfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50OEFycmF5PihzdGFydCwgZW5k
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAog
dXNpbmcgSlNDOjpJbnQ4QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQ4QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTM5
NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNiw3NyArMjYsOSBAQAogI2lmbmRlZiBJbnQxNkFycmF5X2gKICNkZWZpbmUgSW50MTZB
cnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsKLQotY2xhc3MgSW50MTZBcnJheSA6IHB1Ymxp
YyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQx
Nl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNl
ZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0g
ICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0
aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBU
eXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
Vmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDE2
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgSW50MTZBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBj
bGFzcyBUeXBlZEFycmF5QmFzZTxpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJh
eT4gSW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQxNl90KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQx
Nl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJh
eTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLUludDE2QXJyYXk6OkludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsK
LX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQxNkFycmF5
PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKIAogdXNpbmcgSlNDOjpJbnQxNkFycmF5OwogCiAjZW5kaWYgLy8gSW50MTZBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQzMkFycmF5LmgJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMy
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
ICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgpAQCAtMjcsNzQgKzI2LDkgQEAKICNpZm5kZWYgSW50MzJBcnJheV9oCiAj
ZGVmaW5lIEludDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPGludD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50
Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IGlubGluZSBJbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJs
ZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ+Owot
fTsKLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJB
cnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5Ojpj
cmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8SW50MzJBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+
IEludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGVVbmluaXRpYWxpemVkPEludDMyQXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUludDMyQXJyYXk6OkludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkp
OwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDMyQXJy
YXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBJbnQzMkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFz
ZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKwor
SlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBK
U0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9
CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIp
Cit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAg
SlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0
cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVj
dHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksICZzX2luZm8sCisgICAgICAgIE5vbkFycmF5KTsKK30KKworYm9vbCBKU0FycmF5QnVm
ZmVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09i
amVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKAorICAgICAgICAgICAganNOdW1iZXIodGhpc09iamVjdC0+aW1wbCgpLT5ieXRl
TGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpT
QXJyYXlCdWZmZXI6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5p
c1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gYSByZWFkLW9ubHkgYXJyYXkg
YnVmZmVyIHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJh
c2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30K
KworYm9vbCBKU0FycmF5QnVmZmVyOjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVj
dCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0
dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7Cisg
ICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJy
YXlCdWZmZXI6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9i
amVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
KyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAg
ICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgYXJyYXksIG1vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZl
ciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAg
IAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRv
cihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2
YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlCdWZmZXIq
IHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB3cmFw
cGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlmICghd3Jh
cHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geworICAgICJGdW5jdGlvbiIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IpCit9OworCitKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvcigKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSwgIkFycmF5QnVmZmVyIik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KTsKK30KKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSwgcHJvdG90eXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1
cmUqIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5
QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+
KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkFycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4i
KSk7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVt
b3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgCisgICAgSlNBcnJh
eUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgICAgICBleGVjLT52
bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCks
IGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQor
CitDb25zdHJ1Y3RUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YSgKKyAgICBKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZmZXI7CisgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCitDYWxsVHlwZSBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAg
ICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICBy
ZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERh
dGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiRXJy
b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVuY1Ns
aWNlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIHNsaWNlIG11c3QgYmUgYW4g
YXJyYXkgYnVmZmVyLiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgaW50
MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAg
ICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKKyAgICAKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2UoYmVn
aW4sIGVuZCk7CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgp
LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3Vs
dCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG5ld0J1ZmZl
cik7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitjb25z
dCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c19pbmZvID0geworICAgICJBcnJh
eUJ1ZmZlclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNBcnJheUJ1ZmZlclByb3RvdHlwZSkKK307CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGU6
OkpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5zbGljZSwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSwgRG9udEVudW0sIDIp
OworfQorCitKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpj
cmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAg
ICBKU0FycmF5QnVmZmVyUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+
ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZV9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVfaAorCisjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKFZNJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOworICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlclZpZXc6OnNfaW5mbyA9IHsKKyAgICAi
QXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUsCisgICAgSW5p
dGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgICwgbV9sZW5n
dGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkKK3sKKyAgICBpZiAobGVuZ3RoIDw9IGZh
c3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCBHQyBhbGxvY2F0aW9uLgorICAgICAg
ICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1l
bnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZSgwLCBzaXpl
LCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVtcDsKKyAgICAgICAgbV9tb2RlID0gRmFz
dFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAobW9kZSA9
PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0X3QqIGFzV29yZHMgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNp
emUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAgICAgICAgICAgICAgIGFzV29yZHNbaV0g
PSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBhbGxvdyBhIHR5cGVkIGFycmF5
IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChsZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAgIGlmICghdHJ5RmFzdENhbGxvYyhsZW5n
dGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0aCAqIGVsZW1l
bnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHN0YXRpY19jYXN0PHNpemVf
dD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVkQXJyYXk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6
IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1fdmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBlZEFycmF5KQoreworICAgIEluZGV4aW5n
SGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4aW5nSGVhZGVyLnNldEFycmF5QnVmZmVy
KGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRl
KHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRlciwgMCk7Cit9CisKK0pTQXJyYXlCdWZm
ZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNv
bnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRl
cmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3Ro
KGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUoY29udGV4dC5tb2RlKCkpCit7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNl
IEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVk
QXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxpemVyKHRoaXMsIGZpbmFsaXplKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICB2bS5o
ZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJy
YXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNl
dCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpIHsKKyAgICAgICAgc2xvdC5z
ZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+
dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
dGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkubV90eXBlZEFycmF5
Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpLAorICAgICAgICAgICAgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVy
dHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJy
YXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCBzaG91bGRUaHJvdywgIkF0dGVt
cHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1
ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAg
ICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU0FycmF5QnVm
ZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gbGVuZ3RoL2J5dGVP
ZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCisgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOworICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBhcnJheS5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAgfQorICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFsaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBl
ZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAg
IGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICBm
YXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJh
eUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdv
IHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3ZpZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVwZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJh
bWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2VudHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUg
IkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGljaAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVu
IGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmlldyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAg
IHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8v
IFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRl
ciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFuZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBt
dWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUgbm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBs
YXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFsbW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFu
dGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcg
YSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdpdGggV2ViQ29yZSByaWdodCBub3cuCisvLwor
Ly8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBzYXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5
IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBpcyBub3QgaW5zdGFudGlhYmxlLCBkZXNwaXRl
IGhhdmluZyBhICJjb25zdHJ1Y3RvciIgYW5kIGEKKy8vIHByb3RvdHlwZS4KKworLy8gVHlwZWQg
YXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhl
eSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVx
dWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQg
bmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNt
YWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0
b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFy
cmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2
aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJn
ZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAor
ICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBj
b3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3Ig
YWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlw
ZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0
aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8g
ZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQg
YXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVy
CisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZl
IGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRz
IGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2Nh
dGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAg
ICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVk
QXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBp
dCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyVmll
dyBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWlyZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5n
IG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2luZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHku
IFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRo
ZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RUYWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBp
bXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8gbmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291
bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBpbnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFzcyBKU0FycmF5QnVmZmVyVmlldyA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9
IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAobGVuZ3RoICogZWxl
bWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSkKKyAgICAgICAgICAgICYgfihz
aXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xh
c3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0g
SW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGwsIERvbnRJbml0aWFsaXplIH07CisgICAgICAg
IAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3Ry
dWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6
YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAgICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCog
dmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUg
bW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVyZmx5OyB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVj
dG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUg
bV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1fYnV0dGVyZmx5OworICAgIH07CisgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheUJ1ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25D
b250ZXh0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBi
dWZmZXIsIG5hdGl2ZSB2aWV3LCBhbmQgSlMgYnVmZmVyOyBhbHNvCisgICAgLy8gbW92ZXMgdGhl
IGRhdGEgaW50byB0aGUgQyBoZWFwIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7Cisg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigp
OworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8g
c19pbmZvOworICAgIAorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3
LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxs
Kik7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1
aW50MzJfdCBtX2xlbmd0aDsKKyAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUo
KS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVy
KiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVy
KCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwoKQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgp
LT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsKK30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6Om5ldXRlcigpCit7CisgICAgbV9sZW5ndGggPSAwOworfQorCitpbmxpbmUgdW5zaWdu
ZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0g
V2FzdGVmdWxUeXBlZEFycmF5KSB7CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVk
QXJyYXkgfHwgbV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICBwdHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obV92ZWN0b3IpIC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5k
YXRhKCkpOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihkZWx0YSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBk
ZWx0YSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1
IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK3ZvaWQgSlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlC
dWZmZXJWaWV3KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0Fy
cmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xv
dFZpc2l0b3IuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYg
KzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhl
Y1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9i
amVjdDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwpAQCAtMTM0LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVk
U3RydWN0dXJlKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2Vu
ZGlmCiAgICAgICAgIAotICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5
U3RvcmFnZVR5cGUgPSBUeXBlZEFycmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKQEAgLTE1Miw2ICsxNTMsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmll
dyopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFW
aWV3IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3
KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0
JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyog
SlNEYXRhVmlldzo6Y3JlYXRlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2
ZXJpZnlTdWJSYW5nZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7
CisgICAgICAgIHRocm93Vk1FcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0
ZU9mZnNldCwgYnl0ZUxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZp
ZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZp
ZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0Rh
dGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2ln
bmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOwor
fQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
dW5zaWduZWQsIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gSlNEYXRhVmlldzo6
dHlwZWRJbXBsKCkKK3sKKyAgICByZXR1cm4gRGF0YVZpZXc6OmNyZWF0ZShidWZmZXIoKSwgYnl0
ZU9mZnNldCgpLCBsZW5ndGgoKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVy
dHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTRGF0YVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBz
bG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNE
YXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5tX2xlbmd0aCksIERvbnRFbnVtIHwgUmVh
ZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpOworfQorCit2b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6Z2V0VHlw
ZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3OjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvLAorICAgICAgICBOb25BcnJheSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNk
ZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3
IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJy
YXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXpl
ID0gMTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9u
Q29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUo
CisgICAgICAgIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3aGljaCBkb24ndCBhY3R1YWxseSB3b3JrOyB0aGVz
ZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAgIC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0ZSBzcGVj
aWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUuCisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0
ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxEYXRh
Vmlldz4gdHlwZWRJbXBsKCk7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVEYXRhVmlldzsKKworcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKworICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnko
SlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXdQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmll
dy5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6
c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4
ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZp
ZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmgKK0BiZWdpbiBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBnZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY1NldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorQGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3Rv
dHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQoreworfQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0RhdGFWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlw
ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOworfQorCitib29sIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PigKKyAgICAgICAgZXhl
YywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3Rv
dHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wg
SlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwK
KyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0
YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNTdGF0
ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUqPihvYmpl
Y3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcq
PihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERh
dGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKHRoZSBieXRl
T2Zmc2V0KS4iKSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBi
b29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGxp
dHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0g
ZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAg
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3Io
KSkgKyBieXRlT2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBzZXRE
YXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHlu
YW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFW
aWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7
CisgICAgCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0
IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZh
bHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAg
IGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBi
b3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7Cisg
ICAgCisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRp
Y19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1
ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dl
dEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFk
YXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZs
b2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0
RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
c2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0
RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
aW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9o
CisjZGVmaW5lIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0
dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2lu
Zm87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigKKyAgICAgICAgSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3
UHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9h
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNG
bG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRmxvYXQ2NEFycmF5X2gKKyNkZWZpbmUgSlNG
bG9hdDY0QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNGbG9hdDY0QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAor
I2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlldy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlz
IG91ciByZXByZXNlbnRhdGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBm
cm9tIEphdmFTY3JpcHQuIEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJh
eSgxMDApOworLy8KKy8vIEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8g
ICAgIFN0cnVjdHVyZSogUyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIg
ICAgIC8vIGZyb20gSlNPYmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQz
Ml90IEwKKy8vICAgICBUeXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2Ug
dXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBp
dCB0YWtlIGxlc3Mgd29yZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0
b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBt
b2Rlcy4gViBhbHdheXMgcG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRh
dGEsCisvLyBhbmQgbWF5IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwg
b3IgZGF0YSBpbiB0aGUgQyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50
cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nl
c3NlcyB0byB0aGUgdmlldyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhl
cgorLy8gd2F5LiBNIHNwZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVu
Z3RoLCBpbiB1bml0cyB0aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBU
aGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0
aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7
IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90
IGFzIGFuIGV4YW1wbGU6CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYg
aW50OF90IFR5cGU7CisvLyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAg
dHlwZWRlZiBKU0ludDhBcnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9O
YXRpdmUoZG91YmxlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOwor
Ly8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAg
ICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJs
ZSB0b0RvdWJsZShpbnQ4X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZN
JiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVV
bmluaXRpYWxpemVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVh
dGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBl
PiBpbXBsKTsKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1
Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmll
d1R5cGU+IGltcGwpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNp
emVfdCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0K
KyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsK
KyAgICB9CisKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVk
IGFjY2VzcyBtZXRob2RzIHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRo
ZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9v
bCBjYW5TZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
IDwgbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZ2V0
SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlB
c05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUo
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAg
ICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJ
bmRleFF1aWNrbHlUb0RvdWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZh
bHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
c2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSBqc1Zh
bHVlKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0
b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2ts
eVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBjYW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3RoCisg
ICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAgIC8v
IGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zmc2V0
OworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYgaXQg
cmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBleGNl
cHRpb24uCisgICAgYm9vbCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
c2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUo
RXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24g
ZXJyb3I7IGlmIGl0IHJldHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJv
d24gYW4gZXhjZXB0aW9uLgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IHR5cGVkSW1wbCgpCisgICAgeworICAgICAgICByZXR1
cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5n
dGgoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19p
bmZvLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlU
eXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2
b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKTsKKworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICAvLyBBbGxvY2F0
ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlciBhbmQgbW92ZXMgZGF0YSBpbnRvIHRoZSBDIGhl
YXAgaWYKKyAgICAvLyBuZWNlc3NhcnkuIE5vdGUgdGhhdCB0aGlzIG5ldmVyIGFsbG9jYXRlcyBp
biB0aGUgR0MgaGVhcC4KKyAgICBzdGF0aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpT
QXJyYXlCdWZmZXJWaWV3Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiBnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopOworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK2lubGluZSBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZp
ZXdUeXBlPiB0b05hdGl2ZVR5cGVkVmlldyhKU1ZhbHVlIHZhbHVlKQoreworICAgIHR5cGVuYW1l
IEFkYXB0b3I6OkpTVmlld1R5cGUqIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PHR5cGVuYW1lIEFk
YXB0b3I6OkpTVmlld1R5cGUqPih2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgor
ICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBl
IGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXNfaAorI2RlZmlu
ZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisKKyNpbmNsdWRl
ICJFcnJvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
T2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSwgbmFtZSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMyksIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5
cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5m
byk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBj
b25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAg
ICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKEpT
QXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhl
Yy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
anNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChl
eGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4
ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAg
ICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6
ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVP
ZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAg
ICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNz
OjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3
ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5
LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4g
aW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFu
ZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1
bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikg
eworICAgICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7
CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVV
bmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFyZXN1bHQtPnNldChleGVjLCBvYmplY3QsIG9mZnNldCwg
bGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgfQorICAgIAorICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUu
IikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywg
c3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
Q29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVy
aWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9z
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwq
LCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0g
Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENh
bGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmll
dy5oIgorI2luY2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwg
Q29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Io
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXAp
KQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsK
KyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAg
ICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSwKKyAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dDo6RG9udEluaXRpYWxpemUp
OworICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91
dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Pihl
eGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52
bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJS
YW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkp
IHsKKyAgICAgICAgdGhyb3dFcnJvcigKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
KyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3Vs
dCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMt
PnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gaW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0
aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNl
dCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwg
c3RydWN0dXJlLCBpbXBsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZhbGlkYXRlUmFuZ2UoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBp
ZiAoY2FuQWNjZXNzUmFuZ2VRdWlja2x5KG9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRz
IikpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnNldFdpdGhTcGVjaWZpY1R5cGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBP
dGhlclR5cGUqIG90aGVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICAvLyBIYW5kbGUgdGhlIGhpbGFyaW91cyBjYXNlOiB0aGUgYWN0IG9mIGdldHRpbmcgdGhlIGxl
bmd0aCBjb3VsZCBoYXZlIHJlc3VsdGVkCisgICAgLy8gaW4gbmV1dGVyaW5nLiBXZWxsLCBuby4g
VGhhdCdsbCBuZXZlciBoYXBwZW4gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUKKyAgICAvLyBzaWRl
LWVmZmVjdHMgb24gZ2V0dGluZyB0aGUgbGVuZ3RoIG9mIGEgdHlwZWQgYXJyYXkuIEJ1dCBwcmVk
aWN0aW5nIHdoZXJlIHRoZXJlCisgICAgLy8gYXJlLCBvciBhcmVuJ3QsIHNpZGUtZWZmZWN0cyBp
cyBhIGZvb2wncyBnYW1lIHNvIHdlIHJlc29ydCB0byB0aGlzIGNoZWFwCisgICAgLy8gY2hlY2su
IFdvcnN0IGNhc2UsIGlmIHdlJ3JlIHdyb25nLCBwZW9wbGUgc3RhcnQgc2VlaW5nIGxlc3MgdGhp
bmdzIGdldCBjb3BpZWQKKyAgICAvLyBidXQgd2Ugd29uJ3QgaGF2ZSBhIHNlY3VyaXR5IHZ1bG5l
cmFiaWxpdHkuCisgICAgbGVuZ3RoID0gc3RkOjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkp
OworICAgIAorICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXItPmxlbmd0aCgpICE9IGxl
bmd0aCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
Ikxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBjaGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVu
Z3RoOyBpLS07KQorICAgICAgICBzZXRJbmRleFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdl
dEluZGV4UXVpY2tseShpKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBjb25zdCBDbGFzc0luZm8qIGNpID0gb2Jq
ZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBB
ZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAgICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2Ug
Y2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3JlIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxl
bmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZz
ZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBtZW1jcHkodHlwZWRWZWN0b3IoKSArIG9mZnNldCwgb3RoZXItPnR5cGVkVmVjdG9yKCksIG90
aGVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50
ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50
OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDE2Ogor
ICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQxNkFy
cmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUludDMyOgorICAg
ICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5
Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAg
ICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4o
b2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhDbGFt
cGVkQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWludDE2
OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50
MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQz
MkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0
MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9h
dDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5n
ZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgY2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9u
J3QuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFzZXRJbmRleFF1aWNrbHkoZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5n
ZXQoZXhlYywgaSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blBy
b3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVj
dC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3Qt
Pmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHBy
b3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90
QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHko
aW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVh
cnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3Bl
cnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUu
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFu
SW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZv
eCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwgaXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAg
ICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3IgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFy
cmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAorICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJv
cGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAg
IHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRv
IGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBC
YXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAor
ICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5
TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20o
ZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgfQorICAgIAorICAgIGlmICghdGhpc09i
amVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2ts
eShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5
SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5E
RVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAg
ICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNh
blNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5
LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUg
YmV5b25kCisgICAgICAgIC8vIHRoZSBib3VuZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJBWV9JTkRFWCkgeworICAgICAgICByZXR1cm4gY2Vs
bC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSkpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAg
CisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5TmFtZXMoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJy
YXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9sZW5ndGg7
ICsraSkKKyAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIo
aSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3Zv
aWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwp
OworICAgIAorICAgIHN3aXRjaCAodGhpc09iamVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0
VHlwZWRBcnJheTogeworICAgICAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBl
ZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+
Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBP
dmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVz
YWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5Vmlz
aXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2Vs
bCk7CisgICAgCisgICAgaWYgKHRva2VuID09IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KKyAg
ICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcikp
IHsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAg
ICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgbWVtY3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlz
T2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdW
ZWN0b3I7CisgICAgICAgIHZpc2l0b3IuZGlkQ29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5
dGVTaXplKCkpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNP
YmplY3QsIHZpc2l0b3IsIHRva2VuKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgCisgICAgLy8gV2UgcGxheSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRo
aXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9tIHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2
ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNv
IGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJlIHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRy
aWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGluZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlz
IGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBiaXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9j
YXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2lu
ZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBn
ZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9vdHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNh
c2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBvdmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRv
bid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUu
IFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBjcmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAg
ICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGluZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNs
b3cgZG93biBhbmQgd2FzdGUgbWVtb3J5LgorICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1v
cnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJlZm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisg
ICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFueXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJt
YXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAgICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3Nl
IGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdDIGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVh
cCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdD
KCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVy
KCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAor
ICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYg
IXRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYmIHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkgeworICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxs
IHBvc3NpYmxlLgorICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0
dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0FycmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSwgKmhlYXAtPnZtKCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLAorICAgICAgICAgICAgdGhpc09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsKKyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAg
IGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAg
ICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5nIHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIg
ZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAgLy8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMg
Y2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAg
ICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3Ro
KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJy
YXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigp
LT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0KCkpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
ID0gYnVmZmVyLT5kYXRhKCk7CisgICAgdGhpc09iamVjdC0+bV9tb2RlID0gV2FzdGVmdWxUeXBl
ZEFycmF5OworICAgIGhlYXAtPmFkZFJlZmVyZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUlt
cGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVf
aAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKyNk
ZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBzaG91bGQgYmUg
YSB0eXBlZCBhcnJheSB2aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKSk7CisgICAgCisgICAgSlNP
YmplY3QqIHNvdXJjZUFycmF5ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXNvdXJjZUFycmF5KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJl
IGFuIG9iamVjdC4iKSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBz
b3VyY2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdGhpc09iamVj
dC0+c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiog
Y2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAg
Vmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50
aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEg
dHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMy
X3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID49IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
ZW5kID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gR2V0IHRoZSBsZW5ndGgg
aGVyZTsgbGF0ZXIgYXNzZXJ0IHRoYXQgdGhlIGxlbmd0aCBkaWRuJ3QgY2hhbmdlLgorICAgIHVu
c2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBI
YW5kbGUgbmVnYXRpdmUgaW5kaWNlczogLXggPT4gbGVuZ3RoIC0geAorICAgIGlmIChiZWdpbiA8
IDApCisgICAgICAgIGJlZ2luID0gdGhpc0xlbmd0aCAtIGJlZ2luOworICAgIGlmIChlbmQgPCAw
KQorICAgICAgICBlbmQgPSB0aGlzTGVuZ3RoIC0gZW5kOworICAgIAorICAgIC8vIENsYW1wIHRo
ZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LgorICAgIEFTU0VSVChiZWdpbiA+
PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAgIGJlZ2luID0gc3RkOjptaW4oYmVnaW4s
IHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICBlbmQgPSBzdGQ6Om1pbihl
bmQsIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICAKKyAgICAvLyBDbGFt
cCBlbmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7CisgICAgCisg
ICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gYmVnaW47Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47CisgICAgCisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOworICAgIFJFTEVBU0Vf
QVNTRVJUKGxlbmd0aCA9PSB0aGlzT2JqZWN0LT5sZW5ndGgoKSk7CisgICAgCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFy
cmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKKyAgICAKKyAg
ICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlKAorICAgICAgICBleGVjLCBz
dHJ1Y3R1cmUsIGFycmF5QnVmZmVyLAorICAgICAgICB0aGlzT2JqZWN0LT5ieXRlT2Zmc2V0KCkg
KyBvZmZzZXQgKiBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplLAorICAgICAgICBsZW5ndGggKiBWaWV3
Q2xhc3M6OmVsZW1lbnRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIAorICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CisgICAgCisgICAgSlNDX05B
VElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9G
VU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY1N1YmFycmF5PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0Ns
YXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNyZWF0
ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAg
cmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorU3Ry
dWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVh
dGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAg
ICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUg
IkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFj
a0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNDYWxsYmFja09iamVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAi
TGVnYWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNj
ZXNzb3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhp
cywgMCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJv
dG90eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5k
ZXJzY29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBt
X2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1f
YXJyYXlCdWZmZXJQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpT
SW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQz
MkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50
OCldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0
aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
VWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90
b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0
KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0
YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNJbnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNJbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTVWludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBl
LmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1
cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3Rv
dHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5w
cm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVG
bG9hdDY0KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlRGF0YVZpZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZp
ZXc6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0
cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVy
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmpl
Y3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5NYXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERv
bnRFbnVtKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IgPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7
CisgICAgRml4ZWRBcnJheTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZ
X1RZUEVTPiB0eXBlZEFycmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRo
aXMsIEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6
OmNyZWF0ZSh0aGlzLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAg
IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMy
QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0g
PSBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUu
Z2V0KCksICJVaW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4
KFR5cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xh
bXBlZEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50
MTYpXSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnBy
b3RvdHlwZS5nZXQoKSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9y
c1t0b0luZGV4KFR5cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHRoaXMsIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJG
bG9hdDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZs
b2F0NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0
NjRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9m
dW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2
NCldLnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAK
KyAgICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVy
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJy
YXlJbmRleCA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07
KSB7CisgICAgICAgIG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5jb25zdHJ1Y3RvciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBE
b250RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCks
IElkZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhd
LT5uYW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBE
b250RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNb
XSA9IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5O
YU4sIGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCiAjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oIgogI2luY2x1ZGUgIkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVk
ZSAiTnVtYmVyUHJvdG90eXBlLmgiCkBAIC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3Jp
dGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7
CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAg
ICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJheURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IHByb3RvdHlwZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0
dXJlOworICAgIH07CisgICAgCisgICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVS
X09GX1RZUEVEX0FSUkFZX1RZUEVTPiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lk
KiBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50
ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVi
bGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1
Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJl
LmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIGFycmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4g
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgp
OyB9CisgICAgCisgICAgU3RydWN0dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlU
eXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0lu
ZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9p
bnRlckZvcihTcGVjaWFsOjpQb2ludGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNJbnQ4QXJyYXlfaAorI2RlZmluZSBKU0ludDhBcnJheV9oCisKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50MTZBcnJheV9oCisjZGVmaW5lIEpT
SW50MTZBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U0ludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0lu
dDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMy
QXJyYXlfaAorI2RlZmluZSBKU0ludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisg
ICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7IkZ1bmN0aW9uIiwgJkpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6QmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0Vf
U19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZP
KEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxv
YXQ2NEFycmF5KTsKK01BS0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCisjZGVmaW5lIEpTVHlw
ZWRBcnJheUNvbnN0cnVjdG9yc19oCisKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDhBcnJheT4gSlNJbnQ4QXJyYXlDb25zdHJ1Y3RvcjsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0ludDE2QXJyYXk+
IEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OEFycmF5PiBKU1Vp
bnQ4QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBlZEFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MTZB
cnJheT4gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDMyQXJyYXk+IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rv
cjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0MzJB
cnJheT4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlDb25zdHJ1
Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0RhdGFW
aWV3PiBKU0RhdGFWaWV3Q29uc3RydWN0b3I7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisg
ICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19pbmZv
ID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGU6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjUHJvdG90eXBlKX0KKworTUFLRV9TX0lORk8oSW50
OEFycmF5KTsKK01BS0VfU19JTkZPKEludDE2QXJyYXkpOworTUFLRV9TX0lORk8oSW50MzJBcnJh
eSk7CitNQUtFX1NfSU5GTyhVaW50OEFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZEFy
cmF5KTsKK01BS0VfU19JTkZPKFVpbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQzMkFycmF5
KTsKK01BS0VfU19JTkZPKEZsb2F0MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDY0QXJyYXkp
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19o
CisjZGVmaW5lIEpTVHlwZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlPEpTSW50OEFycmF5PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5
cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJh
eT4gSlNJbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNV
aW50OENsYW1wZWRBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU8SlNVaW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50
MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJy
YXlQcm90b3R5cGU7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFy
cmF5UHJvdG90eXBlc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUgIkNv
cHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19J
TkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGV4dGVybiBjb25zdCBDbGFzc0luZm8gSlMjI3R5
cGUjI0FycmF5OjpzX2luZm8gPSB7IFwKKyAgICAgICAgI3R5cGUgIkFycmF5IiwgJkpTIyN0eXBl
IyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBcCisgICAgICAgIENSRUFURV9NRVRIT0RfVEFC
TEUoSlMjI3R5cGUjI0FycmF5KSBcCisgICAgfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0Vf
U19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsK
K01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9T
X0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2
NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5c19oCisKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFw
dG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQz
MkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpT
VWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVk
QWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7
CisKK3RlbXBsYXRlPD4gSlNfRVhQT1JUREFUQSBleHRlcm4gY29uc3QgQ2xhc3NJbmZvIEpTSW50
OEFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENs
YXNzSW5mbyBKU0ludDE2QXJyYXk6OnNfaW5mbzsKK3RlbXBsYXRlPD4gSlNfRVhQT1JUREFUQSBl
eHRlcm4gY29uc3QgQ2xhc3NJbmZvIEpTSW50MzJBcnJheTo6c19pbmZvOwordGVtcGxhdGU8PiBK
U19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBDbGFzc0luZm8gSlNVaW50OEFycmF5OjpzX2luZm87
Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU1VpbnQ4
Q2xhbXBlZEFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNv
bnN0IENsYXNzSW5mbyBKU1VpbnQxNkFycmF5OjpzX2luZm87Cit0ZW1wbGF0ZTw+IEpTX0VYUE9S
VERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU1VpbnQzMkFycmF5OjpzX2luZm87Cit0ZW1w
bGF0ZTw+IEpTX0VYUE9SVERBVEEgZXh0ZXJuIGNvbnN0IENsYXNzSW5mbyBKU0Zsb2F0MzJBcnJh
eTo6c19pbmZvOwordGVtcGxhdGU8PiBKU19FWFBPUlREQVRBIGV4dGVybiBjb25zdCBDbGFzc0lu
Zm8gSlNGbG9hdDY0QXJyYXk6OnNfaW5mbzsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU1R5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNVaW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhDbGFtcGVkQXJy
YXlfaAorI2RlZmluZSBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNVaW50
MTZBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1Vp
bnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50
MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25zX2gKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZm
ZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNy
ZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVj
dHVyZSgpLCBuYXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJh
eUJ1ZmZlcj4ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRp
b25zaGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEph
dmFTY3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlz
IHdoYXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0
eSBzaW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRo
ZSBBcnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlC
dWZmZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVl
biBjcmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAg
b25lLgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFy
cmF5Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIo
KTsKKyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAg
IHZpcnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IEFycmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTMgKzIz
MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhp
bmdUeXBlKCkpOworICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpCisgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihj
b25zdCBKU0NlbGwqKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9w
ZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRl
cihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0OwogICAgIAogICAgIGJvb2wgbWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
dHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKQEAgLTEwNCw2ICsxMDUsMTcgQEAgaW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uYwogICAgICAgICB2bSwgdWlkLCBhdHRyaWJ1
dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwogfQogCitpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29uc3QKK3sKKyAg
ICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3KG1fY2xhc3NJbmZvLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpLT5tb2RlKCkgPT0gV2FzdGVm
dWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Om1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7CiAgICAgcmV0
dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpICYmIGdsb2JhbE9iamVjdCgp
ID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRB
cnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlw
ZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFs
dWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBU
eXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBl
ZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJh
eVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRp
dmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+
KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBU
eXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50
MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBq
c051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBl
bmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5
VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAg
dHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsK
KyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRp
YyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0
aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2
ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVl
IHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNO
dW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1
ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRv
cjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVp
bnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJB
ZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7
Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhD
bGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9y
PiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0
b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFk
YXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0
NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNs
YXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWlu
dDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+
IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwg
VHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07
CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90
LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4
QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwg
SlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJy
YXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVV
aW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0
b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07
CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwg
RmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0
IFVpbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5
cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xh
bXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5
cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9O
YXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUp
IHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUg
PiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4
X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAg
ICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNs
YW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051
bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1
aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK1R5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
VHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBK
U0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2NsYXNzIFR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNvbnRyb2xsZXI+IHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAg
CisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlE
ZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNj
cmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlND
IHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlw
ZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAot
ICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJh
eVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50
MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0K
LXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3Io
KQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDAp
Ci0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJy
YXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9m
ZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0lu
Zm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwg
bV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xh
c3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNp
emVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3Mgewot
ICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBU
eXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3Vu
ZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVz
Y3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlJbmxpbmVzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUlubGluZXNfaAorCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgiCisjaW5jbHVkZSAiR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisKKyNlbmRp
ZiAvLyBUeXBlZEFycmF5SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNs
dWRlICJKU0RhdGFWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiAmSlNJbnQ4QXJyYXk6OnNfaW5mbzsKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuICZKU1VpbnQ4QXJyYXk6OnNfaW5mbzsKKyAg
ICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiAmSlNVaW50OENsYW1wZWRB
cnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gJkpTSW50
MTZBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuICZK
U1VpbnQxNkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVy
biAmSlNJbnQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gJkpTVWludDMyQXJyYXk6OnNfaW5mbzsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAg
ICAgICByZXR1cm4gJkpTRmxvYXQzMkFycmF5OjpzX2luZm87CisgICAgY2FzZSBUeXBlRmxvYXQ2
NDoKKyAgICAgICAgcmV0dXJuICZKU0Zsb2F0NjRBcnJheTo6c19pbmZvOworICAgIGNhc2UgVHlw
ZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gJkpTRGF0YVZpZXc6OnNfaW5mbzsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6Cisg
ICAgICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50OCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDE2
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4Ogor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OENsYW1wZWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlRmxvYXQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6Cisg
ICAgICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVf
aAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dHJ1Y3QgQ2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFy
cmF5LAorICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVk
LAorICAgIFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBU
eXBlVWludDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVE
YXRhVmlldworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVMgVHlwZURh
dGFWaWV3CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9CisKK2lubGlu
ZSBib29sIGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJyYXlUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAg
ICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBUeXBl
RmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlw
ZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50
MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zs
b2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
VHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9y
PiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+
IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+
IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRB
ZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAg
QEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkg
QEAKICNpZm5kZWYgVWludDhBcnJheV9oCiAjZGVmaW5lIFVpbnQ4QXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93
biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4g
dGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJz
dC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWlu
dDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Ojpz
ZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsKLSAgICB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVj
dG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJh
c2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50
OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50
OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5PihsZW5ndGgpOwotfQotCi1VaW50
OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlND
OjpVaW50OEFycmF5OwogCiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwyNSBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpZm5k
ZWYgVWludDhDbGFtcGVkQXJyYXlfaAogI2RlZmluZSBVaW50OENsYW1wZWRBcnJheV9oCiAKLSNp
bmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDogcHVibGljIFVpbnQ4QXJy
YXkgewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBJdCdzIG9u
bHkgbmVlZGVkIHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGFycmF5Ci0g
ICAgLy8gd2FzIGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVmYXVsdCBpbml0aWFsaXph
dGlvbiBwYXRocwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCi0gICAgaW5saW5l
IHZvaWQgemVyb0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Ojpz
ZXQ7Ci0gICAgaW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpOwot
Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1wZWRBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmll
bmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1w
ZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4
Q2xhbXBlZEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVVbmlu
aXRpYWxpemVkPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQotCi12b2lkIFVpbnQ4Q2xh
bXBlZEFycmF5Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsKLX0K
LQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFs
dWUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAgICAgdmFsdWUgPSAwOwot
ICAgIGVsc2UgaWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9IDI1NTsKLSAgICBkYXRh
KClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKLX0KLQotVWlu
dDhDbGFtcGVkQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBVaW50OEFy
cmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXkoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhDbGFt
cGVkQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5OwogCiAjZW5k
aWYgLy8gVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBA
CiAjaWZuZGVmIFVpbnQxNkFycmF5X2gKICNkZWZpbmUgVWludDE2QXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJy
YXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBp
cyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCBy
ZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGlu
ZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWlu
dDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQxNjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBV
aW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoY29uc3QgdWludDE2X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
VWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5OjpVaW50MTZBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQxNkFycmF5Owog
CiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBA
CiAjaWZuZGVmIFVpbnQzMkFycmF5X2gKICNkZWZpbmUgVWludDMyQXJyYXlfaAogCi0jaW5jbHVk
ZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJy
YXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBp
cyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCBy
ZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGlu
ZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQzMl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWlu
dDMyX3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5
cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTx1aW50MzJfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBV
aW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBh
c3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoY29uc3QgdWludDMyX3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
VWludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQzMkFycmF5OjpVaW50MzJBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+KGJ1ZmZlciwgYnl0
ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJB
cnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShz
dGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheUltcGw8VWludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQzMkFycmF5Owog
CiAjZW5kaWYgLy8gVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJQ
YXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCiAjaW5jbHVkZSAiU3RyaWN0RXZhbEFjdGl2YXRp
b24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCkBAIC04Nyw2ICs4OCw3IEBAIGV4dGVy
biBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclQKIGV4dGVybiBjb25zdCBIYXNoVGFi
bGUgYXJyYXlQcm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYm9vbGVhblBy
b3RvdHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29uVGFibGU7CitleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGRhdGFWaWV3VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRh
dGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiBl
eHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0xNDUsNiArMTQ3
LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgYXJy
YXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5Q29uc3RydWN0
b3JUYWJsZSkpCiAgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihK
U0M6OmFycmF5UHJvdG90eXBlVGFibGUpKQogICAgICwgYm9vbGVhblByb3RvdHlwZVRhYmxlKGZh
c3ROZXc8SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpCisgICAgLCBkYXRh
Vmlld1RhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGFWaWV3VGFibGUpKQogICAgICwg
ZGF0ZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJsZSkpCiAgICAgLCBkYXRl
Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlQ29uc3RydWN0b3JU
YWJsZSkpCiAgICAgLCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6
OmVycm9yUHJvdG90eXBlVGFibGUpKQpAQCAtMjU4LDYgKzI2MSwxMCBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVzZUpJVCgpKQogICAgICAg
ICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0YXRlKCkpOwogI2VuZGlm
CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEgZnJlZSB3YXkgb2YgYXNz
ZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAgLy8gd29uJ3QgdXNlIHRo
aXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBTaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkBAIC0yODksNiArMjk2LDcgQEAg
Vk06On5WTSgpCiAgICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBh
cnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYm9vbGVhblByb3RvdHlw
ZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGRhdGFWaWV3VGFibGUtPmRlbGV0ZVRhYmxlKCk7
CiAgICAgZGF0ZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVDb25zdHJ1Y3RvclRhYmxl
LT5kZWxldGVUYWJsZSgpOwogICAgIGVycm9yUHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CkBAIC0zMDYsNiArMzE0LDcgQEAgVk06On5WTSgpCiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0
ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVUYWJsZSkpOworICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRhVmlld1RhYmxlKSk7CiAgICAgZmFz
dERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkpOwogICAgIGZhc3REZWxl
dGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlQ29uc3RydWN0b3JUYWJsZSkpOwogICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihlcnJvclByb3RvdHlwZVRhYmxlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJUeXBlZEFycmF5RGVzY3Jp
cHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2F0
Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0J1bXBQb2lu
dGVyQWxsb2NhdG9yLmg+CkBAIC02OSwxMyArNjksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBDb2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiAgICAgY2xhc3Mg
RXhlY1N0YXRlOwotICAgIGNsYXNzIEZsb2F0MzJBcnJheTsKLSAgICBjbGFzcyBGbG9hdDY0QXJy
YXk7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRlbnRpZmllclRhYmxlOwot
ICAgIGNsYXNzIEludDhBcnJheTsKLSAgICBjbGFzcyBJbnQxNkFycmF5OwotICAgIGNsYXNzIElu
dDMyQXJyYXk7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC05MywxMCArODgsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3MgUmVnRXhwOwogI2VuZGlm
Ci0gICAgY2xhc3MgVWludDhBcnJheTsKLSAgICBjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLSAg
ICBjbGFzcyBVaW50MTZBcnJheTsKLSAgICBjbGFzcyBVaW50MzJBcnJheTsKICAgICBjbGFzcyBV
bmxpbmtlZENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEV2YWxDb2RlQmxvY2s7CiAgICAg
Y2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0yMzAsNiArMjIxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRh
YmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxlOworICAgICAgICBjb25z
dCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0
ZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwog
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFibGU7CkBAIC0zOTAsNiAr
MzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5UHJvZmlsZXIqIG1fZW5h
YmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5
dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5Q29udHJvbGxlcj4gbV90
eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUqIG1fcmVnRXhwQ2FjaGU7
CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxsb2NhdG9yOwogCkBAIC00
MjgsNTUgKzQyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGhhdmVFbm91Z2hO
ZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hD
b25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9CiAgICAgICAgIHZvaWQg
cmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3U3RyaW5nc1NpbmNlTGFz
dEhhc2hDb25zID0gMDsgfQogCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHR5
cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lzdGVyVHlwZWRBcnJheURl
c2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAgICAgICAgICAgQVNTRVJU
KCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8IG1fIyN0eXBlIyNBcnJh
eURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwKLSAg
ICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNjcmlwdG9yOyBcCi0gICAg
ICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyk7IFwK
LSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiB0eXBlIyNB
cnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3I7IH0KLQotICAg
ICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4KTsKLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJU
eXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFy
cmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAgICByZWdpc3RlclR5cGVk
QXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0
aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
Ci0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJh
eURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50
ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50
MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgot
ICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDhB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
OwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICAgICAgICAgIHJl
dHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVk
QXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAg
ICAgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpIGNvbnN0CiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBtX2FwaUxvY2stPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdM
b2NrKCkgfHwgZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRUaHJlYWQoKTsKQEAgLTUxMCwxNiAr
NDU0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9pbkRlZmluZU93blByb3Bl
cnR5OwogICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNoZTsKICAgICAgICAgUmVm
Q291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7Ci0KLSAgICAgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlw
dG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKICAgICB9OwogCiAjaWYgRU5BQkxFKEdDX1ZB
TElEQVRJT04pCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMy0wOC0xMCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUg
cmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIC0gQWRkZWQgdGhlIG5vdGlvbiBvZiBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVj
dCB0aGF0IGNhbiBiZSBtYXJrZWQgRGVmZXJyZWQsCisgICAgICAgICAgd2hpY2ggaXMgbGlrZSBh
IHNwZWNpYWwtcHVycG9zZSB1cHJlZi4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgYSBjb21t
b24gYnl0ZSBmbGlwcGVyLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OnJlZik6CisgICAgICAgIChXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZTo6aGFzT25lUmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJy
YWJsZVJlZkNvdW50ZWRCYXNlOjpyZWZDb3VudCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVS
ZWZDb3VudGVkQmFzZTo6aXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZD
b3VudGVkQmFzZTo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAg
ICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAo
V1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OnNldElzRGVmZXJyZWRCYXNlKToKKyAgICAg
ICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OmRlcmVmKToKKyAgICAgICAgKFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWQ6OnNldElzRGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJh
YmxlUmVmQ291bnRlZDo6RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZDo6fkRlZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKiB3dGYv
RmxpcEJ5dGVzLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbik6CisgICAgICAgIChXVEY6OmZsaXBCeXRlcyk6CisKIDIwMTMtMDgtMTIgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBpc01haW5U
aHJlYWQgaW1wbGVtZW50YXRpb24gd2l0aCBVU0UoV0VCX1RIUkVBRCkKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBE
ODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2Nr
LmggKi87IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CisJ
CTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAv
KiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1Bv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOEYyQjkx
MTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8q
IENvbXBpbGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJl
YWQuY3BwICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZl
cmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkx
NjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhG
MkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEwMDQxMjNGRiAvKiBE
ZWNpbWFsTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0MTIzRkYgLyogRGVj
aW1hbE51bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNvZGVy
LmggKi8sCisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3Vu
dGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8sCiAJ
CQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQlB
OEE0NzI4MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oICovLApAQCAtNjQ4
LDYgKzY1Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0
cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0
cmVhbS5oICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBGaXhlZEFycmF5Lmgg
Ki8sCisJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovLAogCQkJ
CUE4QTQ3MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJCQkJQThBNDcyQTcx
NTFBODI1QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFEOEI5RDE3MzE4Nzk4
MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5NCw2ICsxMDAwLDcg
QEAKIAkJCQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZGIC8qIE93bkFycmF5
UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZDMTUxQTgyNUIw
MDQxMjNGRiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZEMTUxQTgyNUIw
MDQxMjNGRiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUx
QTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1
Nyw2ICsxMDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5
Q2hhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyog
VGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJh
YmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJs
ZVJlZkNvdW50ZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVS
ZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50
IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVy
cmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0
aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIs
IGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhh
cHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8g
c29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFz
cyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBk
ZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1l
bnQgPSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1f
cmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09u
ZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50
ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9y
ZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsK
KyAgICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRG
bGFnOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVm
Q291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFi
bGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9p
ZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElz
RGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZEJh
c2UodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJs
ZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRf
aAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0Zs
aXBCeXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNk
ZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9v
bCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRs
ZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKwor
aW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
KCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4
KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUg
JiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4
KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1
aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUg
JiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAw
MDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAw
MDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAw
MDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkg
Pj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1Nik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAo
c2l6ZW9mKHZhbHVlKSA9PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVv
Zih2YWx1ZSkgPT0gMikgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFs
OworICAgICAgICAgICAgdWludDE2X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9y
aWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAg
ICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0g
NCkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAg
ICAgdWludDMyX3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFs
dWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4g
dS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkgeworICAgICAg
ICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDY0X3Qg
d29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAg
IHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4oVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCit7CisgICAgaWYgKG5lZWRUb0ZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybiBmbGlwQnl0
ZXModmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZs
aXBCeXRlczsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47CisKKyNlbmRpZiAv
LyBGbGlwQnl0ZXNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTM5NzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjYgQEAKKzIw
MTMtMDgtMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBl
ZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVHlwZWQgYXJyYXlzIGFyZSBub3cgaW1wbGVtZW50ZWQgaW4g
SmF2YVNjcmlwdENvcmUsIGFuZCBXZWJDb3JlIGlzIG1lcmVseSBhCisgICAgICAgIGNsaWVudCBv
ZiB0aGVtLiBUaGVyZSBpcyBvbmx5IG9uZSBsYXllcmluZyB2aW9sYXRpb246IFdlYkNvcmUgaW5z
dGFsbHMgYQorICAgICAgICBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgb24gVk0sIHdoaWNo
IG1ha2VzIHRoZQorICAgICAgICBBcnJheUJ1ZmZlcjwtPkpTQXJyYXlCdWZmZXIgcmVsYXRpb25z
aGlwIHJlc2VtYmxlIERPTSB3cmFwcGVycy4gQnkgZGVmYXVsdCwKKyAgICAgICAgSlNDIG1ha2Vz
IHRoZSBvd25lcnNoaXAgZ28gb25lIHdheTsgdGhlIEpTQXJyYXlCdWZmZXIga2VlcHMgdGhlIEFy
cmF5QnVmZmVyCisgICAgICAgIGFsaXZlIGJ1dCBpZiBBcnJheUJ1ZmZlciBpcyBrZXB0IGFsaXZl
IGZyb20gbmF0aXZlIGNvZGUgdGhlbiB0aGUKKyAgICAgICAgSlNBcnJheUJ5ZmZlciBtYXkgZGll
LiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgd2lsbCBrZWVwIHRoZQorICAgICAgICBKU0Fy
cmF5QnVmZmVyIGFsaXZlIGlmIHRoZSBBcnJheUJ1ZmZlciBpcyBpbiB0aGUgb3BhcXVlIHJvb3Qg
c2V0LgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBub24tSlNET01XcmFwcGVycyBiZWhhdmUg
bGlrZSBET00gd3JhcHBlcnMsIGEgYnVuY2ggb2YgY29kZSBpcworICAgICAgICBjaGFuZ2VkIHRv
IG1ha2UgbW9zdCByZWZlcmVuY2VzIHRvIHdyYXBwZXJzIHJlZmVyIHRvIEpTT2JqZWN0KiByYXRo
ZXIgdGhhbgorICAgICAgICBKU0RPTVdyYXBwZXIqLgorICAgICAgICAKKyAgICAgICAgQXJyYXkg
YnVmZmVyIHZpZXdzIGFyZSBubyB0cmFuc2llbnQ7IHRoZSBKUyBhcnJheSBidWZmZXIgdmlldyB3
cmFwcGVycworICAgICAgICBkb24ndCBvd24gdGhlbSBvciBrZWVwIHRoZW0gYWxpdmUuIFRoaXMg
cmVxdWlyZWQgYSBidW5jaCBvZiBjaGFuZ2VzIHRvIG1ha2UKKyAgICAgICAgYmluZGluZ3MgY29k
ZSB1c2UgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdG8gaG9sZCBvbnRvIHRoZWlyIHZpZXdzLgor
ICAgICAgICAKKyAgICAgICAgQWxzbyB0aGVyZSBpcyBhIGJ1bmNoIG9mIG5ldyBjb2RlIHRvIG1h
a2UgSlNDLXByb3ZpZGVkIGFycmF5IGJ1ZmZlcnMgYW5kCisgICAgICAgIHZpZXdzIG9iZXkgdGhl
IHRvSlMvdG88Q2xhc3NOYW1lPiBpZGlvbSBmb3Igd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcuCisg
ICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGUgRGF0YVZpZXcgQVBJIGlzIG5vdyBjb21wbGV0
ZWx5IGRpZmZlcmVudDogdGhlIEpTRGF0YVZpZXcKKyAgICAgICAgcHJvdmlkZXMgdGhlIHNhbWUg
dXNlci12aXNpYmxlIEpTIEFQSSBidXQgdXNpbmcgaXRzIG93biBpbnRlcm5hbCBtYWdpYzsgdGhl
CisgICAgICAgIEMrKyBjb2RlIHRoYXQgdXNlcyBEYXRhVmlldyBub3cgdXNlcyBhIHJhdGhlciBk
aWZmZXJlbnQgQVBJIHRoYXQgaXMgbm90CisgICAgICAgIGF3YXJlIG9mIHVzdWFsIERPTSBzZW1h
bnRpY3MsIHNpbmNlIGl0J3MgaW4gSlNDIGFuZCBub3QgV2ViQ29yZS4gSXQncworICAgICAgICBl
cXVhbGx5IHVzZWZ1bCBmb3IgYWxsIG9mIFdlYkNvcmUncyBwdXJwb3NlcywgYnV0IHNvbWUgY29k
ZSBoYWQgdG8gY2hhbmdlCisgICAgICAgIHRvIGFkYXB0IHRoZSBuZXcgY29udmVudGlvbnMuCisg
ICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZp
b3IuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3Lmg6IEFkZGVkLgorICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg6
IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlu
bGluZXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBl
ZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXIuaDoKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJP
d25lcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldElubGlu
ZUNhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp0b0lu
dDhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDE2QXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9JbnQzMkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVWludDhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1VpbnQ4Q2xhbXBlZEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OnRvVWludDE2QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50MzJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b0Zsb2F0MzJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Zsb2F0
NjRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0RhdGFWaWV3KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9K
Uyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20u
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURh
dGFDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Omlu
aXROb3JtYWxXb3JsZENsaWVudERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVm
ZmVyT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXI6OndyYXBwZXJPd25lcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtOgorICAgICAgICAoRm9yQWxsUGFyZW50cyk6CisgICAgICAgIChQ
YXJzZUludGVyZmFjZSk6CisgICAgICAgIChTa2lwSW5jbHVkZUhlYWRlcik6CisgICAgICAgIChJ
c1R5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKElzV3JhcHBlclR5cGUpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNG
b3JUeXBlKToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAg
ICAoR2V0TmF0aXZlVHlwZSk6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAo
TmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9u
KToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAg
KiBmaWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JC
dWlsZGVyOjphcHBlbmQpOgorICAgICAgICAqIGZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGw6IFJlbW92ZWQuCisgICAgICAg
ICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9EYXRhVmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
RGF0YVZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9EYXRhVmlldy5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0ludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDE2QXJy
YXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEpOgorICAg
ICAgICAqIHBhZ2UvQ3J5cHRvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxk
V2FpdEZvckxvYWRpbmdPZlJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmV4dHJhY3RLZXlVUklLZXlJREFuZENlcnRpZmljYXRl
RnJvbUluaXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3Vz
dG9tRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwOgorICAgICAgICAqIHRlc3RpbmcvTW9ja0NETS5jcHA6CisKIDIwMTMtMDgtMTIg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0
cy9zZWN1cml0eS9zYW5kYm94ZWQtaWZyYW1lLWludmFsaWQuaHRtbCBpcyBmbGFreSBvbiBNYWMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTUzOTUwKQorKysg
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtMzgy
LDMxICszODIsMTkgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvaHRtbC9UaW1l
UmFuZ2VzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZhbGlkaXR5U3RhdGUuaWRsIFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvVm9pZENhbGxiYWNrLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXJWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNHcmFk
aWVudC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgXAotICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0RPTVBhdGguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVERyYXdC
dWZmZXJzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9JbnQ4QXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJ
bmRleFVpbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVy
aXZhdGl2ZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9h
dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvVWludDhBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWlu
dDhDbGFtcGVkQXJyYXkuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMu
aWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw2
IEBAIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNVJhbmdlRVAKIF9fWk43V2ViQ29y
ZTEyZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU180S1VSTEVS
S04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyZ2NDb250cm9sbGVyRXYKIF9fWk43V2ViQ29y
ZTEyaWNvbkRhdGFiYXNlRXYKLV9fWk43V2ViQ29yZTEydG9VaW50OEFycmF5RU4zSlNDN0pTVmFs
dWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmplY3RFdgogX19aTjdXZWJD
b3JlMTNBWE9iamVjdENhY2hlMThyb290T2JqZWN0Rm9yRnJhbWVFUE5TXzVGcmFtZUUKIF9fWk43
V2ViQ29yZTEzQVhPYmplY3RDYWNoZTIxZ0FjY2Vzc2liaWxpdHlFbmFibGVkRQpAQCAtMjg4LDcg
KzI4Nyw2IEBAIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1MKIF9fWk43
V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEzbGlz
dERpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0VTM18KIF9fWk43V2ViQ29yZTEzcG9pbnRlckN1cnNv
ckV2Ci1fX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZmZXJFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2Vi
Q29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dl
YkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVk
UmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAgLTkw
Nyw3ICs5MDUsNiBAQCBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9fWk43V2ViQ29yZTRQYXRoRDFF
dgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29y
ZTRjb3JlRVAyOE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLV9fWk43V2ViQ29yZTR0b0pT
RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TMF8xMUFycmF5QnVm
ZmVyRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2Jh
bE9iamVjdEVQTlNfMTBDbGllbnRSZWN0RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTNET01TdHJpbmdMaXN0RQogX19aTjdX
ZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
MTRDbGllbnRSZWN0TGlzdEUKQEAgLTI3NDMsNyArMjc0MCw2IEBAIF9fWk43V2ViQ29yZTE2SFRN
TE1lZGlhRWxlbWVudDE2cmV0dXJuVG8KIF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQx
MmlzRnVsbHNjcmVlbkV2CiBfX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMzYWRkRWRkCiBfX1pON1dl
YkNvcmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVlRQotX19aTjdXZWJDb3JlMTR0b0Zsb2F0
MzJBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0
ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBUaW1lUmFuZ2VzRQogX19aTks3V2ViQ29y
ZTEwVGltZVJhbmdlczduZWFyZXN0RWQKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfRGF0YVZp
ZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvRGF0YVZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9G
V0RfSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZmZXIuaD4KKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0pTRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2Vi
Q29yZV9GV0RfSlNEYXRhVmlld19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTRGF0YVZpZXdfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGF0YVZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5
cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0pTVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJh
eXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYg
V2ViQ29yZV9GV0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9U
eXBlZEFycmF5Q29udHJvbGxlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlw
ZWRBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYg
V2ViQ29yZV9GV0RfVHlwZWRBcnJheUlubGluZXNzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlw
ZWRBcnJheUlubGluZXNzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19o
CisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxMiBAQAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2Vy
X2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEZsb2F0MzJBcnJheTsKLWNsYXNzIFVp
bnQ4QXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9CdXM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsOCBAQAogCQkw
QzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNTEwQ0RC
QkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CiAJCTBDNDUz
NDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4
NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OwogCQkwRjA5MDg3RjE0NDRG
REIyMDAwMjg5MTcgLyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9s
bGJhclRoZW1lLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8q
IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rp
b25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovOyB9Owog
CQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgw
MDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyB9OwogCQkwRjEzMTY0MDE2RUQwQ0RF
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxh
dGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04MjgsMTEgKzgzMCw2IEBACiAJCTJFNzU4
NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1ODQxQzEyNzc5QURBMDA2
MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovOyB9OwogCQkyRTk0RjQzQjExOTIw
N0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVS
ZWFkZXIuY3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVh
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0
RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07Ci0JCTJFOTdDQ0VB
MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZp
ZXcuY3BwICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U4MTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9OwotCQkyRTk3Q0NGNzEyOTNBNDNBMDBD
NUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmll
d0N1c3RvbS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFW
aWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
OTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NF
NzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3Jp
cHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQuaCAqLzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhh
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsK
IAkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJDRDExMjFGMDNF
MzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OwpAQCAtMTI4OCw4ICsxMjg1
LDYgQEAKIAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjM3NjBCMTVDNkM2ODQw
MDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNw
cCAqLzsgfTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07Ci0JCTQ5QzdCOTk1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuY3BwICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovOyB9OwogCQk0OUM3Qjk5NzEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVm
ZmVyLmggKi87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3Jh
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovOyB9OwpAQCAtMTM1
MCwyMiArMTM0NSw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVDRUI2RjE0OTk3OTBEMDBD
REQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3Bl
cmF0aW9ucy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVDRjAwMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi87IH07Ci0JCTQ5RUVD
RjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNGbG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICov
OyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY2MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNTEwNTA3MEM0
MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5
LmggKi87IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjgx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjA3MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2
QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJh
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
Q0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
VWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZDMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMEIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFy
cmF5LmggKi87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
ICovOyB9OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFB
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBAIC0xODI3LDggKzE4MDYsNiBAQAogCQk2
RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQw
MDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovOyB9OwogCQk2RTY3RDJBNzEyODBF
OEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0
ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJ
NkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07Ci0JCTZFQkM1RUIwMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBF
NDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CiAJCTZFQkYw
RTQ5MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ2MTJBODkyNjEwMERCMTcwOSAv
KiBPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNTQxMkE4OTI5ODAwREIxNzA5IC8q
IFdlYkdMRXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFQkYwRTUyMTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAg
Ki87IH07CkBAIC0yNTg5LDcgKzI1NjYsNiBAQAogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzgg
LyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50
Lm1tICovOyB9OwogCQk4NjFDMkVBNDEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICovOyB9Owog
CQk4NjFDMkVBNjEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUE1MTNGQjRG
RkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovOyB9OwotCQk4NjI0M0QwMTEx
QkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjQzRDAwMTFCQzMxRjcwMENDMDA2
QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovOyB9OwogCQk4NjUxMkVERTE1NEEyQUVG
MDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYg
LyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgKi87IH07CiAJCTg2NTEyRURGMTU0QTJB
RUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYg
LyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovOyB9OwogCQk4NkJBNzY2RTE2NjQyN0E4
MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJBNzY2RDE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVM
b2FkUmVxdWVzdC5jcHAgKi87IH07CkBAIC0yNzAzLDggKzI2NzksNiBAQAogCQk5MDAxNzc0MTEy
RTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYy
IC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKIAkJOTAwMTc4ODAxMkUwMzcwNzAw
NjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyog
SlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLzsgfTsKIAkJOTAwMTc4ODExMkUwMzcwNzAw
NjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpT
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwotCQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZD
NDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFt
cGVkQXJyYXkuaCAqLzsgfTsKLQkJOTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3Bw
ICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4
MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBD
N0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDY1NSw3ICs0NjI5
LDYgQEAKIAkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMy
NzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovOyB9
OwogCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0
QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovOyB9
OwogCQlCQzI3NUI3OTExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi87IH07Ci0JCUJDMjc1
Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1Q0IyMTFDNUU4NUMwMEM5
MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyOTkzNUQxN0ExREQ1
ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklu
cHV0VHlwZS5jcHAgKi87IH07CiAJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdM
Q29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICov
OyB9OwogCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3
QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi87IH07CkBAIC02
NDgwLDYgKzY0NTMsOCBAQAogCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlm
b3JtTG9jYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0
aW9uLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAv
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxh
dGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZv
cm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBs
YXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzEzNCwxMiArNzEwOSw2IEBACiAJ
CTJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaDsg
cGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVJlYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAv
KiBKU0ZpbGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxl
UmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U3MTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBEYXRhVmlldy5jcHA7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YVZpZXcuaDsgcGF0aCA9IGNh
bnZhcy9EYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFOTEy
OTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERh
dGFWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXdDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0U2RDEyOTNBRDZCMDBD
NUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NF
NkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5o
OyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJj
ZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iUmVz
b3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMTEy
MUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzY1NCw4ICs3NjIzLDYgQEAKIAkJNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFE
IC8qIEFycmF5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJ
bnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQ4QXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFByb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY2OSw3ICs3
NjM2LDYgQEAKIAkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQnVmZmVyLmNwcDsgcGF0
aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5
RDQ0NyAvKiBXZWJHTEJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xCdWZm
ZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQ4QXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBRTEwNDJEMzJFMDAw
OUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1l
YnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUYxMDQyRDMy
RTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QjAxMDQyRDMyRTAwMDlE
NDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdM
RnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzcyNSwzMCArNzY5MSw2IEBACiAJCTQ5RUNFQjY0
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NTE0OTk3OTBE
MDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVy
T3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNFQjY2MTQ5
OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDOTEwNTAzQzIz
MDAwOTlGQUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBB
cnJheUJ1ZmZlclZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBB
cnJheUJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXIuaWRsOyBw
YXRoID0gY2FudmFzL0FycmF5QnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRmxvYXQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDMyQXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REMjEwNTAzQzIzMDAw
OTlGQUIgLyogSW50MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MzJBcnJh
eS5pZGw7IHBhdGggPSBjYW52YXMvSW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQxNkFycmF5LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQxNkFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDgxMDUwM0MyMzAw
MDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWludDMyQXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50
MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERFMTA1MDND
MjQwMDA5OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWlu
dDE2QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYzMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjQx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0lu
dDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQz
MkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjcxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNF
RjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDhBcnJh
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZDMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTVWludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDE2QXJy
YXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRjEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjE5
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVy
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAw
OTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjM4LDkgKzgxODAs
NiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5H
TC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxv
YXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUQxMzhC
NTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0
dXJlRmxvYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4
dHVyZUZsb2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4
dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1RleHR1cmVG
bG9hdC5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuaWRsOyBwYXRoID0g
Y2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04OTc4LDcgKzg5MTcsNiBAQAogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5
Ym9hcmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
T01LZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFDMkVB
MzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZFRpbWluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJj
ZUxvYWRUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VMb2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyNDNE
MDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJj
ZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVJl
c291cmNlVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRUREMTU0
QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTkxMTMsOSArOTA1MSw2IEBACiAJCTkwMDE3NzNGMTJFMDM0Nzgw
MDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0Ux
MkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIg
LyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEwODlEMzAxNEMzMzVDRDAw
NUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFtcGVkQXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IFVpbnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OENsYW1wZWRBcnJh
eS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUw
RDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIy
NEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM0Miw3ICsx
MTI3Nyw2IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjc0QjMwMTQw
RUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8q
IEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4
ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdM
Q29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQw
MjUsOCArMTM5NTksNiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVFQ0RDQzEw
NTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLAotCQkJCTQ5RUVDREM5MTA1MDND
MjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovLAogCQkJCTZFNEU5MUE3MTBGN0ZC
MzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJNkU0RTkx
QTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJ
NDk0ODRGQjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKQEAgLTE0
MDQ3LDkgKzEzOTc5LDYgQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNTdHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmll
dy5jcHAgKi8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8s
Ci0JCQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLywKIAkJCQlG
QjkxMzkyMDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovLAogCQkJCUZCOTEzOTIxMTZB
RTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywKIAkJCQlBMDI0NTc0RTE2Q0VBQTI3MDAw
RTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApAQCAtMTQwNTgsMTEgKzEzOTg3LDYgQEAK
IAkJCQk3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmNwcCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5NEQxNEY4ODgyNTAwRjQ4NERDIC8qIEVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8sCi0JCQkJNDlFRUNEQ0YxMDUwM0MyMzAw
MDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0JCQkJNkVCQzVEODAxMzhCNEM0RTAwQTBD
RjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFC
IC8qIEludDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJ
bnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFy
cmF5LmlkbCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudElu
ZGV4VWludC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1l
bnRJbmRleFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA3NywxMCArMTQwMDEsNiBAQAogCQkJCTc3
QTE3QTZFMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi8sCiAJ
CQkJNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmggKi8s
CiAJCQkJNzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0Lmlk
bCAqLywKLQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICov
LAotCQkJCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJBcnJheS5pZGwgKi8sCi0J
CQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovLAotCQkJCTkx
QTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJheS5pZGwgKi8sCiAJCQkJ
QTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5oICovLAogCQkJCUE3
RDIwRjNCMTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8uaWRsICovLAogCQkJCTQ5
QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8sCkBAIC0xNjY0NSwx
MCArMTY1NjUsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAwQjA4MjUgLyogSFRNTCAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNFRjIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAotCQkJCTQ5RUVDRUYzMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0JCQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKLQkJCQk0OUVFQ0YxQTEwNTA3MkYzMDAw
OTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQlCRThFRjAzRTE3MUM4RkY5MDA5
QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJCQlCRThFRjAzRjE3MUM4RkY5MDA5QjQ4
QzMgLyogSlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4RUYwNDAxNzFDOEZGOTAwOUI0OEMzIC8q
IEpTQXVkaW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2NjIsOCArMTY1NzgsNiBAQAogCQkJCTQ5
RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLywK
IAkJCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmll
dy5oICovLAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNw
cCAqLywKIAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oICov
LAogCQkJCUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovLApAQCAt
MTY2NzgsMTAgKzE2NTkyLDYgQEAKIAkJCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNF
WFREcmF3QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgxMTRGRDlBREEwMEY0ODREQyAvKiBKU0VY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5ODIxNEZEOUFEQTAw
RjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCi0JCQkJNDlFRUNF
RjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VG
NTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLywKLQkJCQk2RUJDNUVBRDEz
OEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovLAotCQkJCTZFQkM1RUFFMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAogCQkJCUJDOTdFNDEwMTA5MTU0
RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQlCQzk3RTQxMTEw
OTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oICovLAogCQkJCTFBNEEyREVC
MEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNwcCAqLywKQEAgLTE2ODM1
LDEyICsxNjc0NSw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTSFRNTFZp
ZGVvRWxlbWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdl
RGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRh
LmggKi8sCi0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAg
Ki8sCi0JCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovLAot
CQkJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovLAotCQkJ
CTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQk0OUM3
Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovLAotCQkJCTQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUNEMjdGNkUyMTQ1NzY3
NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQ0QyN0Y2RTMxNDU3
Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmggKi8sCiAJCQkJRTQ0NjE0MTAwQ0Q2
ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAgKi8sCkBAIC0xNjg3MywxNCArMTY3Nzcs
NiBAQAogCQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLywK
IAkJCQkwNzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmNwcCAqLywKIAkJ
CQkwNzg0NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmggKi8sCi0JCQkJNDlF
RUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovLAotCQkJCTQ5RUVD
RUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZEMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkIxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0
OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywKLQkJCQk5MTA4OUQzMDE0QzMzNUNEMDA1
QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTE1Qzc3MDkyMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovLAogCQkJCTE1Qzc3MDkxMTAwRDNDQTgw
MDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywKIAkJCQlCRThFRjA0NjE3MUM5MDE0MDA5
QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAgLTE4NzgwLDYgKzE4Njc2LDggQEAKIAkJ
CQlBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAq
LywKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggKi8sCiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERh
dGEuaCAqLywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5
NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJCUUxQTY0M0YxMEVDMDk3
MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8sCiAJCQkJRjM0NzQyRTYx
MzQzNjM1MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcCAqLywKQEAgLTE4
ODM1LDggKzE4NzMzLDYgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMyNzVDQjIx
MUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovLAotCQkJCTg2MjQz
RDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovLAogCQkJ
CUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAogCQkJCUNE
REU2OTFEMTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcCAqLywKIAkJ
CQlGREVBQUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0
b20uY3BwICovLApAQCAtMTg4NjIsNyArMTg3NTgsNiBAQAogCQkJCUFENzI2RkVBMTZEOUY0MEIw
MDNBNEU2RCAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCAqLywKIAkJCQlFMUFEMTRF
NzEyOTczNzc0MDBBQ0E5ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwICovLAogCQkJCUJD
MjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKLQkJCQky
RTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8sCiAJCQkJ
NDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwICovLAogCQkJCTMxRkIxQTZCMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1v
dGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk1OTBFMUI0QTExRTRFRjcwMDA2OUY3ODQgLyog
SlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKQEAgLTIxMzIxLDcgKzIxMjE2
LDYgQEAKIAkJCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OTkxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFU
cmFuc2Zlckl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTlBMTMxNjM2RTYwMDA5QTdF
MCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NDRUIx
MjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTczMkIw
QjEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjE4MzAsNiArMjE3MjQsNyBAQAogCQkJCTg5M0M0ODBGMTI0OEJEM0Ew
MDJCM0Q4NiAvKiBGaWxlRW50cnlTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4MzEy
MkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURGMzY5
RjEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3NEY5IC8qIEZpbGVJY29u
TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyog
RmlsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZE
MUY3IC8qIEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjM5LDkgKzIyMTM0LDYgQEAK
IAkJCQkxQzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1IC8qIEpTQWJzdHJhY3RX
b3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNBMTJCMDNGNTAwMDNBNTgzQSAvKiBK
U0FuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjFDMTA1MDcy
RjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYy
NDNEMDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9C
dWZmZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMwMiw3ICsyMjE5NCw2IEBACiAJ
CQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUI1OURENjk5MTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNl
U3luYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpT
RGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDU4MTAxMTQ2NDcwMERGRjNFRCAv
KiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREEx
NUVEMjEyQjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIyMzc1LDggKzIyMjY2LDYgQEAKIAkJCQk4OTg3ODVCMzEyMkNBMkE3MDAz
QUFCREEgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2REE4
NDRFMTIyNEEwNzEwMDYwRDAwNiAvKiBKU0ZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg5M0M0N0JDMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9h
dDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjdCMTRFQUMwODYwMDkwRDc1RSAv
KiBKU0ZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREMwMTZCN0YzOEUwMENC
QTNGQyAvKiBKU0ZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUFDMTJCMDNF
RTEwMDNBNTgzQSAvKiBKU0dhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDc3LDkgKzIy
MzY2LDYgQEAKIAkJCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBMEU3NkRCMTBCRjA1OTgwMEEwMjc2RSAvKiBKU0luamVjdGVk
U2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MUYxMEMwMERCMTAwQTAyNzZF
IC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
NzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywK
LQkJCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDNUZBRUQyMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFG
QiAvKiBKU0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzI5LDEwICsy
MjYxNSw2IEBACiAJCQkJRTE3QjQ5MjExNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ1RDBBOTBERUUxMDAwRkYyMTUgLyogSlNU
cmVlV2Fsa2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlDRjA5REEyQjQ3MDA5NjMzQTUg
LyogSlNVSUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMEIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA5
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTkx
MDg5RDMyMTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBQUE0RkFEMjE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVlc3RFdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRp
dHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFDOTAxNDAwOUI0OEMzIC8q
IEpTVmlkZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDczMiw3ICsyNDYxNCw2IEBACiAJ
CQkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFz
ZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRUExMjkzOUNCODAw
QzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzMyQjBBMTM2QTE2
MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVC
M0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yNTM4OCw5ICsyNTI2OSw2IEBACiAJCQkJMUM4MUJBMDkwRTk3MzQ4
MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NDE4Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAv
KiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjFCMTA1
MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NURGMzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkRBMTVFOUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNTQ3MCw4ICsyNTM0OCw2IEBACiAJCQkJMUFFODJGOEYwQ0FB
RkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2
OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0
YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0NTcxMDExNDY0NzAwREZG
M0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDE2MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNB
IC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1NDMsOCArMjU0MTksNiBA
QAogCQkJCTg5ODc4NUY0MTIyRTFFQUMwMDNBQUJEQSAvKiBKU0ZpbGVSZWFkZXJTeW5jLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg5ODc4NUIyMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0
ZW1DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdCQjEyMzhBMEE5MDAyQjNE
ODYgLyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
MDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNkQ5RDI3QzE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUFCMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0dhaW5O
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBK
U0dlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2MDMsNiArMjU0NzcsNyBAQAog
CQkJCUE2MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJl
bEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMwQTFDRTYzQjAwQjQyQjI1
IC8qIEpTSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwOTlEMDgx
N0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hU
TUxMaW5rRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFEMTM5QjEyOTVEOTI2MDBB
Q0E5ODkgLyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
NTY1Nyw5ICsyNTUzMiw2IEBACiAJCQkJRjMxNjM5NkUxMzI5NDg3NjAwQTY0OUNCIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3NzFFMTBDMDBE
QjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTSW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNDEwNTA3MEM0MDAw
OTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOTk1MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzVG
QUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxs
RnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDQwOURBMkI0ODAwOTYz
M0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTQxLDEwICsy
NTgxMyw2IEBACiAJCQkJMUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQwMDlEQTJCNDgwMDk2
MzNBNSAvKiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEMxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
MEExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQUE0RkFEMzE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNV
SVJlcXVlc3RFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3NzA5NDEwMEQzQ0E4MDA1
QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOEVGMDRB
MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxk
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgQ1NTVmFsdWU7CiBjbGFz
cyBKU0RPTVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogCi10eXBlZGVmIEhhc2hN
YXA8dm9pZCosIEpTQzo6V2VhazxKU0RPTVdyYXBwZXI+ID4gRE9NT2JqZWN0V3JhcHBlck1hcDsK
K3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+ID4gRE9NT2Jq
ZWN0V3JhcHBlck1hcDsKIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzo6
SlNTdHJpbmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+ID4gSlNTdHJpbmdDYWNoZTsKIAogY2xhc3Mg
RE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
Ci0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1
ZmZlci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBcnJheUJ1ZmZlcihFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9y
ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLQot
ICAgIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQot
ICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOyAvLyBOYU4v
K2luZi8taW5mIHJldHVybnMgMCwgdGhpcyBpcyBpbnRlbmRlZCBieSBXZWJJREwKLSAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAgIGJ1
ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCks
IDEpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEg
c21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
YnVmZmVyLmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVy
LmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJy
YXlCdWZmZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjg1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0jZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3
SGVscGVyX2gKLQotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPGludGVy
cHJldGVyL0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlCYXNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNv
bnN0IGNoYXIqIHRvb0xhcmdlU2l6ZSA9ICJTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRp
dmUpLiI7Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1ib29sIGNvcHlUeXBlZEFy
cmF5QnVmZmVyKEMqIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBzb3VyY2UsIHVuc2lnbmVkIHNv
dXJjZUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmll
d1R5cGUgc291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChzb3VyY2VU
eXBlICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KTsKLQotICAgIGlmICh0YXJnZXQt
PmdldFR5cGUoKSA9PSBzb3VyY2VUeXBlKSB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5zZXQoc3Rh
dGljX2Nhc3Q8Qyo+KHNvdXJjZSksIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghdGFyZ2V0LT5jaGVja0lu
Ym91bmREYXRhKG9mZnNldCwgc291cmNlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVJbnQ4OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8
VHlwZWRBcnJheUJhc2U8c2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50ODoKLSAgICBjYXNl
IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQo
aSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+
ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1
ZmZlclZpZXc6OlR5cGVJbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNv
dXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQp
KHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRl
bShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVp
bnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5
cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzI6Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxp
bnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVVaW50MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQs
IChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+ICo+KHNvdXJjZSkt
Pml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVGbG9hdDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nh
c3Q8VHlwZWRBcnJheUJhc2U8ZmxvYXQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDY0OgotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8ZG91
YmxlPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5
QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17Ci0gICAgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlC
dWZmZXJWaWV3OjpWaWV3VHlwZSBhcnJheVR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAgIGlm
IChhcnJheVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA9PSAyKQotICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50
b0ludDMyKGV4ZWMpOwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oaW1w
bCwgYXJyYXkuZ2V0KCksIGxlbmd0aCwgb2Zmc2V0KSkpCi0gICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotSlND
OjpKU1ZhbHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGlt
cGwpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBKU0M6OnRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotCi0gICAgaWYgKHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+
KGV4ZWMsIGltcGwpKQotICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTDw+QXJyYXkgYXJyYXks
IFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICByZXR1cm4gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25h
bF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJh
eSA9IEpTQzo6YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBv
ZmZzZXQgPSAwOwotICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAg
ICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAg
ICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoIWltcGwtPmNoZWNrSW5i
b3VuZERhdGEob2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UuIikpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJyYXktPmdldChleGVjLCBp
KTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgaW1w
bC0+c2V0KGkgKyBvZmZzZXQsIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcmd1bWVudCIpOwot
fQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgot
Ly8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFT
Y3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQ
dHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzb3VyY2Ug
PSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFzb3VyY2Up
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBzb3Vy
Y2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHNvdXJjZVR5cGUgPT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDMy
X3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIFJlZlB0cjxD
PiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIGlmICghKGNv
cHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGFycmF5LmdldCgpLCBzb3VyY2UuZ2V0KCksIGxlbmd0
aCwgMCkpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCB0b29MYXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIHJl
dHVybiBhcnJheTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNv
bnN0cnVjdG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0
aHJvd24gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1l
IFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZl
ckFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFi
dWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykg
OiAwOwotICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAyKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQz
MihleGVjKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAt
IG9mZnNldCkgJSBzaXplb2YoVCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zm
c2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOwotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpIC0gb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICB9Ci0gICAgUmVmUHRyPEM+IGFycmF5
ID0gQzo6Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmICghYXJyYXkpCi0g
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1l
IFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3RvcnM6Ci0gICAgLy8KLSAg
ICAvLyAgMSkgKGluIGludCBzaXplKQotICAgIC8vICAyKSAoaW4gQXJyYXlCdWZmZXIgYnVmZmVy
LCBbT3B0aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgaW50IGxl
bmd0aCkKLSAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMgZW5kcyB1cCBiZWluZyBh
IEpTICJhcnJheS1saWtlIiBvYmplY3QKLSAgICAvLyAgICAKLSAgICAvLyBGb3IgdGhlIDAgYXJn
cyBjYXNlLCBqdXN0IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIHZpZXcuIFdlIGNvdWxkCi0gICAgLy8g
Y29uc2lkZXIgcmFpc2luZyBhIFN5bnRheEVycm9yIGZvciB0aGlzIGNhc2UsIGJ1dCBub3QgYWxs
Ci0gICAgLy8gSmF2YVNjcmlwdCBET00gYmluZGluZ3MgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4g
Im5ldwotICAgIC8vIDxUeXBlPkFycmF5KCkiIGFuZCB3aGF0IG9jY3VycyB3aGVuIGEgcHJldmlv
dXNseS1jb25zdHJ1Y3RlZAotICAgIC8vIEFycmF5QnVmZmVyVmlldyBpcyByZXR1cm5lZCB0byBK
YXZhU2NyaXB0OyBlLmcuLCBmcm9tCi0gICAgLy8gImFycmF5LnN1YnNldCgpIi4KLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEM6OmNyZWF0ZSgwKTsK
LSAgICAKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8g
SW52YWxpZCBmaXJzdCBhcmd1bWVudAotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgUmVmUHRyPEM+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZp
ZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcp
Ci0gICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAKLSAgICAgICAgdmlldyA9IGNvbnN0cnVj
dEFycmF5QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAg
ICAgIGlmICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0KLSAgICAgICAgSlNDOjpK
U09iamVjdCogc3JjQXJyYXkgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAg
IHVpbnQzMl90IGxlbmd0aCA9IHNyY0FycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBSZWZQdHI8Qz4gYXJyYXkg
PSBDOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgICAgIGlmICghYXJyYXkpIHsK
LSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
SlNDOjpKU1ZhbHVlIHYgPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgYXJy
YXktPnNldChpLCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7Ci0gICAgUmVmUHRyPEM+IHJlc3VsdDsKLSAgICBpZiAobGVuZ3RoID49IDApCi0g
ICAgICAgIHJlc3VsdCA9IEM6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSk7
Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgSlNUeXBlLCB0eXBlbmFtZSBXZWJDb3JlVHlwZT4KLXN0YXRpYyBKU0M6
OkpTVmFsdWUgdG9KU0FycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQ29yZVR5cGUqIG9iamVjdCkKLXsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0KLSAgICBpZiAoSlNE
T01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IG9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgZXhlYy0+aGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qob2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwotICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyPEpTVHlwZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0hlbHBl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0Nv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEy
ICsyOSwxMiBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQXVkaW9C
dWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0J1
ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNPZmZsaW5l
QXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxNCBAQAogI2luY2x1ZGUgIkJsb2Iu
aCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBs
YWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNE
aWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QmxvYkJ1
aWxkZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1J1bGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
ICAgIGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFw
cGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHJ1bGUp
OworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIHJ1bGUpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTVmFsdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXZhbHVlLT5pc0NT
U09NU2FmZSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdmFsdWUpOwor
ICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIHZhbHVlKTsKIAogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRv
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAi
SlNDcnlwdG8uaCIKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyVmlldy5oIgogCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC00MSwxMiArNDEsMTIgQEAg
SlNWYWx1ZSBKU0NyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKEV4ZWNTdAogICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAK
ICAgICBKU1ZhbHVlIGJ1ZmZlciA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIEFycmF5QnVmZmVy
VmlldyogYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoYnVmZmVyKTsKKyAgICBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmll
dyhidWZmZXIpOwogICAgIGlmICghYXJyYXlCdWZmZXJWaWV3KQogICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYyk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBs
KCktPmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcsIGVjKTsKKyAgICBpbXBsKCktPmdl
dFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZlclZpZXcuZ2V0KCksIGVjKTsKIAogICAgIGlmIChlYykg
ewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxNSArMzEsMjEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNp
dG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5l
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0RhdGFWaWV3Lmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9M
b29rdXAuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvTnVs
bFB0ci5oPgpAQCAtMTI4LDYgKzEzNCwxNiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAg
ICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7CiAgICAgfQogCisgICAgaW5saW5l
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciopCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQtPnZtKCktPm1fdHlwZWRBcnJheUNv
bnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5l
IHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlC
dWZmZXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdvcmxkOworICAgIH0KKwogICAgIGlubGlu
ZSBKU0RPTVdyYXBwZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwg
dm9pZCopIHsgcmV0dXJuIDA7IH0KICAgICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBwZXIqLCBKU0M6OldlYWtIYW5k
bGVPd25lciosIHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIGlubGluZSBib29sIGNsZWFy
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lkKiwgSlNET01XcmFwcGVy
KikgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzOSw2ICsxNTUsMTMgQEAgY2xhc3MgRE9NU3RyaW5n
TGlzdDsKICAgICAgICAgcmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOwogICAgIH0KIAorICAg
IGlubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7CisgICAgfQorCiAgICAgaW5saW5lIGJv
b2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBTY3JpcHRX
cmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQogICAgIHsKICAgICAgICAgaWYg
KCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE0Nyw2ICsxNzAsMTQgQEAgY2xhc3MgRE9NU3RyaW5n
TGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgc2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVm
ZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAgIGlm
ICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpQYXNzV2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+
KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgY29udGV4dCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKwogICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVy
KiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE1
NSwyNCArMTg2LDMyIEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTRE9N
V3JhcHBlciogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFz
cyogZG9tT2JqZWN0KQorICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKICAgICB7Ci0gICAgICAgIGlmIChKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QpKQorICAg
ICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QpCisgICAgeworICAgICAgICBpZiAoSlNDOjpKU09i
amVjdCogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkp
CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAgcmV0dXJuIHdvcmxkLT5tX3dy
YXBwZXJzLmdldChkb21PYmplY3QpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBE
T01DbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQs
IERPTUNsYXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQg
Y2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3Qs
IFdyYXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAgIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKICAgICAgICAgdm9p
ZCogY29udGV4dCA9IHdyYXBwZXJDb250ZXh0KHdvcmxkLCBkb21PYmplY3QpOwogICAgICAgICBp
ZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25l
ciwgY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTQzo6UGFzc1dlYWs8
SlNET01XcmFwcGVyPiBwYXNzV2Vhayh3cmFwcGVyLCBvd25lciwgY29udGV4dCk7CisgICAgICAg
IEpTQzo6UGFzc1dlYWs8SlNDOjpKU09iamVjdD4gcGFzc1dlYWsod3JhcHBlciwgb3duZXIsIGNv
bnRleHQpOwogICAgICAgICB3ZWFrQWRkKHdvcmxkLT5tX3dyYXBwZXJzLCAodm9pZCopZG9tT2Jq
ZWN0LCBwYXNzV2Vhayk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNz
PiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01D
bGFzcyogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVuY2Fj
aGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdy
YXBwZXJDbGFzcyogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hl
ZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xOTUsNyArMjM0LDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICB7CiAgICAgICAg
IGlmICghZG9tT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRX
b3JsZChleGVjKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9tT2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxX
cmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZG9tT2JqZWN0KTsKICAgICB9CkBAIC0z
MjMsNiArMzYyLDI1IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBvYmpl
Y3Q7CiAgICAgfQogCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVy
KiBidWZmZXIpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdldEV4
aXN0aW5nV3JhcHBlcjxKU0M6OkpTQXJyYXlCdWZmZXI+KGV4ZWMsIGJ1ZmZlcikpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBidWZmZXItPnJlZigpOworICAgICAgICBKU0M6
OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIgPSBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVj
LT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7Cisg
ICAgICAgIGNhY2hlV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGJ1ZmZlciwgd3JhcHBlcik7
CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKworICAgIGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAgeworICAgICAgICBpZiAoIXZp
ZXcpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIHZp
ZXctPndyYXAoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KICAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VD4gcHRyKQog
ICAgIHsKQEAgLTM3Niw2ICs0MzQsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogICAgIEpT
Qzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsKIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiB0b0FycmF5QnVmZmVyVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwcGVyID0gSlNDOjpqc0R5
bmFtaWNDYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1ZSk7CisgICAgICAgIGlmICgh
d3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gd3JhcHBlci0+
aW1wbCgpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDhBcnJh
eT4gdG9JbnQ4QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZl
VHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVm
UHRyPEpTQzo6SW50MTZBcnJheT4gdG9JbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odmFsdWUpOyB9
CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b0ludDMyQXJyYXkoSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQ4QXJy
YXk+IHRvVWludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNz
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVWludDhDbGFtcGVkQXJyYXkoSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhD
bGFtcGVkQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50
MTZBcnJheT4gdG9VaW50MTZBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxp
bmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1VpbnQzMkFycmF5KEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0
b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0
b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVU
eXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvRmxvYXQ2NEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2
YWx1ZSk7IH0KKyAgICAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkRhdGFWaWV3PiB0b0Rh
dGFWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6SlNEYXRhVmll
dyogd3JhcHBlciA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTRGF0YVZpZXcqPih2YWx1ZSk7
CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBsKCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzOwogCiAgICAgdGVtcGxhdGU8PgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkRhdGFWaWV3
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3SGVscGVyLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1lbnVtIERhdGFWaWV3QWNjZXNzVHlw
ZSB7Ci0gICAgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIsCi0gICAgQWNjZXNzRGF0YVZp
ZXdNZW1iZXJBc0Zsb2F0NjQKLX07Ci0KLUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERhdGFWaWV3KiBvYmplY3QpCi17Ci0gICAg
cmV0dXJuIHdyYXA8SlNEYXRhVmlldz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQot
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNEYXRhVmlldyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50KDApLmlzTnVsbCgpIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLQotICAgIFJlZlB0cjxEYXRhVmlldz4g
dmlldyA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PERh
dGFWaWV3LCBjaGFyPihleGVjKTsKLSAgICBpZiAoIXZpZXcuZ2V0KCkpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVYX1NJWkVfRVJSKTsKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICB9Ci0KLSAgICBKU0RhdGFWaWV3Q29uc3Ry
dWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNEYXRhVmlld0NvbnN0cnVjdG9yKj4oZXhl
Yy0+Y2FsbGVlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhl
eGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgdmlldy5nZXQoKSkpKTsKLX0KLQot
c3RhdGljIEpTVmFsdWUgZ2V0RGF0YVZpZXdNZW1iZXIoRXhlY1N0YXRlKiBleGVjLCBEYXRhVmll
dyogaW1wLCBEYXRhVmlld0FjY2Vzc1R5cGUgdHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpID4gMSAmJiAodHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxv
YXQzMiB8fCB0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0KSkgewotICAgICAg
ICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQ7Ci0gICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgY2FzZSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMjoKLSAgICBjYXNl
IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0OiB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9
ICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyKSA/IGltcC0+Z2V0RmxvYXQz
MihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKSA6IGltcC0+Z2V0RmxvYXQ2NChieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLSAgICAgICAgcmVzdWx0ID0gc3RkOjppc25hbih2YWx1
ZSkgPyBqc05hTigpIDoganNOdW1iZXIodmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9IGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1KU1ZhbHVlIEpTRGF0YVZpZXc6OmdldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBnZXREYXRhVmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+
KGltcGwoKSksIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyKTsKLX0KLQotSlNWYWx1ZSBK
U0RhdGFWaWV3OjpnZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YVZpZXdNZW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8RGF0YVZpZXcqPihpbXBsKCkpLCBBY2Nl
c3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2
aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSAiSlNOb2Rl
LmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAjaW5jbHVkZSAiSlNUcmFja0N1c3RvbS5oIgot
I2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTVm9pZENhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
IDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUu
aD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1Vp
bnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgSlNW
YWx1ZSBKU0RvY3VtZW50Ojpsb2NhdGlvbihFeGVjU3RhdGUqIAogICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKICAgICBMb2NhdGlvbiogbG9jYXRpb24gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9t
V2luZG93KCktPmxvY2F0aW9uKCk7Ci0gICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBsb2NhdGlvbikpCisgICAgaWYgKEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxv
Y2F0aW9uKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBKU0xvY2F0aW9uKiBqc0xv
Y2F0aW9uID0gSlNMb2NhdGlvbjo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0xvY2F0aW9uPihl
eGVjLCBnbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdCgpLCBsb2NhdGlvbik7CkBAIC04Myw3
ICs4Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBp
ZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBw
ZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9jdW1l
bnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29y
bGQoZXhlYyksIGRvY3VtZW50KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFldmVudCkKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2ZW50KTsKKyAgICBKU09iamVjdCogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBldmVudCk7CiAgICAg
aWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKICNpbmNsdWRlICJKU0ZpbGVS
ZWFkZXIuaCIKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghY29sbGVj
dGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFw
cGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNvbGxlY3Rpb24pOwor
ICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIGNvbGxlY3Rpb24pOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBA
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5LDcgQEAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0
Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0YSk7CisgICAgSlNPYmpl
Y3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VE
YXRhKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3Rl
ZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFy
cmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRN
TENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0lu
dDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTm9kZS5o
IgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKLSNpbmNs
dWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1
ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAi
U3RvcmFnZS5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBAIC02Nyw2ICs1OSw3
IEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1
bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3QuaD4KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlRXZlbnQuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXIuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkpT
TWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
RXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU01lc3Nh
Z2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5j
cHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZH
UGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghb2JqZWN0KQogICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVjdCkpCisgICAgaWYgKEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9i
amVjdCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgc3dpdGNoIChvYmplY3QtPnBh
dGhTZWdUeXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVT
aGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNyArNTAsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAg
ICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RP
TVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
c3R5bGVTaGVldCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAg
IHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Ry
YWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIGlmICghdHJh
Y2spCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOworICAg
IEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IHRyYWNrKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxNCBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0VYVERyYXdCdWZmZXJzLmgiCiAjaW5jbHVkZSAiSlNFWFRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgog
I2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJh
eS5oIgogI2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1ZGUgIkpTT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgogI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCiAj
aW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAjaW5jbHVkZSAiSlNPRVNWZXJ0ZXhB
cnJheU9iamVjdC5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1Vp
bnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuaCIKQEAgLTg1LDEwICs4MSw5IEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9N
Rm9ybURhdGEuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgpAQCAtNTAsNiArNDgs
OCBAQAogI2luY2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMTI3LDkgKzEyNywxMCBA
QCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgICAgICBp
bXBsKCktPnNlbmQodG9ET01Gb3JtRGF0YSh2YWwpLCBlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZh
bC5pbmhlcml0cygmSlNBcnJheUJ1ZmZlcjo6c19pbmZvKSkKICAgICAgICAgICAgIGltcGwoKS0+
c2VuZCh0b0FycmF5QnVmZmVyKHZhbCksIGVjKTsKLSAgICAgICAgZWxzZSBpZiAodmFsLmluaGVy
aXRzKCZKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvKSkKLSAgICAgICAgICAgIGltcGwoKS0+c2Vu
ZCh0b0FycmF5QnVmZmVyVmlldyh2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxz
ZSBpZiAodmFsLmluaGVyaXRzKCZKU0FycmF5QnVmZmVyVmlldzo6c19pbmZvKSkgeworICAgICAg
ICAgICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZh
bCk7CisgICAgICAgICAgICBpbXBsKCktPnNlbmQodmlldy5nZXQoKSwgZWMpOworICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpLCBlYyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDI1ICszMiwxMyBAQAogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNs
dWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpT
QmxvYi5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxpc3QuaCIKLSNp
bmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAj
aW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNs
dWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUg
IkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJKU05hdmlnYXRvci5oIgotI2luY2x1ZGUgIkpT
VWludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNV
aW50OEFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OENsYW1wZWRBcnJheS5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKQEAgLTYzLDEyICs1MSwxNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0
ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTRGF0YVZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9P
cGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvUmVnRXhwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSA8cnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IApAQCAtMTcyMiw0NyArMTcxNSw2IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXpl
ZFNjcmlwdFYKICAgICBtX2Jsb2JVUkxzLnN3YXAoYmxvYlVSTHMpOwogfQogCi1zdGF0aWMgdm9p
ZCBuZXV0ZXJWaWV3KEpTQ2VsbCoganNWaWV3KQotewotICAgIGlmICghanNWaWV3KQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgc3dpdGNoIChqc1ZpZXctPmNsYXNzSW5mbygpLT50eXBlZEFy
cmF5U3RvcmFnZVR5cGUpIHsKLSAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAvLyBU
aGlzIGNvdWxkIGJlIGEgRGF0YVZpZXcsIGZvciBleGFtcGxlLiBBc3N1bWUgdGhhdCB0aGVyZSBh
cmUgdmlld3MgdGhhdCB0aGUKLSAgICAgICAgLy8gREZHIGRvZXNuJ3QgY2FyZSBhYm91dC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgIGpzQ2FzdDxK
U0ludDhBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAganNDYXN0PEpTSW50MTZBcnJh
eSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAganNDYXN0PEpTSW50MzJBcnJheSo+KGpzVmll
dyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVk
QXJyYXlVaW50ODoKLSAgICAgICAganNDYXN0PEpTVWludDhBcnJheSo+KGpzVmlldyktPm1fc3Rv
cmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50
OENsYW1wZWQ6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQxNjoKLSAgICAgICAganNDYXN0PEpTVWludDE2QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3Jh
Z2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDMy
OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0
aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAg
ICAgICBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAgICAg
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCiBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVyQXJyYXlCdWZmZXJzKAogICAg
IEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlCdWZmZXJBcnJheSYgYXJyYXlCdWZmZXJzLCBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSYgY29kZSkKIHsKQEAgLTE3NzksMjYgKzE3MzEsMTUgQEAgUGFzc093
blB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU6OkFycmF5QgogCiAgICAgSGFzaFNldDxKU0M6OkFy
cmF5QnVmZmVyKj4gdmlzaXRlZDsKICAgICBmb3IgKHNpemVfdCBhcnJheUJ1ZmZlckluZGV4ID0g
MDsgYXJyYXlCdWZmZXJJbmRleCA8IGFycmF5QnVmZmVycy5zaXplKCk7IGFycmF5QnVmZmVySW5k
ZXgrKykgewotICAgICAgICBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiBuZXV0ZXJl
ZFZpZXdzOwotCiAgICAgICAgIGlmICh2aXNpdGVkLmNvbnRhaW5zKGFycmF5QnVmZmVyc1thcnJh
eUJ1ZmZlckluZGV4XS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmlz
aXRlZC5hZGQoYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKTsKIAotICAgICAg
ICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIo
Y29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpLCBuZXV0ZXJlZFZpZXdzKTsKKyAgICAgICAg
Ym9vbCByZXN1bHQgPSBhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0tPnRyYW5zZmVyKGNv
bnRlbnRzLT5hdChhcnJheUJ1ZmZlckluZGV4KSk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAg
ICAgICAgICAgICBjb2RlID0gVmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSB2aWV3cyBtYXkgaGF2
ZSBiZWVuIG5ldXRlcmVkLCBidXQgdGhlaXIgd3JhcHBlcnMgYWxzbyBuZWVkIHRvIGJlIG5ldXRl
cmVkLCB0b28uCi0gICAgICAgIGZvciAoc2l6ZV90IHZpZXdJbmRleCA9IG5ldXRlcmVkVmlld3Mu
c2l6ZSgpOyB2aWV3SW5kZXgtLTspIHsKLSAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogdmll
dyA9IG5ldXRlcmVkVmlld3Nbdmlld0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IHdvcmxkSW5kZXggPSB3b3JsZHMuc2l6ZSgpOyB3b3JsZEluZGV4LS07KSB7Ci0gICAgICAg
ICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHdvcmxkc1t3b3JsZEluZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBuZXV0ZXJWaWV3KGdldENhY2hlZFdyYXBwZXIod29ybGQsIHZp
ZXcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY29udGVu
dHMucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJE
T01PYmplY3RIYXNoVGFibGVNYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIApAQCAtNzUsNiArNzYsNyBAQCBpbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnRE
YXRhKEpTCiAgICAgV2ViQ29yZUpTQ2xpZW50RGF0YSogd2ViQ29yZUpTQ2xpZW50RGF0YSA9IG5l
dyBXZWJDb3JlSlNDbGllbnREYXRhOwogICAgIHZtLT5jbGllbnREYXRhID0gd2ViQ29yZUpTQ2xp
ZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIHdlYkNvcmVKU0NsaWVu
dERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7
CisgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01H
bG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25z
Lmg+CisjaW5jbHVkZSA8aGVhcC9QYXNzV2Vhay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQoreworfQorV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9
CisKK0pTQXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVm
ZmVyKiBuYXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oCisgICAg
ICAgIHRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwg
bmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5
QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxVbmtu
b3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0FycmF5
QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihoYW5kbGUuZ2V0
KCkuYXNDZWxsKCkpOworICAgIGlmICghanNBcnJheUJ1ZmZlci0+aGFzQ3VzdG9tUHJvcGVydGll
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJyYXlCdWZmZXIqIHJvb3QgPSBqc0Fy
cmF5QnVmZmVyLT5pbXBsKCk7CisgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290
KHJvb3QpOworfQorCit2b2lkIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1
ZmZlck93bmVyOjpmaW5hbGl6ZSgKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXh0KQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8SlNB
cnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVu
Y2FjaGVXcmFwcGVyKHdvcmxkLCBqc0FycmF5QnVmZmVyLT5pbXBsKCksIGpzQXJyYXlCdWZmZXIp
OworICAgIGpzQXJyYXlCdWZmZXItPmltcGwoKS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8aGVhcC9X
ZWFrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgSlNDOjpUeXBlZEFycmF5
Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7
CisgICAgdmlydHVhbCB+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAg
dmlydHVhbCBKU0M6OkpTQXJyYXlCdWZmZXIqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOworICAgIAorICAgIEpTQzo6V2Vha0hh
bmRsZU93bmVyKiB3cmFwcGVyT3duZXIoKSB7IHJldHVybiAmbV9vd25lcjsgfQorCitwcml2YXRl
OgorICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVP
d25lciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlND
OjpTbG90VmlzaXRvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7CisgICAgfTsKKworICAgIEpTQXJyYXlC
dWZmZXJPd25lciBtX293bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTUz
OTUwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMjEgKzE4MCwyMiBAQCBzdWIgRm9yQWxsUGFyZW50cwog
CiAgICAgbXkgJHJlY3Vyc2U7CiAgICAgJHJlY3Vyc2UgPSBzdWIgeworICAgICAgICBteSAkb3V0
ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAgICAgICAgbXkgJGN1cnJlbnRJbnRlcmZhY2UgPSBzaGlm
dDsKIAogICAgICAgICBmb3IgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPnBhcmVudHN9KSB7CiAgICAg
ICAgICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRfOwotICAgICAgICAgICAgbXkgJHBhcmVudElu
dGVyZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAg
ICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkb3V0
ZXJJbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKIAogICAgICAgICAgICAgaWYgKCRiZWZvcmVS
ZWN1cnNpb24pIHsKICAgICAgICAgICAgICAgICAmJGJlZm9yZVJlY3Vyc2lvbigkcGFyZW50SW50
ZXJmYWNlKSBlcSAncHJ1bmUnIGFuZCBuZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
JiRyZWN1cnNlKCRwYXJlbnRJbnRlcmZhY2UpOworICAgICAgICAgICAgJiRyZWN1cnNlKCRvdXRl
ckludGVyZmFjZSwgJHBhcmVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAmJGFmdGVyUmVjdXJz
aW9uKCRwYXJlbnRJbnRlcmZhY2UpIGlmICRhZnRlclJlY3Vyc2lvbjsKICAgICAgICAgfQogICAg
IH07CiAKLSAgICAmJHJlY3Vyc2UoJGludGVyZmFjZSk7CisgICAgJiRyZWN1cnNlKCRpbnRlcmZh
Y2UsICRpbnRlcmZhY2UpOwogfQogCiBzdWIgRmluZFN1cGVyTWV0aG9kCkBAIC0yMzgsNiArMjM5
LDcgQEAgc3ViIElETEZpbGVGb3JJbnRlcmZhY2UKIHN1YiBQYXJzZUludGVyZmFjZQogewogICAg
IG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIHVuZGVmIGlmICRpbnRl
cmZhY2VOYW1lIGVxICdPYmplY3QnOwpAQCAtMjQ4LDcgKzI1MCw3IEBAIHN1YiBQYXJzZUludGVy
ZmFjZQogCiAgICAgIyBTdGVwICMxOiBGaW5kIHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdpdGgg
J2ludGVyZmFjZScKICAgICBteSAkZmlsZW5hbWUgPSAkb2JqZWN0LT5JRExGaWxlRm9ySW50ZXJm
YWNlKCRpbnRlcmZhY2VOYW1lKQotICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBm
aWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiIVxuIik7CisgICAgICAgIG9yIGRp
ZSgiQ291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1l
XCIsIHJlYWNoYWJsZSBmcm9tIFwiIiAuICRvdXRlckludGVyZmFjZS0+bmFtZSAuICJcIiFcbiIp
OwogCiAgICAgcHJpbnQgIiAgfCAgfD4gIFBhcnNpbmcgcGFyZW50IElETCBcIiRmaWxlbmFtZVwi
IGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiXG4iIGlmICR2ZXJib3NlOwogCkBAIC0y
NzcsNiArMjc5LDEwIEBAIHN1YiBTa2lwSW5jbHVkZUhlYWRlcgogCiAgICAgIyBTcGVjaWFsIGNh
c2U6IFNWR051bWJlci5oIGRvZXMgbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICJTVkdOdW1iZXIiOworICAgIAorICAgICMgVHlwZWQgYXJyYXlzIGFscmVhZHkgaW5jbHVkZWQg
YnkgSlNET01CaW5kaW5nLmguCisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5
VHlwZSgkdHlwZSk7CisgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCw3ICszNzQsNyBA
QCBzdWIgSXNUeXBlZEFycmF5VHlwZQogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkFycmF5
QnVmZmVyIikgb3IgKCR0eXBlIGVxICJBcnJheUJ1ZmZlclZpZXciKSk7CiAgICAgcmV0dXJuIDEg
aWYgKCgkdHlwZSBlcSAiVWludDhBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDhDbGFtcGVkQXJy
YXkiKSBvciAoJHR5cGUgZXEgIlVpbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MzJBcnJh
eSIpKTsKICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJJbnQ4QXJyYXkiKSBvciAoJHR5cGUg
ZXEgIkludDE2QXJyYXkiKSBvciAoJHR5cGUgZXEgIkludDMyQXJyYXkiKSk7Ci0gICAgcmV0dXJu
IDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJy
YXkiKSk7CisgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0
eXBlIGVxICJGbG9hdDY0QXJyYXkiKSBvciAoJHR5cGUgZXEgIkRhdGFWaWV3IikpOwogICAgIHJl
dHVybiAwOwogfQogCkBAIC02MDksNiArNjE1LDcgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICBy
ZXR1cm4gMCBpZiAkb2JqZWN0LT5HZXRTZXF1ZW5jZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAw
IGlmICRvYmplY3QtPklzRW51bVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICRvYmplY3Qt
PklzU3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNUeXBlZEFy
cmF5VHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJHdlYkNvcmVUeXBlSGFzaHskdHlwZX07
CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImFueSI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHN1YiBBZGRJbmNsdWRlc0Zv
clR5cGUKICAgICBteSAkaW5jbHVkZXNSZWYgPSBzaGlmdDsKIAogICAgIHJldHVybiBpZiBTa2lw
SW5jbHVkZUhlYWRlcigkdHlwZSk7Ci0KKyAgICAKICAgICAjIFdoZW4gd2UncmUgZmluaXNoZWQg
d2l0aCB0aGUgb25lLWZpbGUtcGVyLWNsYXNzCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29u
J3QgbmVlZCB0aGVzZSBzcGVjaWFsIGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jl
c29sdmVyIikgewpAQCAtMjI1LDggKzIyNSw2IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CiAg
ICAgfSBlbHNpZiAoJGlzQ2FsbGJhY2sgJiYgJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5cGUo
JHR5cGUpKSB7CiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKUyR7dHlwZX0uaCJ9ID0gMTsKLSAg
ICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKLSAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IjxydW50aW1lLyR7dHlwZX0uaD4ifSA9IDE7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKICAg
ICAgICAgJGluY2x1ZGVzUmVmLT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTY4MiwxMSArNjgwLDcg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCJ9
KSB7Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW50ZXJm
YWNlTmFtZSkpIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvJGludGVy
ZmFjZU5hbWUuaD4ifSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkaGVhZGVy
SW5jbHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgJGhl
YWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKICAgICAk
aGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwpAQCAtOTYyLDIyICs5
NTYsNiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB9XG4iKTsKICAgICB9CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJh
eVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5k
ICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3Rv
cmFnZVR5cGUgPSBKU0M6OiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheUludDgiKSBpZiAkaW1wbFR5cGUgZXEgIkludDhBcnJheSI7Ci0gICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIkludDE2QXJy
YXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDMyIikgaWYg
JGltcGxUeXBlIGVxICJJbnQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlR5cGVkQXJyYXlVaW50OCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhBcnJheSI7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDhDbGFtcGVkIikgaWYgJGltcGxU
eXBlIGVxICJVaW50OENsYW1wZWRBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJUeXBlZEFycmF5VWludDE2IikgaWYgJGltcGxUeXBlIGVxICJVaW50MTZBcnJheSI7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDMyIikgaWYgJGltcGxUeXBl
IGVxICJVaW50MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFy
cmF5RmxvYXQzMiIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQzMkFycmF5IjsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDY0IikgaWYgJGltcGxUeXBlIGVxICJG
bG9hdDY0QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiO1xuIik7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaW50cHRyX3QgbV9zdG9yYWdlTGVuZ3RoO1xu
Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCogbV9zdG9yYWdlO1xu
Iik7Ci0gICAgfQotCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOwog
ICAgICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKQEAgLTE4NjYsMTIgKzE4NDQsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7
Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUp
IGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAi
QXJyYXlCdWZmZXIiKSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmJHtjbGFzc05hbWV9OjpzX2luZm8sIE9CSkVD
VF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2Ns
YXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVz
Y3JpcHRvcik7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3Rv
cmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpO1xuIik7Ci0gICAgICAg
IH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQpA
QCAtMjM3MSw3ICsyMzQzLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAo
JGZ1bmN0aW9uTmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVz
c2lvbihcJWltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFs
dWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVy
YXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpIGFuZCBu
b3QgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJBcnJheUJ1ZmZlciIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJuYXRp
dmVWYWx1ZS5nZXQoKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1
bWVudHMsICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRC
eSJ9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IiR7aW1wbGVtZW50ZWRCeX0uaCJ9ID0gMTsKQEAgLTI1MjMsMTMgKzI0OTksNiBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4g
IihleGVjKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInNldCIgYW5kICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFycmF5In0pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG15ICR2aWV3VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJUeXBlZEFycmF5In07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldFdlYkdMQXJyYXlIZWxwZXI8JGltcGxU
eXBlLCAkdmlld1R5cGU+KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBuZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXBsID0gc3RhdGlj
X2Nhc3Q8JGltcGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKGltcGwtPmlzUmVhZE9ubHkoKSkge1xuIik7CkBA
IC0zMDg0LDcgKzMwNTMsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIp
IHsKKyAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIiB8fCAoJGNvZGVHZW5lcmF0
b3ItPklzVHlwZWRBcnJheVR5cGUoJGFyZ1R5cGUpIGFuZCBub3QgJGFyZ1R5cGUgZXEgIkFycmF5
QnVmZmVyIikpIHsKICAgICAgICAgICAgIHB1c2ggQGFyZ3VtZW50cywgIiRuYW1lLmdldCgpIjsK
ICAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2Zm
KCRhcmdUeXBlKSBhbmQgbm90ICRpbnRlcmZhY2VOYW1lID1+IC9MaXN0JC8pIHsKICAgICAgICAg
ICAgIHB1c2ggQGFyZ3VtZW50cywgIiRuYW1lLT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKQEAgLTMz
NjYsNiArMzMzNSw3IEBAIHN1YiBHZXROYXRpdmVUeXBlCiAgICAgbXkgJHN2Z05hdGl2ZVR5cGUg
PSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBlKTsKICAgICBy
ZXR1cm4gIiR7c3ZnTmF0aXZlVHlwZX0qIiBpZiAkc3ZnTmF0aXZlVHlwZTsKICAgICByZXR1cm4g
IlJlZlB0cjxET01TdHJpbmdMaXN0PiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZ0xpc3QiOworICAg
IHJldHVybiAiUmVmUHRyPCR7dHlwZX0+IiBpZiAkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5
VHlwZSgkdHlwZSkgYW5kIG5vdCAkdHlwZSBlcSAiQXJyYXlCdWZmZXIiOwogICAgIHJldHVybiAk
bmF0aXZlVHlwZXskdHlwZX0gaWYgZXhpc3RzICRuYXRpdmVUeXBleyR0eXBlfTsKIAogICAgIG15
ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKQEAgLTM1
MDUsNiArMzQ3NSwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJKU0RPTVN0cmluZ0xpc3QuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIHJldHVy
biAidG9ET01TdHJpbmdMaXN0KGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KKyAgICAKKyAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVy
biAidG8kdHlwZSgkdmFsdWUpIjsKKyAgICB9CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSFRN
TE9wdGlvbkVsZW1lbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIkhUTUxPcHRpb25F
bGVtZW50IjsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXZlbnQuaCIsICRjb25kaXRpb25hbCkg
aWYgJHR5cGUgZXEgIkV2ZW50IjsKQEAgLTM1NzQsNyArMzU0OCw3IEBAIHN1YiBOYXRpdmVUb0pT
VmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+Iiwg
JGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dpdGhDYWNoZShleGVjLCAk
dmFsdWUpIjsKICAgICB9Ci0KKyAgICAKICAgICBteSAkZ2xvYmFsT2JqZWN0OwogICAgIGlmICgk
dGhpc1ZhbHVlKSB7CiAgICAgICAgICRnbG9iYWxPYmplY3QgPSAiJHRoaXNWYWx1ZS0+Z2xvYmFs
T2JqZWN0KCkiOwpAQCAtMzYxNSwxNCArMzU4OSwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAg
ICAgfSBlbHNpZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3IgJHR5cGUgZXEg
ImFueSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRl
c2VyaWFsaXplKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgp
IjsKKyAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkp
IHsKKyAgICAgICAgIyBEbyBub3RoaW5nIC0gYWxsIGhlYWRlcnMgYXJlIGFscmVhZHkgaW5jbHVk
ZWQuCiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIGhlYWRlciB3aXRo
IHNhbWUgbmFtZS4KICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIsICRjb25k
aXRpb25hbCk7Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgk
dHlwZSkpIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS8kdHlwZS5o
PiIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRl
cigkdHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5j
bHVkZUhlYWRlcigkdHlwZSk7Ci0gICAgICAgIH0KKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IiR0eXBlLmgiLCAkY29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1
ZGVIZWFkZXIoJHR5cGUpOwogICAgIH0KIAogICAgIHJldHVybiAkdmFsdWUgaWYgJGNvZGVHZW5l
cmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKTsKQEAgLTQxMDUsMzAgKzQwNzcsNiBAQCBF
TkQKIH0KIAogRU5ECi0gICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVj
dG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgewotICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCJ9ID0gMTsKLSAgICAgICAgICAg
IG15ICR2aWV3VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFy
cmF5In07Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFt
ZX0oRXhlY1N0YXRlKiBleGVjKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVj
dG9yQ2xhc3NOYW1lfSoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfSo+KGV4ZWMtPmNhbGxlZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIFJlZlB0cjwkaW50ZXJmYWNlTmFtZT4gYXJyYXkgPSBjb25zdHJ1Y3RBcnJheUJ1
ZmZlclZpZXc8JGludGVyZmFjZU5hbWUsICR2aWV3VHlwZT4oZXhlYyk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWFycmF5LmdldCgpKVxuIik7Ci0gICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIC8vIEV4Y2VwdGlvbiBoYXMgYWxy
ZWFkeSBiZWVuIHRocm93bi5cbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2Jq
ZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5LmdldCgp
KSkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJHtpbnRlcmZh
Y2VOYW1lfSogb2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdG9KU0Fy
cmF5QnVmZmVyVmlldzwke2NsYXNzTmFtZX0+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTtc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAg
ICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVk
U2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7
Y2xhc3NOYW1lfTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGlu
ZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgaW1wbCgpLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSAmJiAoISRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdl
bmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgbXkgJG92ZXJsb2FkZWRJ
bmRleFN0cmluZyA9ICIiOwogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+e292ZXJsb2FkZWRJ
bmRleH0gJiYgJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSA+IDApIHsKQEAgLTQyMDcsNyAr
NDE1NSw3IEBAIHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogCiAgICAgbXkg
JGNvbnN0cnVjdG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7
Y2xhc3NOYW1lfU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsK
ICAgICBteSAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDA7Ci0gICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikgfHwgJGNvZGVH
ZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIp
KSB7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVy
ZmFjZSwgIkV2ZW50IikpIHsKICAgICAgICAgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGggPSAxOwog
ICAgIH0gZWxzaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3Rv
ciJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3Rv
ciJ9KSB7CiAgICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVj
dG9yc307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVy
LmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRC
bG9iQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBCbG9i
QnVpbGRlcjo6YXBwZW5kKEFycmF5QnVmZmVyKiBhcgogICAgIGFwcGVuZEJ5dGVzRGF0YShhcnJh
eUJ1ZmZlci0+ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotdm9pZCBC
bG9iQnVpbGRlcjo6YXBwZW5kKEFycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3KQordm9p
ZCBCbG9iQnVpbGRlcjo6YXBwZW5kKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1
ZmZlclZpZXcpCiB7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24o
IldlYkNvcmUuQmxvYi5jb25zdHJ1Y3Rvci5BcnJheUJ1ZmZlck9yVmlldyIsIEJsb2JDb25zdHJ1
Y3RvckFycmF5QnVmZmVyVmlldywgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJPclZpZXdNYXgp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCShy
ZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWls
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmcpOwogI2lmIEVO
QUJMRShCTE9CKQogICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXIqKTsKLSAgICB2b2lk
IGFwcGVuZChKU0M6OkFycmF5QnVmZmVyVmlldyopOworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+KTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxCbG9i
PiBnZXRCbG9iKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01X
aW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAot
ICAgIEN1c3RvbUNvbnN0cnVjdG9yKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKSwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQywKLSAgICBJbXBsZW1l
bnRhdGlvbkxhY2tzVlRhYmxlCi1dIGludGVyZmFjZSBBcnJheUJ1ZmZlciB7Ci0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLSAgICBBcnJheUJ1ZmZlciBz
bGljZShsb25nIGJlZ2luLCBvcHRpb25hbCBsb25nIGVuZCk7Ci19OwotCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJKHJldmlzaW9uIDE1
Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBDdXN0b21U
b0pTT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBBcnJheUJ1ZmZlclZpZXcgewotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBcnJheUJ1ZmZlciBidWZmZXI7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgYnl0ZU9mZnNldDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBieXRlTGVuZ3RoOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24g
VmFsdWUgewotICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBp
ZiAoIWJ1ZmZlci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShi
dWZmZXIsIDAsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3Ojpj
cmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5i
eXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENo
ZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNl
dCArIGNoZWNrZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8
IGNoZWNrZWRNYXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVP
ZmZzZXQsIGJ5dGVMZW5ndGgpKTsKLX0KLQotRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxl
bmd0aCkKLSAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgLCBt
X2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKLXsKLX0KLQotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5
dGVzKGJvb2wgbGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVy
biBsaXR0bGVFbmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlm
Ci19Ci0KLWlubGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNo
YXIgdGVtcCA9ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCAr
IDEpOwotfQotCi1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAg
ICBzd2FwQnl0ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQot
Ci1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0
ZXMocCwgcCArIDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRl
cyhwICsgMiwgcCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0
aWMgdm9pZCBmbGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wg
bGl0dGxlRW5kaWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAg
ICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAg
ICAgICBmbGlwQnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IDQ6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6
OmdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkg
ewotICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNl
IGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBz
dXBwb3J0IHVuYWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHko
dmFsdWUuYnl0ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5
dGVPZmZzZXQsIHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMs
IHNpemVvZihUKSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0
ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gc3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBi
dXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0
b3Jlcy4KLSAgICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1
ZTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0
dGxlRW5kaWFuKTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3Mp
ICsgYnl0ZU9mZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3Qg
RGF0YVZpZXc6OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwot
fQotCi11aW50OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0
LCBmYWxzZSwgZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
cmV0dXJuIGdldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXVpbnQxNl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRh
PHVpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotaW50MzJfdCBE
YXRhVmlldzo6Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVP
ZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MzJfdCBEYXRhVmlldzo6Z2V0VWlu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxl
RW5kaWFuLCBlYyk7Ci19Ci0KLWZsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0K
LWRvdWJsZSBEYXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZG91
YmxlPihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50OF90Pihi
eXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZh
bHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFycmF5QnVmZmVy
Vmlldzo6bmV1dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KLQotfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBEYXRhVmlld19oCi0jZGVmaW5lIERhdGFWaWV3X2gK
LQotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwotCi1jbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgewotcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsK
LQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoOyB9Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlTGVuZ3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4g
c2xpY2UoaW50LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVp
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRJbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1
aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxz
ZSwgZWMpOyB9Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMy
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBm
bG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBn
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRV
aW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfQotICAgIHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRl
T2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwg
ZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQot
ICAgIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRG
bG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotcHJpdmF0ZToKLSAgICBEYXRhVmlldyhQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0
ZUxlbmd0aCk7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIGJl
eW9uZFJhbmdlKHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQg
Pj0gbV9ieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dW5zaWduZWQgbV9ieXRlTGVuZ3RoOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBEYXRhVmlld19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9E
YXRhVmlldy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuaWRsCShyZXZpc2lvbiAxNTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9EYXRhVmlldy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDdXN0
b21Db25zdHJ1Y3RvcihBcnJheUJ1ZmZlciBidWZmZXIsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
Ynl0ZU9mZnNldCwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoKSwKLSAgICBDdXN0
b21Ub0pTT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKLV0gaW50ZXJmYWNlIERhdGFWaWV3
IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICAvLyBBbGwgdGhlc2UgbWV0aG9kcyByYWlzZSBhbiBl
eGNlcHRpb24gaWYgdGhleSB3b3VsZCByZWFkIG9yIHdyaXRlIGJleW9uZCB0aGUgZW5kIG9mIHRo
ZSB2aWV3LgotCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYnl0ZSBnZXRJbnQ4KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gb2N0ZXQgZ2V0VWludDgodW5z
aWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gc2hvcnQgZ2V0SW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRp
b25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBzaG9ydCBnZXRVaW50MTYodW5zaWduZWQgbG9uZyBieXRl
T2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBsb25nIGdldEludDMyKHVuc2lnbmVkIGxvbmcgYnl0
ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBnZXRVaW50MzIodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAg
ICAvLyBVc2UgY3VzdG9tIGNvZGUgdG8gaGFuZGxlIE5hTiBjYXNlLgotICAgIFtDdXN0b20sIFN0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBmbG9hdCBnZXRGbG9hdDMyKHVuc2ln
bmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAg
IFtDdXN0b20sIFN0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxl
RW5kaWFuKTsKLQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBs
b25nIGJ5dGVPZmZzZXQsIGJ5dGUgdmFsdWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQg
c2V0VWludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvY3RldCB2YWx1ZSk7Ci0KLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50MTYodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVF
bmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBz
ZXRVaW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwg
b3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQs
IGxvbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0
bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotfTsKLQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25z
dHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBD
dXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJh
eT1mbG9hdCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZs
b2F0MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBC
WVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsZW5ndGg7Ci0gICAgRmxvYXQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBmbG9hdCAodW5zaWduZWQgbG9uZyBpbmRleCk7
Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0
aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCShyZXZpc2lvbiAx
NTM5NTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRl
eHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9
VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05h
dGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3Qs
Ci0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWRvdWJsZSwKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZsb2F0NjRBcnJheSA6IEFy
cmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVO
VCA9IDg7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0g
ICAgRmxvYXQ2NEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9u
ZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsK
LQotICAgIGdldHRlciBkb3VibGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9p
ZCBzZXQoRmxvYXQ2NEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29y
a2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAg
IEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAg
IEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNr
Q29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9c2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRp
b25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcg
ewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDhBcnJheSBz
dWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgYnl0ZSAo
dW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQ4QXJyYXkgYXJyYXks
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5j
ZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQg
c2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5p
ZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2
QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2Nv
cGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4
ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNU
YWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAot
ICAgIFR5cGVkQXJyYXk9c2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1d
IGludGVyZmFjZSBJbnQxNkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0
PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgc2hvcnQgKHVuc2lnbmVkIGxvbmcg
aW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2Jh
bENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVt
cGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNP
YmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWludCwKLSAg
ICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDMyQXJyYXkgOiBB
cnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1F
TlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwot
ICAgIEludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQot
ICAgIGdldHRlciBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0
KEludDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAv
LyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDhBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJH
bG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3Vz
dG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNO
b1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25z
dGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9u
TmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDhBcnJheSBz
dWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFs
IGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0K
LSAgICAvLyB2b2lkIHNldChVaW50OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwJKHJldmlz
aW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFy
cmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25z
dHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBD
dXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJh
eT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRl
cmZhY2UgVWludDhDbGFtcGVkQXJyYXkgOiBVaW50OEFycmF5IHsKLSAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50OENsYW1wZWRBcnJheSBzdWJhcnJheShbRGVm
YXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsK
LQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyBGSVhN
RTogTWlzc2luZyBvdGhlciBzZXR0ZXJzIQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4Q2xhbXBlZEFy
cmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBz
ZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
LSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Vp
bnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50MTZBcnJheS5pZGwJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1VpbnQxNkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgc2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50MTZBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0g
ICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDE2QXJyYXkgc3Vi
YXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBs
b25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5zaWduZWQgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5k
ZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkocmV2aXNpb24g
MTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25l
ZCBpbnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50
MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRF
U19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7Ci0gICAgVWludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBv
cHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5z
aWduZWQgbG9uZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50
MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZv
aWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKICNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogCisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4K
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5
UHRyLmg+CkBAIC0zNDE1LDcgKzM0MTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVhZFBpeGVscyhHCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gVmFsaWRhdGUgYXJy
YXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4KSB7CisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgp
ICE9IEpTQzo6VHlwZVVpbnQ4KSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJW
aWV3IG5vdCBVaW50OEFycmF5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MTU2LDcg
KzUxNTcsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpU
eXBlVWludDgpIHsKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVp
bnQ4KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBidXQg
QXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTUxNjQsMTMgKzUxNjUsMTMgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUXzVfNl81OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmll
dzo6VHlwZVVpbnQxNikgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpU
eXBlVWludDE2KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hP
UlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgaWYgKHBpeGVs
cy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKICAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMy
QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ3J5cHRvLmNwcAkocmV2aXNpb24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9DcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsNyBAQCBuYW1lc3BhY2Ug
ewogCiBib29sIGlzSW50ZWdlckFycmF5KEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7Ci0gICAg
QXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSB0eXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICBy
ZXR1cm4gdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4Ci0gICAgICAgICAgIHx8IHR5
cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgKLSAgICAgICAgICAgfHwgdHlwZSA9PSBB
cnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OENsYW1wZWQKLSAgICAgICAgICAgfHwgdHlwZSA9PSBB
cnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVm
ZmVyVmlldzo6VHlwZVVpbnQxNgotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmll
dzo6VHlwZUludDMyCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBl
VWludDMyOworICAgIHJldHVybiBKU0M6OmlzSW50KGFycmF5LT5nZXRUeXBlKCkpOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKIAogI2lt
cG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJEYXRhVmlldy5oIgogI2ltcG9ydCAi
RXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgpAQCAtNDcsNiArNDYsOSBAQAogI2ltcG9ydCAi
V2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJm
YWNlLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvRGF0YVZp
ZXcuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2ltcG9ydCA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgogI2ltcG9ydCA8cnVudGltZS9VaW50MTZBcnJheS5oPgogI2lt
cG9ydCA8cnVudGltZS9VaW50MzJBcnJheS5oPgogI2ltcG9ydCA8cnVudGltZS9VaW50OEFycmF5
Lmg+CkBAIC05MjMsOCArOTI1LDggQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOgogICAgICAgICAvLyBbNCBieXRlczoga2V5VVJJIHNpemVdLCBba2V5VVJJIHNpemUg
Ynl0ZXM6IGtleVVSSV0KICAgICAgICAgdW5zaWduZWQga2V5VVJJU2l6ZSA9IGtleVVSSS5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERh
dGFCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKDQgKyBrZXlVUklTaXplLCAxKTsKLSAgICAg
ICAgUmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXRE
YXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKLSAgICAgICAgaW5p
dERhdGFWaWV3LT5zZXRVaW50MzIoMCwga2V5VVJJU2l6ZSwgdHJ1ZSwgSUdOT1JFX0VYQ0VQVElP
Tik7CisgICAgICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBKU0M6OkRh
dGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVu
Z3RoKCkpOworICAgICAgICBpbml0RGF0YVZpZXctPnNldDx1aW50MzJfdD4oMCwga2V5VVJJU2l6
ZSwgdHJ1ZSk7CiAKICAgICAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlVUklBcnJheSA9IFVp
bnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDQsIGtleVVSSS5sZW5ndGgoKSk7CiAg
ICAgICAgIGtleVVSSUFycmF5LT5zZXRSYW5nZShrZXlVUkkuY2hhcmFjdGVycygpLCBrZXlVUkku
bGVuZ3RoKCkgLyBzaXplb2YodW5zaWduZWQgY2hhciksIDApOwpAQCAtMTIwNCwxMyArMTIwNiwx
MyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IGluaXREYXRhLT5idWZmZXIoKTsKIAogICAg
IC8vIFVzZSBhIERhdGFWaWV3IHRvIHJlYWQgdWludDMyIHZhbHVlcyBmcm9tIHRoZSBidWZmZXIs
IGFzIFVpbnQzMkFycmF5IHJlcXVpcmVzIHRoZSByZWFkcyBiZSBhbGlnbmVkIG9uIDQtYnl0ZSBi
b3VuZGFyaWVzLiAKLSAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFWaWV3
OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OworICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBKU0M6OkRhdGFWaWV3
OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkp
OwogICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgYm9vbCBzdGF0dXMgPSB0cnVlOwogCi0gICAgdWludDMyX3Qga2V5VVJJTGVuZ3RoID0gaW5p
dERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBlYyk7CisgICAgdWludDMyX3Qga2V5
VVJJTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0
YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGtleVVSSUxl
bmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBr
ZXlVUklMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3Jl
YXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGtleVVSSUxlbmd0aCk7CkBAIC0xMjIwLDkgKzEy
MjIsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAga2V5
VVJJID0gU3RyaW5nKGtleVVSSUFycmF5LT5kYXRhKCksIGtleVVSSUxlbmd0aCAvIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBrZXlVUklMZW5ndGg7CiAKLSAgICB1aW50
MzJfdCBrZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwg
ZWMpOworICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMy
X3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVj
IHx8IG9mZnNldCArIGtleUlETGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICgh
c3RhdHVzIHx8IG9mZnNldCArIGtleUlETGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleUlEQXJyYXkg
PSBVaW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGtleUlETGVuZ3Ro
KTsKQEAgLTEyMzIsOSArMTIzNCw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBrZXlJRCA9IFN0cmluZyhrZXlJREFycmF5LT5kYXRhKCksIGtleUlETGVu
Z3RoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zmc2V0ICs9IGtleUlETGVuZ3Ro
OwogCi0gICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldFVp
bnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9
IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAg
IG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBjZXJ0aWZpY2F0ZUxlbmd0aCA+
IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBjZXJ0aWZp
Y2F0ZUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgY2VydGlmaWNhdGUgPSBVaW50OEFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9m
ZnNldCwgY2VydGlmaWNhdGVMZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAkocmV2aXNp
b24gMTUzOTUwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUN1c3RvbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsOSBAQAogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgVWludDhDbGFt
cGVkQXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3VzdG9tRmlsdGVy
UmVuZGVyZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gMTUzOTUwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlICJSZW5kZXJU
cmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCisjaW5jbHVkZSA8cnVudGlt
ZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAJKHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAJ
KHJldmlzaW9uIDE1Mzk1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIkNETS5oIgogI2lu
Y2x1ZGUgIk1lZGlhS2V5RXJyb3IuaCIKKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9VaW50OEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1Mzk3NikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgWW91IGRv
bid0IG5lZWQgdG8gaW5jbHVkZSBKU1VpbnQ4QXJyYXkgYW55bW9yZSBpZiB5b3UganVzdCB3YW50
IHRvCisgICAgICAgIHVud3JhcCBvbmU7IEpTRE9NQmluZGluZyBnaXZlcyB5b3UgYWxsIG9mIHRo
ZSB0aGluZ3MgeW91IG5lZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmNwcDoKKwogMjAxMy0wOC0xMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeGVkIGFuIG9mZi1ieS0oc2l6ZW9mKGNoYXIqKSAtIDEp
IGJ1Zy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxNTM5NTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR2Vv
bG9jYXRpb25Qb3NpdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU1Vp
bnQ4QXJyYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208700</attachid>
            <date>2013-08-13 23:05:41 -0700</date>
            <delta_ts>2013-08-14 00:31:10 -0700</delta_ts>
            <desc>starting to pass layouttests</desc>
            <filename>bug-119064-20130813230541.patch</filename>
            <type>text/plain</type>
            <size>624982</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyMiBA
QAorMjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpbmcgdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3ZWFr
IGhhbmRsZSAoYSBjZWxsIGFuZCBhIG1hbGxvYydkIHN0b3JhZ2UgdmVjdG9yLCBwbHVzIGEgZmlu
YWxpemVyIGZvciB0aGUKKyAgICAgICAgICBsYXR0ZXIpLiBUaGUgbGF0dGVyIGlzIG9ubHkgdXNl
ZCBmb3Igb3ZlcnNpemUgYXJyYXlzLiBSZW1lbWJlciB0aGF0IGJlZm9yZQorICAgICAgICAgIGl0
IHdhcyA3IGFsbG9jYXRpb25zIG5vIG1hdHRlciB3aGF0LgorICAgICAgICAKKyAgICAgICAgLSBU
eXBlZCBhcnJheXMgcmVxdWlyZSBqdXN0IDQgd29yZHMgb2Ygb3ZlcmhlYWQ6IFN0cnVjdHVyZSos
IEJ1dHRlcmZseSosCisgICAgICAgICAgbW9kZS9sZW5ndGgsIHZvaWQqIHZlY3Rvci4gQmVmb3Jl
IGl0IHdhcyBhIGxvdCBtb3JlIHRoYW4gdGhhdCAtIHJlbWVtYmVyLAorICAgICAgICAgIHRoZXJl
IHdlcmUgZml2ZSBhZGRpdGlvbmFsIG9iamVjdHMgdGhhdCBkaWQgYWJzb2x1dGVseSBub3RoaW5n
IGZvciBhbnlib2R5LgorICAgICAgICAKKyAgICAgICAgLSBOYXRpdmUgdmlld3MgYXJlbid0IHRy
YWNrZWQgYnkgdGhlIGJ1ZmZlciwgb3IgYnkgdGhlIHdyYXBwZXJzLiBUaGV5IGFyZQorICAgICAg
ICAgIHRyYW5zaWVudC4gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBwcm9iYWJseSBzd2l0Y2ggdG8gbm90
IGV2ZW4gaGF2aW5nIHRoZW0gYmUKKyAgICAgICAgICBtYWxsb2MnZC4KKyAgICAgICAgCisgICAg
ICAgIC0gTmF0aXZlIGFycmF5IGJ1ZmZlcnMgaGF2ZSBhbiBlZmZpY2llbnQgd2F5IG9mIHRyYWNr
aW5nIGFsbCBvZiB0aGVpciBKUyB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGJvdGggZm9yIG5l
dXRlcmluZywgYW5kIGZvciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIEdDCisgICAgICAgICAg
c3BlY2lhbC1jYXNlcyBuYXRpdmUgYXJyYXkgYnVmZmVycy4gVGhpcyBzYXZlcyBhIGJ1bmNoIG9m
IGdyaWVmOyBmb3IgZXhhbXBsZQorICAgICAgICAgIGl0IG1lYW5zIHRoYXQgYSBKUyB2aWV3IHdy
YXBwZXIgY2FuIHJlZmVyIHRvIGl0cyBidWZmZXIgdmlhIHRoZSBidXR0ZXJmbHksCisgICAgICAg
ICAgd2hpY2ggd291bGQgYmUgZGVhZCBieSB0aGUgdGltZSB3ZSB3ZW50IHRvIGZpbmFsaXplLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhID44eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhh
dCBhbGxvY2F0ZSBhIGxvdCBvZiBzbWFsbCB0eXBlZCBhcnJheXMsCisgICAgICAgIGFuZCBhID42
eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxvY2F0ZSBhIGxvdCBvZiBsYXJnZSBvbmVz
LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKU0NUeXBlZEFy
cmF5U3R1YnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5VmFsSW5mby5oOgorICAgICAg
ICAoSlNDOjpoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpT
Qzo6aml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVR5
cGVGb3JKSVRBcnJheU1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0b1R5cGVkQXJyYXlUeXBl
KToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjp0eXBlZEFycmF5VHlwZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
cmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogaGVhcC9Db3B5VG9rZW4uaDoKKyAgICAgICAgKiBoZWFwL0RlZmVyR0MuaDoKKyAgICAg
ICAgKEpTQzo6RGVmZXJHQ0ZvckFXaGlsZTo6RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgIChK
U0M6OkRlZmVyR0NGb3JBV2hpbGU6On5EZWZlckdDRm9yQVdoaWxlKToKKyAgICAgICAgKiBoZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHQ0luY29taW5n
UmVmQ291bnRlZDo6R0NJbmNvbWluZ1JlZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6fkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJ
bmNvbWluZ1JlZkNvdW50ZWQ6Om51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OmluY29taW5nUmVmZXJlbmNlQXQpOgorICAgICAg
ICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6c2luZ2xldG9uRmxhZyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNWZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKEpT
Qzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc0FueUluY29taW5nKToKKyAgICAgICAgKEpTQzo6
R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc1NpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVm
Q291bnRlZDo6dmVjdG9yT2ZDZWxscyk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6YWRkSW5jb21pbmdSZWZlcmVu
Y2UpOgorICAgICAgICAoSlNDOjo6OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAg
ICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6OnNpemUpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdDSW5jb21p
bmdSZWZDb3VudGVkU2V0KToKKyAgICAgICAgKEpTQzo6Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQpOgorICAgICAgICAoSlNDOjo6OmFkZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6Ojo6c3dl
ZXApOgorICAgICAgICAoSlNDOjo6OnJlbW92ZUFsbCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3Zl
RGVhZCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRk
UmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZXh0cmFTaXplKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNhcGFjaXR5KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZk5lZWRlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSk6
CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0
VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QXJyYXlCdWZmZXI6OnRyYW5zZmVyKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVy
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAg
KEpTQzo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRlcyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpw
aW4pOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6dW5waW4pOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVm
ZmVyVmlldyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmll
dyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZSk6CisgICAg
ICAgICogcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXJWaWV3Ojppc05ldXRlcmVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpidWZm
ZXIpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmJhc2VBZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6Y2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVm
ZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0RhdGFWaWV3LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuY3BwLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OndyYXApOgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZp
ZXcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaC4K
KyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpEYXRh
Vmlldzo6Z2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXQpOgorICAgICAgICAo
SlNDOjpEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0MzJBcnJheS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRmxvYXQ2NEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6ZGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0
KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRSYW5nZSk6CisgICAg
ICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb1JhbmdlKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp6ZXJvRmlsbCk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldzo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjppdGVtKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91
bmREYXRhKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToK
KyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6Ojo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAg
ICAoSlNDOjo6OnN1YmFycmF5KToKKyAgICAgICAgKEpTQzo6Ojp3cmFwKToKKyAgICAgICAgKiBy
dW50aW1lL0luZGV4aW5nSGVhZGVyLmg6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjph
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBcnJheUJ1ZmZl
cik6CisgICAgICAgICogcnVudGltZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9J
bnQzMkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlcjo6SlNBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjppbXBsKToKKyAgICAgICAgKEpTQzo6dG9BcnJheUJ1ZmZlcik6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmFycmF5
QnVmZmVyUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkpTQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OnNpemVPZik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpD
b25zdHJ1Y3Rpb25Db250ZXh0OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OnZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bW9k
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0
OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bW9kZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpK
U0FycmF5QnVmZmVyVmlldzo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
TW9kZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmltcGwpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmJ5dGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlldzo6SlNEYXRhVmlldyk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpzZXQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3Ojp0
eXBlZEltcGwpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmll
dy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OmdldERhdGEpOgorICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50
MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmll
d1Byb3RvRnVuY0dldFVpbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0
RmxvYXQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCk6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCk6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jU2V0SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y1NldEludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCk6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6
ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY1NldEZsb2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
NjQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0pTRmxvYXQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNGbG9hdDY0QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlw
ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNh
blNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmdldEluZGV4UXVpY2tseUFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5BY2Nl
c3NSYW5nZVF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6
dHlwZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OnRvTmF0aXZlVHlwZWRWaWV3KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6Omdl
dENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjo6OmdldENhbGxEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpT
Qzo6Ojp2YWxpZGF0ZVJhbmdlKToKKyAgICAgICAgKEpTQzo6OjpzZXRXaXRoU3BlY2lmaWNUeXBl
KToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6cHV0QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjo6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjo6OmNv
cHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjo6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkp
OgorICAgICAgICAoSlNDOjo6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOgorICAgICAg
ICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheSk6CisgICAgICAg
IChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUpOgorICAgICAgICAoSlND
Ojo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
YXJyYXlCdWZmZXJQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YXJy
YXlCdWZmZXJTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dHlwZWRB
cnJheVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0ludDE2QXJyYXkuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU0ludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0ludDhBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJh
eUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU1VpbnQxNkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50
MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDhBcnJheS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlND
OjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OkludGVn
cmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkludGVncmFs
VHlwZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFy
cmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFw
dG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0
b0RvdWJsZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvTmF0aXZlKToK
KyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpVaW50
OENsYW1wZWRBZGFwdG9yOjpjbGFtcCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUeXBlZEFycmF5Q29udHJvbGxlcjo6
VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpUeXBlZEFycmF5Q29udHJvbGxl
cjo6flR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0
b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Y2xhc3NJbmZvRm9yVHlwZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OnRvSW5kZXgpOgorICAgICAgICAoSlNDOjppc1R5cGVkVmlldyk6CisgICAgICAgIChKU0M6
OmVsZW1lbnRTaXplKToKKyAgICAgICAgKEpTQzo6aXNJbnQpOgorICAgICAgICAoSlNDOjppc0Zs
b2F0KToKKyAgICAgICAgKEpTQzo6aXNTaWduZWQpOgorICAgICAgICAoSlNDOjppc0NsYW1wZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9VaW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDMyQXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL1VpbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAxMy0wOC0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEZvbzo6c19pbmZvIHNob3VsZCBiZSBGb286OmluZm8oKSwgc28gdGhhdCB5b3UgY2FuIGNoYW5n
ZSBob3cgdGhlIHNfaW5mbyBpcyBhY3R1YWxseSBsaW5rZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBEYXRl
UHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgSlNEYXRh
Vmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAgSlNHbG9i
YWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAuaCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBKU0NUeXBlZEFycmF5U3R1YnNfaAotI2RlZmluZSBKU0NUeXBlZEFy
cmF5U3R1YnNfaAotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiRmxvYXQ2
NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQzMkFycmF5LmgiCi0j
aW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQ4Q2xhbXBlZEFycmF5LmgiCi0K
LSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLSNkZWZp
bmUgVFlQRURfQVJSQVkobmFtZSwgdHlwZSkgXAotY2xhc3MgSlMjI25hbWUjI0FycmF5IDogcHVi
bGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsgXAotcHVibGljOiBcCi0gICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCi0gICAgc3RhdGljIEpTIyNuYW1lIyNBcnJheSogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKLSAgICB7IFwKLSAgICAgICAgSlMj
I25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTIyNu
YW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFtZSMjQXJyYXkoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAotICAgICAgICByZXR1cm4gcHRyOyBcCi0gICAgfVwK
LVwKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3Rh
dGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBERUNMQVJFX0lORk87
XAotXAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpXAotICAgIHtcCi0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTtcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtcCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcCi1cCi0gICAg
c3RhdGljIGNvbnN0IEpTQzo6VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0g
SlNDOjpUeXBlZEFycmF5IyNuYW1lO1wKLSAgICB1aW50MzJfdCBtX3N0b3JhZ2VMZW5ndGg7XAot
ICAgIHR5cGUqIG1fc3RvcmFnZTtcCi0gICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAot
cHJvdGVjdGVkOlwKLSAgICBKUyMjbmFtZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7XAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7IFwKLSAgICBKU0M6
OkpTVmFsdWUgZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcCi0g
ICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6
OkpTVmFsdWUpO1wKLX07XAotXAotY29uc3QgQ2xhc3NJbmZvIEpTIyNuYW1lIyNBcnJheTo6c19p
bmZvID0geyAjbmFtZSAiQXJyYXkiICwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKUyMjbmFtZSMjQXJyYXkpIH07XAotXAotSlMjI25hbWUjI0FycmF5OjpKUyMjbmFt
ZSMjQXJyYXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpXAotICAgIDogQmFzZShnbG9iYWxPYmpl
Y3QtPnZtKCksIHN0cnVjdHVyZSlcCi0gICAgLCBtX2ltcGwoaW1wbClcCi17XAotfVwKLVwKLXZv
aWQgSlMjI25hbWUjI0FycmF5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXAote1wKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7XAotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0
b3IoJkpTIyNuYW1lIyNBcnJheTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0Fy
cmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3Jh
Z2VMZW5ndGgpKTtcCi0gICAgdm0ucmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihtX2ltcGwu
Z2V0KCksIGRlc2NyaXB0b3IpO1wKLSAgICBtX3N0b3JhZ2UgPSBtX2ltcGwtPmRhdGEoKTtcCi0g
ICAgbV9zdG9yYWdlTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTtcCi0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgXAotICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTtcCi19XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVj
dC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0
QnlJbmRleChleGVjLCBpbmRleCkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0g
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAg
ICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4o
b2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAg
IGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNT
RVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERv
bnREZWxldGUpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXAote1wKLSAgICBKUyMjbmFtZSMjQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICBpZiAo
cHJvcGVydHlOYW1lIDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7
XAotICAgICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMj
I25hbWUjI0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClc
Ci17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMj
QXJyYXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
XAotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAg
IHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICBy
ZXR1cm47XAotICAgIH1cCi0gICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUg
dmFsdWUpIFwKLXtcCi0gICAgbV9pbXBsLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMj
bmFtZSMjQXJyYXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpO1wKLSAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTtcCi0gICAgcmV0dXJuO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNB
cnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSlcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFt
ZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7XAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2VMZW5ndGg7ICsraSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpO1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpT
IyNuYW1lIyNBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17
XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTtcCi0gICAgdHlw
ZSByZXN1bHQgPSBtX2ltcGwtPml0ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91
YmxlKXJlc3VsdCkpXAotICAgICAgICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFs
dWUocmVzdWx0KTtcCi19XAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMjI25hbWUjI0FycmF5KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAo
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkudG9JbnQzMihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDAp
IFwKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
Y2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJl
ZlB0cjxuYW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBc
Ci0gICAgaWYgKCFidWZmZXIpIFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJh
bWUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3Qg
YSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9B
UlJBWShVaW50OCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3Qp
OwotVFlQRURfQVJSQVkoVWludDE2LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVp
bnQzMl90KTsKLVRZUEVEX0FSUkFZKEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwg
aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9h
dDMyLCBmbG9hdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJK
U1Byb3h5LmgiCkBAIC0yMzgsMTYgKzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFn
cywgMSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlv
bih2bSwgIlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBh
ZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVj
dEpTVWludDhDbGFtcGVkQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24odm0sICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAg
ICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpT
VWludDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJ
bnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVj
dGFibGVGdW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEp
OwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29u
c3RydWN0SlNJbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9u
KHZtLCAiRmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAg
ICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RK
U0Zsb2F0NjRBcnJheSwgMSk7Ci0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0p
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYy
NTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFC
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmNwcCAqLzsgfTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2
RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwICovOyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICov
OyB9OworCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZF
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9Owor
CQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJ
CTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9h
dDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
SW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICov
OyB9OworCQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgKi87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3
QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2
NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVk
QXJyYXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmNwcCAqLzsgfTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
RDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1
RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3
IEBACiAJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQw
MTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0
NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJG
RTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07
CisJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNw
ZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87
IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFG
QjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fi
c3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICov
OyB9OwpAQCAtMzQ5LDcgKzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVC
M0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUz
IC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUx
N0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1
QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2
IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBB
QTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENs
YW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
aXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBw
YXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI1NCw2ICsxMzUyLDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RD
YWxsUmV0dXJuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVBy
b3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVj
aWFsUG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9p
bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBD
RUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBA
CiAJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdD
b21tb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7
IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgx
QTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7
IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlB
NzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5
MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFy
cmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4
QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1
QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFG
MzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4
MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZG
NjBGNyAvKiBjb25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2
YVNjcmlwdENvcmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyog
SlNDVHlwZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8q
IERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8q
IEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3
QjlGIC8qIEFQSSAqLywKQEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhG
MkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJF
MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1
OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2
QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICov
LAogCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJ
QzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUx
NUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYg
KzI5NzEsOCBAQAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklU
TG9jay5oICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRh
LmNwcCAqLywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5o
ICovLAorCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJ
CQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAz
NDUwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAz
NDYwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4
MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMw
MDcsOCBAQAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcg
LyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyog
R2V0dGVyU2V0dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50
aWZpZXIuY3BwICovLApAQCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDhBcnJheS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4
ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJ
CQkJMTREQTgxOEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkz
QURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAz
OEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYy
QjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJ
CQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAor
CQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAor
CQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmgg
Ki8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0y
OTM4LDE3ICszMDQ4LDMyIEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pT
VmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVl
LmggKi8sCiAJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVz
LmggKi8sCisJCQkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICov
LAorCQkJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJ
MEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAor
CQkJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8s
CiAJCQkJOTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJ
CTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2
ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdC
NEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2
QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1
NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhD
IC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkw
RjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2
QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oICovLAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVj
dC5jcHAgKi8sCiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0
LmggKi8sCiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJ
bnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJB
cnJheS5oICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5o
ICovLAogCQkJCTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJ
CTY1RUE0QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1
RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3
IEBACiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2Jq
ZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAor
CQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNU
eXBlSW5mby5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFy
cmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXku
aCAqLywKKwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8s
CisJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAq
LywKIAkJCQlCQzIyQTM5QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAg
Ki8sCiAJCQkJMTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAq
LywKIAkJCQkxNDQyNTY1RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApA
QCAtMzA1MSw2ICszMTg2LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVq
ZWN0LmggKi8sCiAJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8sCiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5oICovLAorCQkJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgKi8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZB
IC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8q
IFNtYWxsU3RyaW5ncy5oICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5
NkE2MENEMjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUx
QzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFF
NTQ5IC8qIFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlw
ZWRBcnJheUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAz
QTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5VHlwZS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
MTZBcnJheS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRo
RnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJy
YXkuaCAqLywKQEAgLTM1MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBC
MzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2Vt
YmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYx
MTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdC
ODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBC
b29sZWFuT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhF
NDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVF
RDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNTU1LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURC
MiAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFF
NjgyMDBCMkQxQzEgLyogQ2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICov
LApAQCAtMzU2Niw2ICszNzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1v
bklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUz
N0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3
IEBACiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0
aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3Bp
ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZF
MTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAw
Rjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAx
NUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBA
CiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNo
RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMz
NjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RC
MSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcg
QEAKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2
MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZBRTZDNEUxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNjU4LDYgKzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4
QjgwMDlERjc0NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTczQTUzNUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJ
ODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkE1ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBC
OUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNG
RTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMw
MDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVG
OTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4
MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2Fy
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4
Miw3IEBACiAJCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJl
c3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2
NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OEE5NzdGMTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5
NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3
OTQsNyArMzk1Miw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyog
SW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQg
LyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkEx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4
MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNB
Uk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJ
VFN0dWJzTUlQUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJD
MThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjND
NiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3
OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4NTUsNiArNDAxNCw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFu
YWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcg
LyogSlNOYW1lU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzg2Niw2ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFE
IC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdG
MzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2
MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYg
KzQwNDUsNyBAQAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3
Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcg
QEAKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAw
QjM0NDYwIC8qIExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAw
QkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qjcy
M0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMzkyNiw2ICs0MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8q
IE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJB
MUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwx
NyBAQAogCQkJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1
bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRo
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkND
MjAwQjM0NDYwIC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4
RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1
NjBGMDZBMDA4RTkyMjIgLyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVC
RjMwNDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQw
RUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiAr
NDEzOCw3IEBACiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2Nywx
MSBAQAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGly
ZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAy
QzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTQwMjQsNiArNDE5NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZB
IC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAw
QjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDRE
QTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBF
MTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAg
LyogU3RyaW5nUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEs
OCBAQAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQw
ODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3
OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4
NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAy
MUU1NDkgLyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAw
NUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2
MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2Rl
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4
NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0Yz
OUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENE
REY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJE
QTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0Ux
MzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTEx
NUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAv
KiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZB
REI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURG
RjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwx
MyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNO
b3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNE
MTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3
NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NjkwLDYgKzQ4NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYx
MTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNX
cmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NzEyLDYgKzQ4OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYw
MDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5
QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYz
REExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDc2MiwxNyArNDk0NywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90
b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4
ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAw
N0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQw
Q0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDgwNSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYz
IC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcw
QTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUg
Ym9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGlt
aXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7
Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJy
YXlOb25lOworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JD
bGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6
CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJu
IEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBl
SW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBU
eXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJ
VFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVV
aW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJy
YXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9h
dDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9h
dDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0
QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBl
ZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJ
bnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsK
KyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAg
Y2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2Ug
SklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwor
ICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAg
IGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNh
c2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2Fz
ZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAg
ICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rp
b246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYg
KGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0g
ICAgICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVj
SW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY0ludDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAg
ICAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5Owot
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1Vp
bnQxNkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY1VpbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgot
ICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRB
cnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChj
bGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAg
ICByZXR1cm4gU3BlY0ludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJl
dHVybiBTcGVjSW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJu
IFNwZWNVaW50OEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0
dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAg
IHJldHVybiBTcGVjVWludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gU3BlY1VpbnQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJl
dHVybiBTcGVjRmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJl
dHVybiBTcGVjRmxvYXQ2NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8o
KSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJy
YXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9U
eXBlZEFycmF5VHlwZShBcnJheTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xh
bXBlZDsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVV
aW50MTY7CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDMyOworICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDMyOworICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJu
IFR5cGVGbG9hdDY0OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5
OworICAgIH0KK30KKwogdm9pZCBBcnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQodHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCks
IGNvbnZlcnNpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFy
KiBhcnJheUNsYXNzVG9TdHJpbmcoQXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0
aW9uVG9TdHJpbmcoQXJyYXk6OlNwZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVy
c2lvblRvU3RyaW5nKEFycmF5OjpDb252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBl
ZEFycmF5VHlwZShBcnJheTo6VHlwZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAg
ICAgQXJyYXlNb2RlKCkKQEAgLTM4MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdHlwZSgpID09IEFycmF5OjpTdHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVk
QXJyYXlUeXBlKHR5cGUoKSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBcnJheU1vZGUmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9
PSBvdGhlci50eXBlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY2NywzNyArMjY2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4
Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1
aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
Zihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJ
bnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1w
ZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBi
cmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU4MSwzNyArMjU4MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShu
b2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjg3Miw0NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwg
Q2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAg
ICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOwor
ICAgICAgICB9IH0KIAogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4MywzMiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2ls
ZW50RmlsbChjb25zdCBTaQogICAgIH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiBTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5
TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpOwotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0
b3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENv
bXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2Rl
KEdQUlJlZyB0ZW1wR1BSLCBBcnJheU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUp
CiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAg
IAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgp
LCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jl
c3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6Omlu
Zm8oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5m
bzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JU
eXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAg
IAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBj
b21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAg
ICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNl
IDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAg
IGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJh
eSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2
U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpA
QCAtMjYzOSwxMiArMjYwNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVs
ZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVk
VHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2ln
bmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAg
ICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1
c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91Ymxl
UmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVk
QXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSog
bm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwor
ICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogICAgIApAQCAtMjY3Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRv
dWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xh
bXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAg
ICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAg
ICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDgg
KzI2NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVP
cC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAg
ICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50
ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xh
bXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsK
KyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9h
dFNjcmF0Y2godGhpcyk7CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRB
cnJheSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAg
ICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdw
ciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwpAQCAtMjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1
ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsy
NzM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBu
b1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3
NTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRl
c2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUp
KSB7CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
Rm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJl
c3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQ
UlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCAr
Mjc5NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAg
QVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZCht
X2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09
IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsK
KyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAg
IG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5j
b252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQw
MDksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BS
VGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAy
MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRv
cik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFT
U0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAg
ICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4
ICs0MTI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgpAQCAtNDE5MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9s
ZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBp
bGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAg
IHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7
Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6
ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJh
eVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUp
OwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdF
eHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNw
ZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAg
ICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3Io
QXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJ
bmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsK
ICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgor
ICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rl
ZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBI
ZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9y
QVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAg
ICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVm
ZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVm
aW5lIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTQ2VsbDsKKworLy8gQSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBo
YXZlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVy
ZW5jZXMgZnJvbSB0aGUgaGVhcCwgd2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRo
ZSBvYmplY3Qga25vd3MgaXRzIGluY29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNv
CisvLyBoYXZlIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBi
YWNrIGludG8gdGhlIEdDCisvLyBoZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
R0NJbmNvbWluZ1JlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4gewor
cHVibGljOgorICAgIEdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQ
b2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQo
KQorICAgIHsKKyAgICAgICAgaWYgKGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRl
bGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29t
aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigp
KQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCkt
PnNpemUoKTsKKyAgICB9CisgICAgCisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygp
KTsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlu
ZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8v
IEl0J3MgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNp
bmNlIGlmIHRoaXMKKyAgICAvLyByZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQg
dGhpcyBvYmplY3QgdG8gdGhlIEdDJ3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0OjphZGRSZWZlcmVuY2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdS
ZWZlcmVuY2UoSlNDZWxsKik7CisgICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJu
cyB0cnVlIGlmIHdlIHdpc2ggdG8ga2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2Us
IGFuZCBmYWxzZSBpZiB3ZSBkb24ndC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAg
Ly8gYW5kIGlmIGl0IGRvZXMgc28sIHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3Ug
ZG9uJ3Qgd2FudAorICAgIC8vIHRvIHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhh
dCBjYW4gcmV0dXJuIGZhbHNlIHVubGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhl
IEdDJ3MgbGlzdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Cisg
ICAgYm9vbCBmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0
dXJuIDE7IH0KKyAgICAKKyAgICBib29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVy
biAhKG1fZW5jb2RlZFBvaW50ZXIgJiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNB
bnlJbmNvbWluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJv
b2wgaGFzU2luZ2xldG9uKCkgY29uc3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFz
VmVjdG9yT2ZDZWxscygpOyB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU0NlbGwqPihtX2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxWZWN0b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAg
ICB9CisgICAgCisgICAgLy8gU2luZ2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxs
Ki4KKyAgICAvLyBTaW5nbGV0b24gZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBh
IHZlY3RvciBvZiBjZWxscy4KKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRl
ZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVy
ZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNp
bmdsZXRvbkZsYWcoKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAg
ICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhl
YXA6OmhlYXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAg
ICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAg
ICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChj
ZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNl
bGwpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50
ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRl
ckZ1bmN0aW9uKQoreworICAgIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJl
bmNlcy5cbiIpOworICAgIAorICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBB
U1NFUlQoIXRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3Vu
dCgpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFz
IG5vIGluY29taW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAg
IAorICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVkKCkpOworICAgICAgICAKKyAgICBpZiAoaGFz
U2luZ2xldG9uKCkpIHsKKyAgICAgICAgaWYgKGZpbHRlckZ1bmN0aW9uKHNpbmdsZXRvbigpKSkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
U2luZ2xldG9uIHBhc3NlZC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgIFJlbW92aW5nIHNpbmdsZXRvbi5cbiIpOworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0g
MDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgdGhpcy0+c2V0
SXNEZWZlcnJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAg
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgIEhhcyAiLCB2ZWN0b3JPZkNl
bGxzKCktPnNpemUoKSwgIiBlbnRyaWVzLlxuIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5j
dGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsK
KyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgICAgICAK
KyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0gMikgeworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIFN0aWxsIGhhcyAiLCB2ZWN0b3JPZkNlbGxz
KCktPnNpemUoKSwgIiBlbnRyaWVzLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIFJlbW92aW5nLlxuIik7Cisg
ICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIg
PSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkpOworICAgICAgICB0aGlzLT5z
ZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICBTaHJpbmtpbmcgdG8gc2luZ2xl
dG9uLlxuIik7CisgICAgSlNDZWxsKiBzaW5nbGV0b24gPSB2ZWN0b3JPZkNlbGxzKCktPmF0KDAp
OworICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KHNpbmdsZXRvbikgfCBzaW5nbGV0b25GbGFnKCk7CisgICAg
QVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVm
Q291bnRlZFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKyNkZWZpbmUgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRf
aAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIFQgPSBzb21lIHN1YnR5cGUgb2YgR0NJbmNvbWluZ1JlZkNvdW50ZWQsIG11c3Qgc3Vw
cG9ydCBhIGdjU2l6ZUVzdGltYXRlSW5CeXRlcygpCisvLyBtZXRob2QuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQgeworcHVibGljOgorICAgIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0KCk7CisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCk7
CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBuYXRpdmUgb2JqZWN0IGlzIG5ldyB0
byB0aGlzIHNldC4KKyAgICBib29sIGFkZFJlZmVyZW5jZShKU0NlbGwqLCBUKik7CisgICAgCisg
ICAgdm9pZCBzd2VlcCgpOworICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlczsgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlQWxsKEpT
Q2VsbCopOworICAgIHN0YXRpYyBib29sIHJlbW92ZURlYWQoSlNDZWxsKik7CisgICAgCisgICAg
VmVjdG9yPFQqPiBtX3ZlY3RvcjsKKyAgICBzaXplX3QgbV9ieXRlczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5n
UmVmQ291bnRlZFNldElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKyNkZWZpbmUg
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6R0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQoKQorICAgIDogbV9ieXRlcygwKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46On5HQ0luY29taW5nUmVmQ291bnRl
ZFNldCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fdmVjdG9yLnNpemUoKTsgaS0tOykKKyAg
ICAgICAgbV92ZWN0b3JbaV0tPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVBbGwpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxU
Pjo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgVCogb2JqZWN0KQoreworICAgIGlmICghb2Jq
ZWN0LT5hZGRJbmNvbWluZ1JlZmVyZW5jZShjZWxsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1Np
emVFc3RpbWF0ZUluQnl0ZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3ZvaWQgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OnN3ZWVwKCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFQqIG9iamVjdCA9IG1fdmVjdG9yW2ldOworICAgICAgICBzaXplX3Qgc2l6ZSA9IG9iamVjdC0+
Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0ZXJJbmNv
bWluZ1JlZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbV9ieXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0b3IubGFz
dCgpOworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlQWxs
KEpTQ2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0NlbGwqIGNl
bGwpCit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJE
RkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2luY2x1ZGUg
IkdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBSb290Vmlz
aXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50
YWxTd2VlcGVyLmgiCkBAIC0zNTgsNiArMzU5LDE0IEBAIHZvaWQgSGVhcDo6amV0dGlzb25ERkdD
b2RlQmxvY2soUGFzc1JlZlAKICAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2Nr
KTsKIH0KIAordm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZl
ciogYnVmZmVyKQoreworICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwg
YnVmZmVyKSkgeworICAgICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CisgICAgICAg
IGRpZEFsbG9jYXRlKGJ1ZmZlci0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkpOworICAgIH0KK30K
Kwogdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBS
b290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJv
dGVjdGVkVmFsdWVzLmVuZCgpOwpAQCAtNjIxLDE0ICs2MzAsMTkgQEAgc2l6ZV90IEhlYXA6Om9i
amVjdENvdW50KCkKICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5vYmplY3RDb3VudCgpOwogfQog
CitzaXplX3QgSGVhcDo6ZXh0cmFTaXplKCkKK3sKKyAgICByZXR1cm4gbV9leHRyYU1lbW9yeVVz
YWdlICsgbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpOworfQorCiBzaXplX3QgSGVhcDo6c2l6ZSgpCiB7
Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgp
ICsgbV9leHRyYU1lbW9yeVVzYWdlOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNpemUoKSAr
IG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3QgSGVhcDo6
Y2FwYWNpdHkoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkgKyBtX3N0
b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5
KCkgKyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVf
dCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC03MDcsNiArNzIxLDggQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIGRhdGFMb2dGKCJK
U0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2VuZGlmCiAgICAgCisgICAgZGF0YUxv
ZygiQ29sbGVjdGluZyFcbiIpOworICAgIAogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCghbV9k
ZWZlcnJhbERlcHRoKTsKQEAgLTc0NSw2ICs3NjEsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3
ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktF
RCgpOworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7
CisgICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAg
ICBtX2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6
ZSgpKTsKQEAgLTkyNCwxMiArOTQ1LDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAg
ICAgCiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVt
ZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAK
ICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxv
Y2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7
IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUg
aGVhcAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksMTEgKzE4MiwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAg
ICAgIAogICAgICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkg
eyByZXR1cm4gbV9qaXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRk
UmVmZXJlbmNlKEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxv
Y2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDOworICAgICAgICBmcmllbmQgY2xhc3Mg
RGVmZXJHQ0ZvckFXaGlsZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91
dGluZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZVNldDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJSb3V0aW5lOwpAQCAtMjMwLDYgKzIzNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAg
ICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRlY3JlbWVu
dERlZmVycmFsRGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZk5lZWRlZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CkBAIC0y
NDUsNiArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yIG1f
YmxvY2tBbGxvY2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAg
ICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5nUmVmQ291
bnRlZFNldDxBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVfdCBtX2V4
dHJhTWVtb3J5VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2
aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1
Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90
eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5h
cnJheVByb3RvdHlwZVRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJv
b2xlYW5Qcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZy
YW1lLT52bSgpLmJvb2xlYW5Qcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPnZtKCkuZGF0YVZpZXdUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBkYXRlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5kYXRlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0
ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5kYXRlQ29uc3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBjYWxsRnJhbWUtPnZtKCkuZXJyb3JQcm90b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
c2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRT
aXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAg
SnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8g
UHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGlu
ZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxv
YWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFy
cmF5Um91bmRpbmcpOwotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5h
bCwgS25vd25Ob3RGaW5hbCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NDksMzUgKzE1NDksMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlW
YWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5
cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAg
ICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwg
U2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRU
eXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJh
eSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMy
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9h
dFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgdHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywx
MCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBl
KSk7CisgICAgCiAgICAgLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMg
dG8gdXNlIHRoZSBjbGFzc0luZm8uIFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNs
b2JiZXJpbmcgdGhlIHJlZ2lzdGVyIHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2Us
IGFuZCBwcm9wZXJ0eS4KIApAQCAtMTY4OSwxOSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAog
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhP
ZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAg
ICAgY2FzZSAxOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQor
ICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNP
bmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAg
ICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWdu
ZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3Bl
cnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBsb2FkMTYoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxv
YWQpOwpAQCAtMTcxNCw3ICsxNjcxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5R2V0QgogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRT
aXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAo
dHlwZSA9PSBUeXBlVWludDMyKSB7CiAgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAg
ICAgIAogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1Qw
KTsKQEAgLTE3NDAsOCArMTY5NywxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVk
QXJyYXlHZXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3Qg
ZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDE7CkBAIC0xNzU4LDExICsxNzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZz
ZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDQ6CiAgICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVz
Rm91ciksIGZwUmVnVDApOwogICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBm
cFJlZ1QwKTsKQEAgLTE3ODksOCArMTc0OCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheUdlCiAgICAgcmV0dXJuIHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7
CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
MTgwOCw4ICsxNzY5LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0
QgogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9j
bGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2Ny
YXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBX
ZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2Vw
dCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xv
YmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9m
ZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYg
KHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVk
KHR5cGUpKTsKICAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7
CiAgICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyAr
MTc5Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAg
ICAgaW5Cb3VuZHMubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAg
ICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nh
c2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNp
emUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAg
IHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0xODcyLDggKzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
bGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAg
LTE4OTgsOSArMTg2MSw5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHUKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGlu
IGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRo
ZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRj
aCk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0
KGZwUmVnVDAsIGZwUmVnVDApOwogICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRl
eChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJl
c3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCiti
b29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7
CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0
MSw5IEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0g
dHJ1ZTsKLSAgICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0g
aS0+bV9uZXh0VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAg
ICAgICAgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNO
ZXV0ZXJhYmxlID0gIW1fcGluQ291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxl
KQorICAgIGlmIChpc05ldXRlcmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVz
dWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAg
LTU2LDM2ICs1MSwxMyBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNv
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RW
aWV3KSB7Ci0gICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3Owot
ICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0
ZXJhYmxlIHx8IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+
bmV1dGVyKCk7Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZv
ciAoc2l6ZV90IGkgPSBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAg
ICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGluY29taW5nUmVmZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAg
ICAgICAgIHZpZXctPm5ldXRlcigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmll
dy0+bV9idWZmZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXct
Pm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAg
IG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7
Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQotewotICAgIEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+
bV9uZXh0VmlldykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXct
Pm1fcHJldlZpZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1f
cHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0
VmlldyA9PSB2aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0g
ICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQog
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lm
bmRlZiBBcnJheUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJXZWFrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNz
IEFycmF5QnVmZmVyVmlldzsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVm
ZmVyQ29udGVudHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVu
dHMpOwpAQCAtNDUsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFy
cmF5QnVmZmVyQ29udGVudHMoKTsKLQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBt
X2RhdGE7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0
ZXM7IH0KIApAQCAtODYsMTIgKzg4LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXpl
SW5CeXRlczsKIH07CiAKLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJy
YXlCdWZmZXI+IHsKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwog
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAK
ICAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOwpAQCAtOTksMTQgKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEo
KTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVF
c3RpbWF0ZUluQnl0ZXMoKSBjb25zdDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGlu
ZSB2b2lkIHBpbigpOworICAgIGlubGluZSB2b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZp
ZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmll
dyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJD
b250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdz
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CiAgICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRh
OyB9CiAKICAgICB+QXJyYXlCdWZmZXIoKSB7IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0
ZToKICAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAg
IHN0YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQp
OwogCisgICAgdW5zaWduZWQgbV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1f
Y29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgor
ICAgIFdlYWs8SlNBcnJheUJ1ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVy
OjpjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2Nywx
MiBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMo
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSksIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUo
Y29udGVudHMpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplKQogewogICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3
IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlC
dWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDog
bV9maXJzdFZpZXcoMCkKKyAgICA6IG1fcGluQ291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFu
c2ZlcihtX2NvbnRlbnRzKTsKIH0KQEAgLTE5NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlC
dWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUlu
Qnl0ZXM7CiB9CiAKK3NpemVfdCBBcnJheUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZW9mKEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNp
emVfdD4oYnl0ZUxlbmd0aCgpKTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xp
Y2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsy
MzcsMjMgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJl
dHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJh
eUJ1ZmZlcjo6cGluKCkKK3sKKyAgICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZm
ZXI6OnVucGluKCkKK3sKKyAgICBtX3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJD
b250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9s
aWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93
IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5v
dD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50
cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5
IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3Ry
aWN0aXZlIGNoZWNrIGhlcmU/CisgICAgLy8gRG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBv
ZiB0aGUgdG90YWwgc2l6ZS4KICAgICBpZiAobnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWdu
ZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlm
ICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAg
aWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAg
ICAgfHwgdG90YWxTaXplID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
dXNpbmcgSlNDOjpBcnJheUJ1ZmZlcjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsK
IAogI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5
QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQot
ICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAs
IG1fcHJldlZpZXcoMCkKLSAgICAsIG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJy
YXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQor
ICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVy
KQogewogICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4o
bV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIp
IAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3
Ojp+QXJyYXlCdWZmZXJWaWV3KCkKIHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVm
ZmVyLT5yZW1vdmVWaWV3KHRoaXMpOworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAg
IG1fYnVmZmVyLT51bnBpbigpOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkK
K3ZvaWQgQXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBt
X2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lz
TmV1dGVyYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0g
ZmxhZzsKKyAgICAKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGZsYWcpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAg
ICAgbV9idWZmZXItPnBpbigpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZp
c2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZl
clZpZXdfaAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJy
YXlUeXBlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CitjbGFzcyBFeGVjU3RhdGU7CisKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZD
b3VudGVkPEFycmF5QnVmZmVyVmlldz4gewogcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewot
ICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhD
bGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAg
IFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0g
ICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJy
YXlUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJl
ZCgpOworICAgIH0KKyAgICAKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFk
ZHJlc3MoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNl
dDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7
CiAKLSAgICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0g
ZmxhZzsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZs
YWcpOwogICAgIGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFi
bGU7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXco
KTsKIAotcHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5s
aW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wg
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50
IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVu
c2lnbmVkKiBsZW5ndGgpOwotCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4g
c3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbnVtRWxlbWVudHMpCisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAg
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9m
ZnNldCwKKyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0
ZUxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4g
MSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBp
ZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IC0gYnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0Vs
ZW1lbnRzID0gKGJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAg
aWYgKG51bUVsZW1lbnRzID4gcmVtYWluaW5nRWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
KworICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wg
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisg
ICAgICAgIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1
bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNl
dCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAv
LyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5n
IGJ1ZmZlcidzIHZpZXcuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZv
aWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQg
Km51bUVsZW1lbnRzKQorICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMo
CisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWdu
ZWQgYXJyYXlCeXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1
bnNpZ25lZCAqbnVtRWxlbWVudHMpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQg
PSAoVUlOVF9NQVggLSBhcnJheUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAo
Km9mZnNldCA+IG1heE9mZnNldCkgewpAQCAtMTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVt
ZW50cyk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0
ZXIoKTsKLQogICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mg
c3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsK
IApAQCAtMTMwLDggKzE0MSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAg
QXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0
VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmll
dyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBB
cnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUltcGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFy
dCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25l
ZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0
aCgKKyAgICBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCArPSBhcnJheVNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmll
dzsKIHN0cnVjdCBIYXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5
NywxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JGdW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlw
ZWRlZiB2b2lkICgqU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsK
KyAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAg
CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5
SW1wbCkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBl
ZEFycmF5SW1wbDsKIH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikg
XApAQCAtMTM5LDYgKzE0Niw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFz
c05hbWU6OnB1dERpcmVjdFZpcnR1YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3du
UHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
LCBcCisgICAgICAgICZDbGFzc05hbWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0VHlwZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05h
bWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1NDAzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhl
IGxpc3QuCiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1F
KG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXkpIFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAor
ICAgIG1hY3JvKEJZVEVTX1BFUl9FTEVNRU5UKSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAg
IG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAg
IG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkg
XAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNy
byhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29k
ZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAg
ICAgbWFjcm8ocHJvcGVydHlJc0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwK
ICAgICBtYWNybyhzZXQpIFwKKyAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkg
XAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3Jv
KHN1YmFycmF5KSBcCiAgICAgbWFjcm8odGVzdCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwp
IFwKICAgICBtYWNybyh0b0ZpeGVkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUg
IkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5
QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxl
bmd0aCkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhi
dWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcq
IERhdGFWaWV3Ojp3cmFwKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBn
bG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCks
IGJ5dGVPZmZzZXQoKSwKKyAgICAgICAgYnl0ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAor
I2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNs
dWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7
Citwcm90ZWN0ZWQ6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAo
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIFQgZ2V0KHVuc2lnbmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wq
IHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBp
ZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
KnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAqc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkg
PD0gYnl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFu
KAorICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihtX2Jhc2VBZGRyZXNzKSArIG9mZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2ln
bmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDAp
CisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsg
c2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkp
OworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
YmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWdu
ZWQgbV9ieXRlTGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBE
YXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0
MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxv
YXQzMkFycmF5X2gKICNkZWZpbmUgRmxvYXQzMkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJy
YXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewot
cHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMy
QXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJy
YXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRp
cmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0g
ICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxv
YXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1Q
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMy
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJy
YXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNy
ZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJh
eTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpT
Qzo6RmxvYXQzMkFycmF5OwogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1
NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExLDk4ICsxMCwyNSBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZp
bmUgRmxvYXQ2NEFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRB
cnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29u
c3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25s
eSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxl
ZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNj
cmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEZsb2F0NjRBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBU
eXBlZEFycmF5QmFzZTxkb3VibGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0
PGRvdWJsZT4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxG
bG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDY0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIAotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNz
LgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1Jl
ZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6
Y3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3Jl
YXRlPEZsb2F0NjRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJh
eTo6RmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91Ymxl
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0
QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBK
U0M6OkZsb2F0NjRBcnJheTsKIAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6Cisg
ICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25z
dCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSo+KGJhc2VBZGRyZXNzKCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGgg
KiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHpl
cm9SYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBy
ZXR1cm4gemVyb1JhbmdlSW1wbChvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSksIGxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgemVyb0ZpbGwoKSB7IHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAK
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVy
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhd
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9y
Ojp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0
YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8
PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAg
ICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRB
cnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVm
ZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlw
ZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAs
IGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVz
dWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwg
bGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4K
K0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAg
ICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4g
PgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAg
ICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZv
ZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6
VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0
dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNBcnJheUJ1ZmZlclZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6d3JhcCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEFkYXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAg
ICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0
b3I6OnR5cGVWYWx1ZSksIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDAzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFy
cmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMy
X3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAg
IHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1Ymxp
Y0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIo
KSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZl
cihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUudHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0K
KyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxk
IGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkg
b24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCku
CiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhl
IGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdl
IGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAg
ICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsK
KyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAs
MTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2
LDkgQEAKICNpZm5kZWYgSW50OEFycmF5X2gKICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1
ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhl
IGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6
c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gVHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
bGluZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUg
dG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNy
ZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJy
YXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJy
YXk+IEludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50
OEFycmF5PihsZW5ndGgpOwotfQotCi1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJy
YXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJ
KHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKQEAgLTI2LDc3ICsyNiw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAog
I2RlZmluZSBJbnQxNkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQx
NkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGlj
OgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3Jl
YXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJl
IGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8g
SmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50
ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBUeXBlSW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1Jl
ZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNv
bnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJy
YXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBJbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRl
T2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFy
dCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJ
bXBsPEludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRp
ZiAvLyBJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJ
bnQzMkFycmF5X2gKICNkZWZpbmUgSW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBl
ZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQ+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShp
bnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW5saW5lIEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25z
dHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJy
YXlCYXNlPGludD47Ci19OwotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46
OmNyZWF0ZTxJbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+
IEludDMyQXJyYXk6OmNyZWF0ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJh
eSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0
ZTxJbnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQ8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFy
cmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0
YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJh
eUltcGw8SW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2Vu
ZGlmIC8vIEludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlC
dWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlC
dWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMs
IG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAg
ICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBw
YXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRC
dWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlC
dWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051
bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5p
bXBsKCktPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChl
eGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQt
b25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhy
b3cpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3Vs
ZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9w
ZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZm
ZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5l
IEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNB
cnJheUJ1ZmZlciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4pOworICAgIAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
OyB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5
QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIo
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWlj
Q2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBw
cm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisK
K0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVh
dGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3Rv
dHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAg
ICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgeworICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBB
bHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBj
b3JyZWN0IHRvIHNheQorICAgICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0
IGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdp
dGggYSB6ZXJvIGxlbmd0aC4KKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwg
MSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisg
ICAgICAgIGV4ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKAorICAgIEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJh
eUJ1ZmZlcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNh
bGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5
QnVmZmVyOworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNz
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgor
ICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7Cisg
ICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBi
dWZmZXIuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2Ug
cmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJl
Z2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5k
KTsKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5
QnVmZmVyU3RydWN0dXJlKCk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVy
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJh
eUJ1ZmZlclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisK
K0pTQXJyYXlCdWZmZXJQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hD
cmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisK
K1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJv
dG90eXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7
CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlC
dWZmZXJWaWV3OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitK
U0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4
dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVp
bnQzMl90IGVsZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDog
bV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5
KDApCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0
dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90
IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9
IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVp
bnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykK
KyAgICAgICAgICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBp
ZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAg
ICAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92
ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgh
dHJ5RmFzdE1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7Cisg
ICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVU
eXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAg
LCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBi
eXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVs
VHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBp
bmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9i
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdI
ZWFkZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0m
IHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4
dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRl
eHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9t
b2RlKGNvbnRleHQubW9kZSgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZp
bmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3Rl
ZnVsVHlwZWRBcnJheToKKyAgICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVy
Zmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNB
cnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52
bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgewor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ1ZmZlcikgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAg
ICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAg
ICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZl
cigpKSwKKyAgICAgICAgICAgIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBy
ZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8g
cmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVy
dHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlw
ZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAg
ICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVt
LCBhdCBsZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojpm
aW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBBU1NFUlQodGhpc09i
amVjdC0+bV9tb2RlID09IE92ZXJzaXplVHlwZWRBcnJheSB8fCB0aGlzT2JqZWN0LT5tX21vZGUg
PT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IE92
ZXJzaXplVHlwZWRBcnJheSkKKyAgICAgICAgZmFzdEZyZWUodGhpc09iamVjdC0+bV92ZWN0b3Ip
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJWaWV3X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBUaGlzIGNsYXNzIHNlcnZlcyB0d28gcHVycG9zZXM6CisvLworLy8gMSkgSXQgcHJvdmlk
ZXMgdGhvc2UgcGFydHMgb2YgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgdGhhdCBkb24ndCBkZXBl
bmQKKy8vICAgIG9uIHRlbXBsYXRlIHBhcmFtZXRlcnMuCisvLworLy8gMikgSXQgcmVwcmVzZW50
cyB0aGUgRE9NL1dlYkNvcmUtdmlzaWJsZSAiSlNBcnJheUJ1ZmZlclZpZXciIHR5cGUsIHdoaWNo
CisvLyAgICBDKysgY29kZSB1c2VzIHdoZW4gaXQgd2FudHMgdG8gcGFzcyBhcm91bmQgYSB2aWV3
IG9mIGFuIGFycmF5IGJ1ZmZlcgorLy8gICAgd2l0aG91dCBjb25jZXJuIGZvciB0aGUgYWN0dWFs
IHR5cGUgb2YgdGhlIHZpZXcuCisvLworLy8gVGhlc2UgdHdvIHJvbGVzIGFyZSBxdWl0ZSBkaWZm
ZXJlbnQuICgxKSBpcyBqdXN0IGEgbWF0dGVyIG9mIG9wdGltaXppbmcKKy8vIGNvbXBpbGUgYW5k
IGxpbmsgdGltZXMgYnkgaGF2aW5nIGFzIG11Y2ggY29kZSBhbmQgZGF0YSBhcyBwb3NzaWJsZSBu
b3QKKy8vIGJlIHN1YmplY3QgdG8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uICgyKSBpcyAqYWxt
b3N0KiBhIG1hdHRlciBvZgorLy8gc2VtYW50aWNzOyBpbmRlZWQgYXQgdGhlIHZlcnkgbGVhc3Qg
aXQgaXMgYSBtYXR0ZXIgb2Ygb2JleWluZyBhIGNvbnRyYWN0CisvLyB0aGF0IHdlIGhhdmUgd2l0
aCBXZWJDb3JlIHJpZ2h0IG5vdy4KKy8vCisvLyBPbmUgY29udmVuaWVudCB0aGluZyB0aGF0IHNh
dmVzIHVzIGZyb20gdG9vIG11Y2ggY3JhenkgaXMgdGhhdAorLy8gQXJyYXlCdWZmZXJWaWV3IGlz
IG5vdCBpbnN0YW50aWFibGUuCisKKy8vIFR5cGVkIGFycmF5IHZpZXdzIGhhdmUgZGlmZmVyZW50
IG1vZGVzIGRlcGVuZGluZyBvbiBob3cgYmlnIHRoZXkgYXJlIGFuZAorLy8gd2hldGhlciB0aGUg
dXNlciBoYXMgZG9uZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGEgc2VwYXJhdGUgYmFja2luZwor
Ly8gYnVmZmVyIG9yIHRoZSBET00tc3BlY2lmaWVkIG5ldXRlcmluZyBjYXBhYmlsaXRpZXMuCitl
bnVtIFR5cGVkQXJyYXlNb2RlIHsKKyAgICAvLyBTbWFsbCBhbmQgZmFzdCB0eXBlZCBhcnJheS4g
QiBpcyB1bnVzZWQsIFYgcG9pbnRzIHRvIGEgdmVjdG9yCisgICAgLy8gYWxsb2NhdGVkIGluIGNv
cGllZCBzcGFjZSwgYW5kIE0gPSBGYXN0VHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzCisgICAg
Ly8gZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgdmlldydzIGxpdmVuZXNzLgorICAgIEZhc3RU
eXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgbGFyZ2UgdHlwZWQgYXJyYXkgdGhhdCBzdGlsbCBh
dHRlbXB0cyBub3QgdG8gd2FzdGUgdG9vIG11Y2gKKyAgICAvLyBtZW1vcnkuIEIgaXMgaW5pdGlh
bGl6ZWQgdG8gcG9pbnQgdG8gYSBzbG90IHRoYXQgY291bGQgaG9sZCBhCisgICAgLy8gYnVmZmVy
IHBvaW50ZXIsIFYgcG9pbnRzIHRvIGEgdmVjdG9yIGFsbG9jYXRlZCB1c2luZyBmYXN0Q2FsbG9j
KCksCisgICAgLy8gYW5kIE0gPSBPdmVyc2l6ZVR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcyBk
ZXRlcm1pbmVkIGVudGlyZWx5IGJ5CisgICAgLy8gdGhlIHZpZXcncyBsaXZlbmVzcywgYW5kIHRo
ZSB2aWV3IHdpbGwgYWRkIGEgZmluYWxpemVyIHRvIGRlbGV0ZSBWLgorICAgIE92ZXJzaXplVHlw
ZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIHR5cGVkIGFycmF5IHRoYXQgd2FzIHVzZWQgaW4gc29t
ZSBjcmF6eSB3YXkuIEIncyBJbmRleGluZ0hlYWRlcgorICAgIC8vIGlzIGhpamFja2VkIHRvIGNv
bnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBhcnJheSBidWZmZXIuIFRoZQorICAgIC8v
IG5hdGl2ZSB0eXBlZCBhcnJheSB2aWV3IHBvaW50cyBiYWNrIHRvIHRoZSBKUyB2aWV3LiBWIHBv
aW50cyB0byBhCisgICAgLy8gdmVjdG9yIGFsbG9jYXRlZCB1c2luZyB3aG8ta25vd3Mtd2hhdCwg
YW5kIE0gPSBXYXN0ZWZ1bFR5cGVkQXJyYXkuCisgICAgLy8gVGhlIHZpZXcgZG9lcyBub3Qgb3du
IHRoZSB2ZWN0b3IuCisgICAgV2FzdGVmdWxUeXBlZEFycmF5LAorfTsKKworLy8gV2hlbiBXZWJD
b3JlIHVzZXMgYSBKU0FycmF5QnVmZmVyVmlldywgaXQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIGdl
dCB0aGUgbmF0aXZlCisvLyBBcnJheUJ1ZmZlciBhbmQgbGl0dGxlIGVsc2UuIFRoaXMgcmVxdWly
ZXMgc2xvd2luZyBkb3duIGFuZCB3YXN0aW5nIG1lbW9yeSwKKy8vIGFuZCB0aGVuIGFjY2Vzc2lu
ZyB0aGluZ3MgdmlhIHRoZSBCdXR0ZXJmbHkuIFdoZW4gSlMgdXNlcyBhIEpTQXJyYXlCdWZmZXJW
aWV3CisvLyBpdCBpcyBhbHdheXMgdmlhIHRoZSB1c3VhbCBtZXRob2RzIGluIHRoZSBNZXRob2RU
YWJsZSwgc28gdGhpcyBjbGFzcydzCisvLyBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSBoYXMgbm8g
bmVlZCB0byBldmVuIGV4aXN0IC0gd2UgY291bGQgYXQgYW55IHRpbWUgc2luaworLy8gY29kZSBp
bnRvIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlmIGl0IHdhcyBjb252ZW5pZW50LgorCitjbGFz
cyBKU0FycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgZmFzdFNpemVMaW1pdCA9IDEwMDA7CisgICAgCisgICAgc3RhdGljIHNpemVf
dCBzaXplT2YodWludDMyX3QgbGVuZ3RoLCB1aW50MzJfdCBlbGVtZW50U2l6ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAobGVuZ3RoICogZWxlbWVudFNpemUgKyBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpIC0gMSkKKyAgICAgICAgICAgICYgfihzaXplb2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgY2xhc3MgQ29uc3RydWN0aW9uQ29udGV4dCB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRleHQpOworICAgICAgICAK
KyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gSW5pdGlhbGl6YXRpb25Nb2RlIHsgWmVyb0ZpbGws
IERvbnRJbml0aWFsaXplIH07CisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBD
b25zdHJ1Y3Rpb25Db250ZXh0KFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QgbGVuZ3RoLCB1aW50
MzJfdCBlbGVtZW50U2l6ZSwgSW5pdGlhbGl6YXRpb25Nb2RlID0gWmVyb0ZpbGwpOworICAgICAg
ICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc3RydWN0aW9uQ29udGV4dCgKKyAgICAg
ICAgICAgIFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sCisgICAgICAg
ICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9zdHJ1Y3R1cmU7IH0KKyAg
ICAgICAgCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJ1Y3R1cmU7IH0KKyAgICAgICAgdm9pZCogdmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3I7IH0KKyAgICAgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7
IH0KKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsg
fQorICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSgpIGNvbnN0IHsgcmV0dXJuIG1fYnV0dGVy
Zmx5OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9zdHJ1
Y3R1cmU7CisgICAgICAgIHZvaWQqIG1fdmVjdG9yOworICAgICAgICB1aW50MzJfdCBtX2xlbmd0
aDsKKyAgICAgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworICAgICAgICBCdXR0ZXJmbHkqIG1f
YnV0dGVyZmx5OworICAgIH07CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNBcnJheUJ1
ZmZlclZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworICAgIAorICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAg
ICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCitwdWJsaWM6CisgICAgLy8gQWxs
b2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIuIEFsc28gbW92ZXMgdGhlIGRhdGEgaW50
byB0aGUgQyBoZWFwCisgICAgLy8gaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgc2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgCisgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorICAgIEFycmF5QnVmZmVyKiBidWZmZXIoKTsKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gaW1wbCgpOworICAgIHZvaWQgbmV1dGVyKCk7
CisgICAgCisgICAgdm9pZCogdmVjdG9yKCkgeyByZXR1cm4gbV92ZWN0b3I7IH0KKyAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlZlY3RvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Fy
cmF5QnVmZmVyVmlldywgbV92ZWN0b3IpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zkxlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9s
ZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1vZGUoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1fbW9kZSk7IH0KKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZShKU0NlbGwqKTsKKworcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIHZvaWQqIG1fdmVjdG9yOworICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgIFR5
cGVkQXJyYXlNb2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gSlNBcnJheUJ1ZmZlclZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdJbmxp
bmVzX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFy
cmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlw
ZWRBcnJheSkKKyAgICAgICAgbWV0aG9kVGFibGUoKS0+c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSh0
aGlzKTsKK30KKworaW5saW5lIEFycmF5QnVmZmVyKiBKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVy
KCkKK3sKKyAgICBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICByZXR1
cm4gYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCk7Cit9CisKK2lu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNBcnJheUJ1ZmZlclZpZXc6OmltcGwo
KQoreworICAgIHJldHVybiBtZXRob2RUYWJsZSgpLT5nZXRUeXBlZEFycmF5SW1wbCh0aGlzKTsK
K30KKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpCit7CisgICAgQVNT
RVJUKG1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIG1fbGVuZ3RoID0gMDsKKyAg
ICBtX3ZlY3RvciA9IDA7Cit9CisKK2lubGluZSB1bnNpZ25lZCBKU0FycmF5QnVmZmVyVmlldzo6
Ynl0ZU9mZnNldCgpCit7CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5cGVkQXJyYXkpIHsK
KyAgICAgICAgQVNTRVJUKG1fbW9kZSA9PSBGYXN0VHlwZWRBcnJheSB8fCBtX21vZGUgPT0gT3Zl
cnNpemVUeXBlZEFycmF5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHB0
cmRpZmZfdCBkZWx0YSA9CisgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX3ZlY3Rvcikg
LSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEoKSk7CisgICAgCisgICAgdW5z
aWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQpID09IGRlbHRhKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJW
aWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKQEAgLTIyMyw0ICsyMjQsMTUgQEAgYm9vbCBKU0NlbGw6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKUwogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBKU0Nl
bGw6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiBKU0NlbGw6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUg
IlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKICNp
bmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgQ29weVZpc2l0b3I7CiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBKU0FycmF5
QnVmZmVyVmlldzsKIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwogY2xhc3MgSlNHbG9iYWxP
YmplY3Q7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC0xNDksNyArMTUwLDcgQEAg
cHVibGljOgogICAgIFN0cnVjdHVyZSogdW52YWxpZGF0ZWRTdHJ1Y3R1cmUoKSB7IHJldHVybiBt
X3N0cnVjdHVyZS51bnZhbGlkYXRlZEdldCgpOyB9CiAjZW5kaWYKICAgICAgICAgCi0gICAgc3Rh
dGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5cGVkQXJy
YXlOb25lOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFn
ZVR5cGUgPSBOb3RUeXBlZEFycmF5OwogcHJvdGVjdGVkOgogCiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwpAQCAtMTY3LDYgKzE2OCw4IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBzbG93
RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1w
bChKU0FycmF5QnVmZmVyVmlldyopOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJW
aWV3LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U0RhdGFWaWV3OjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3IiwgJkJhc2U6OnNfaW5mbywgMCwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RhdGFWaWV3KX07CisKK0pTRGF0YVZpZXc6OkpTRGF0
YVZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2
bSwgY29udGV4dCkKK3sKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IHBhc3NlZEJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVm
ZmVyOworICAgIGlmICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx1aW50OF90Pihi
dWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKSB7CisgICAgICAgIHRocm93Vk1FcnJvcigK
KyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFu
ZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBj
b250ZXh0KHZtLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7Cisg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTRGF0YVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRGF0YVZpZXc+KHZtLmhlYXApKSBKU0RhdGFWaWV3
KHZtLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxp
emVkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFW
aWV3OjpjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSlNEYXRh
Vmlldzo6c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQsIHVuc2lnbmVkKQorewor
ICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
UGFzc1JlZlB0cjxEYXRhVmlldz4gSlNEYXRhVmlldzo6dHlwZWRJbXBsKCkKK3sKKyAgICByZXR1
cm4gRGF0YVZpZXc6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5ndGgoKSk7Cit9
CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNE
YXRhVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPm1fbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlz
T2JqZWN0LT5tX2xlbmd0aCksIERvbnRFbnVtIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit2
b2lkIEpTRGF0YVZpZXc6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcq
KQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworfQorCitQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gSlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZl
clZpZXcqIG9iamVjdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RGF0YVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsK
K30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksCisg
ICAgICAgIE5vbkFycmF5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU0RhdGFWaWV3X2gKKyNkZWZpbmUgSlNEYXRhVmlld19oCisKKyNpbmNs
dWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gMTsKKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBKU0RhdGFWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIAorcHVibGljOgor
ICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoCisgICAgICAgIEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LAorICAg
ICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKKyAgICAKKyAgICAvLyBEdW1teSBtZXRob2RzLCB3
aGljaCBkb24ndCBhY3R1YWxseSB3b3JrOyB0aGVzZSBhcmUganVzdCBpbiBwbGFjZSB0bworICAg
IC8vIHBsYWNhdGUgc29tZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3ZSBkbyBlbHNld2hlcmUu
CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgYm9vbCBz
ZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxEYXRhVmlldz4gdHlwZWRJbXBsKCk7CisgICAgCisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IFR5
cGVEYXRhVmlldzsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKworICAgIHN0YXRp
YyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJy
YXlCdWZmZXJWaWV3Kik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cisg
ICAgCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Rh
dGFWaWV3UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTRGF0
YVZpZXcuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisjaW5jbHVkZSA8d3RmL0ZsaXBCeXRlcy5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXdQcm90b3R5
cGU6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXdQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAw
LCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Rh
dGFWaWV3UHJvdG90eXBlKQorfTsKKworLyogU291cmNlIGZvciBKU0RhdGFWaWV3UHJvdG90eXBl
Lmx1dC5oCitAYmVnaW4gZGF0YVZpZXdUYWJsZQorICBnZXRJbnQ4ICAgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNHZXRJbnQ4ICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgZ2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDggICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDE2ICAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRVaW50MTYgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MzIgICAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIGdldFVpbnQzMiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDMy
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQ2NCAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jR2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldElu
dDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDggICAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQxNiAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMiAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDMyICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHNldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRGbG9hdDY0ICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKK0BlbmQKKyovCisKK0pTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQ
cm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKK3sKK30KKworSlNEYXRhVmlld1Byb3RvdHlwZSogSlNEYXRhVmlld1Byb3RvdHlw
ZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgSlNEYXRhVmll
d1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNEYXRhVmlld1Byb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTRGF0YVZpZXdQcm90
b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3RydWN0dXJlKiBKU0RhdGFWaWV3UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitib29sIEpTRGF0YVZpZXdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PigKKyAgICAgICAg
ZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1By
b3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jv
b2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdl
dFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oCisgICAgICAgIGV4ZWMsIEV4ZWNT
dGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQcm90b3R5cGUqPihv
YmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFsdWUgZ2V0RGF0YShFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZp
ZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9m
IERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKHRoZSBi
eXRlT2Zmc2V0KS4iKSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAg
ICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIGlmIChzaXplb2YodHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAg
IGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQg
Pj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAor
ICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDx0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0
b3IoKSkgKyBieXRlT2Zmc2V0KTsKKyAgICAKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0
bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUp
OworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZh
bHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBz
ZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRh
dGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4i
KSk7CisgICAgCisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxl
YXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisg
ICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
IHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhlYywgZXhlYy0+YXJndW1lbnQoMSkpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwor
ICAgIGlmIChzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkgPiAxICYmIGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50
KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9
CisgICAgCisgICAgaWYgKGJ5dGVPZmZzZXQgPj0gZGF0YVZpZXctPmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBv
ZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7
CisgICAgCisgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2
YWx1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdl
dERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQx
NkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGdldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dl
dEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
c2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBzZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jU2V0VWludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gc2V0RGF0YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZs
b2F0MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
c2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90
b3R5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVf
aAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVj
dHVyZSopOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0
ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAg
ICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
Jik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJB
cnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNGbG9hdDMyQXJyYXlfaAorI2Rl
ZmluZSBKU0Zsb2F0MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNl
bmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0Zsb2F0NjRBcnJheV9oCisjZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDhBcnJh
eUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRJbnQx
NkFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdl
dEludDMyQXJyYXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5m
byogZ2V0VWludDhBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xh
c3NJbmZvKiBnZXRVaW50OENsYW1wZWRBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZB
VEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50MTZBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JU
X1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworSlNf
RVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRGbG9hdDMyQXJyYXlDbGFzc0luZm8o
KTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0RmxvYXQ2NEFycmF5Q2xh
c3NJbmZvKCk7CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24g
b2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3Ig
ZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJl
LCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisv
LyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAg
IC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0
CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRB
cnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBw
b2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQor
Ly8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFs
ICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50
cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2lu
dCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVh
cDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkg
dGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91
IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZp
ZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAor
Ly8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhl
IGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUg
Zm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8K
Ky8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAg
IHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkg
SlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAg
ICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90
IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRv
SlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsK
Ky8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBl
bGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRl
eHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0
YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KSk7IH0KKyAgICAKKyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3Rv
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0
IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3ku
CisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5
KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0K
KyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZl
VmFsdWUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOwor
ICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91Ymxl
IGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1
cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7Cisg
ICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0
aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0
aXZlVmFsdWUodW5zaWduZWQgaSwgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ld
ID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUo
dW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5
VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05h
dGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAg
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBq
c1ZhbHVlKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNj
ZXNzUmFuZ2VRdWlja2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0
ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAg
ICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAg
Ly8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdp
bGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFs
aWRhdGVSYW5nZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBl
cnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhl
clR5cGU+CisgICAgYm9vbCBzZXRXaXRoU3BlY2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlw
ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5z
IGZhbHNlCisgICAgLy8gdGhlbiBpdCB3aWxsIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAg
ICBib29sIHNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdU
eXBlPiB0eXBlZEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBl
OjpjcmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJheSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5l
dmVyIGFjY2Vzc2VkIGRpcmVjdGx5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24g
c29tZSBjb21waWxlcnMuCisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyogaW5mbygp
CisgICAgeworICAgICAgICBzd2l0Y2ggKEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICBj
YXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAgcmV0dXJuIGdldEludDhBcnJheUNsYXNzSW5mbygp
OworICAgICAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnQxNkFy
cmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgcmV0
dXJuIGdldEludDMyQXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDg6Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0VWludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNl
IFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICByZXR1cm4gZ2V0VWludDhDbGFtcGVkQXJy
YXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgcmV0
dXJuIGdldFVpbnQxNkFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoK
KyAgICAgICAgICAgIHJldHVybiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0MzJBcnJheUNsYXNz
SW5mbygpOworICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgcmV0dXJuIGdl
dEZsb2F0NjRBcnJheUNsYXNzSW5mbygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBl
ZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgZnJpZW5kIHN0cnVjdCBUeXBlZEFycmF5Q2xhc3NJbmZvczsKKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpOworCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29w
eVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFu
ZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0
aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lk
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZm
ZXJWaWV3Kik7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgoraW5saW5lIFBhc3NS
ZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IHRvTmF0aXZlVHlwZWRWaWV3KEpTVmFs
dWUgdmFsdWUpCit7CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSogd3JhcHBlciA9
IGpzRHluYW1pY0Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSo+KHZhbHVlKTsKKyAg
ICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT50
eXBlZEltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0
aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVy
bmFsRnVuY3Rpb24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNl
OworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAg
ICAgICAgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisj
ZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmNyZWF0ZSgKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHBy
b3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHJl
c3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5hbWUpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisg
ICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJy
YXlTdHJ1Y3R1cmUoCisgICAgICAgICAgICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpIHsKKyAgICAgICAgaWYg
KFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJE
YXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwor
ICAgICAgICAKKyAgICAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24n
dCBzYXkgc28sIGl0J3MgY29ycmVjdCB0byBzYXkKKyAgICAgICAgLy8gIm5ldyBJbnQ4QXJyYXko
KSIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYWxsb2NhdGluZyBhbiBhcnJheSBvZiB6ZXJvCisgICAg
ICAgIC8vIGxlbmd0aC4KKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6
OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIDApKTsKKyAgICB9CisgICAgCisgICAgaWYgKEpTQXJy
YXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+
YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNC
dWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVj
LT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMp
IDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAg
ICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxl
bWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZz
ZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAg
ICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjpl
bGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZp
ZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkp
OworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUg
PT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1
bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBh
bGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBU
aGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50
ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6
ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xh
c3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOworICAgICAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVj
dCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVn
YXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUo
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RU
eXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0
dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5l
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZl
clZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYg
dm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0
KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVu
Z3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVjLT52bSgpLCBzdHJ1
Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAo
IWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5o
ZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4
dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVh
dGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQo
CisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFs
aXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQor
ICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhl
Yy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5
U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZm
ZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0
aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBy
ZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigpOworICAgIENvbnN0
cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGltcGwtPmJ5dGVP
ZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRv
cjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZt
KCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2YWxpZGF0ZVJhbmdlKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJv
dW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0aW5nIHRo
ZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4gV2VsbCwg
bm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisgICAgLy8g
c2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5LiBCdXQg
cHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRlLWVmZmVj
dHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAgIC8vIGNo
ZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBsZXNz
IHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0eSB2
dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0
aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLT5sZW5ndGgoKSAh
PSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIikpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCArIGksIG90aGVy
LT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9
IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUg
PT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNhc2U6
IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAgICBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90aGVy
LT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywg
b2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3Rvcigp
LCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlw
ZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxK
U0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJbnQx
NjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50
MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJbnQzMjoK
KyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MzJB
cnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAg
ICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJh
eSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4
Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVp
bnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpT
VWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWlu
dDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNV
aW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9h
dDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNG
bG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlRmxv
YXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpT
RmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgTm90VHlw
ZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlkYXRl
UmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3csIHdl
IGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9iamVj
dC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRP
d25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNP
YmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAg
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2Jq
ZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihq
c051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgewor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmlyZWZveCBh
cHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRvIHRoZSBz
YW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0g
cHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpO
b3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgs
IHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZp
cmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRv
CisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBl
ZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8
IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0
ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0
eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9w
ZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lO
REVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRo
aXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1
aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpw
dXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAg
ICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgICAgICAgICAgdGhpc09i
amVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
c2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0
LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAvLyBZZXMsIHJl
YWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcgaWYgeW91IHN0
b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseShleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKKyAgICBK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQorewor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJu
IGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAgICAgICAgICAgY2VsbCwg
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9p
ZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAor
ICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVj
dCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbGVu
Z3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVt
YmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihj
ZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2Ug
RmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwg
VHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmpl
Y3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNh
c2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwgQ29w
eVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2Vu
CisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0
b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9yOwor
ICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09i
amVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3Rvciwg
dGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0g
bmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2JqZWN0
LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZSh0
aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFuZFdh
c3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2Fu
dCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0
IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0
ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0
byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9u
ZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJh
bGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJh
Y2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJp
bHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRo
ZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3
ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBm
aW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVk
CisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0
byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIg
bWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQn
cworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdh
dGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0
aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAq
IGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hl
YWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAg
ICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAg
ICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hl
YWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0
IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPQorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rvcikt
PmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgdGhp
c09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsK
KyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6Cisg
ICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3Rp
bmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0
aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAor
ICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxl
bmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBl
ZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFk
ZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICB0aGlzT2JqZWN0LT5tX3Zl
Y3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3RlZnVs
VHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdl
dCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJy
YXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihv
YmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAgICBFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIERFQ0xBUkVfSU5G
TzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0aGlz
T2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmll
dy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJh
eSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYg
KCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikpOwor
ICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9m
ZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3Vy
Y2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJy
YXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcu
IikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQg
bGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+
YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisg
ICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7Cisg
ICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3Qt
Pmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFzc2Vy
dCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVuZ3Ro
ID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGlu
ZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdp
biA9IHRoaXNMZW5ndGggLSBiZWdpbjsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5kID0g
dGhpc0xlbmd0aCAtIGVuZDsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0aGUg
Ym91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNTRVJU
KGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2luLgor
ICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQgPj0g
YmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZm
ZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChsZW5ndGggPT0g
dGhpc09iamVjdC0+bGVuZ3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0K
KyAgICAgICAgY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3
Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1
bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1
ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0Ns
YXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAgbGVuZ3RoICogVmlld0NsYXNzOjplbGVtZW50U2l6
ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3
Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5zdWJhcnJheSwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8
Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+QllURVNfUEVSX0VMRU1FTlQsIGpzTnVtYmVyKFZpZXdDbGFzczo6ZWxlbWVudFNpemUp
LCBEb250RW51bSB8IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFz
cz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Cisg
ICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVj
dHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRl
U3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAg
ICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpT
QWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDYWxsYmFja09iamVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJK
U0RhdGFWaWV3UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5o
IgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1
Y3RvcnMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5cy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVn
YWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNjZXNz
b3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywg
MCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90
eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJz
Y29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1
bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1fYXJy
YXlCdWZmZXJQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50
OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQx
NildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQzMkFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCld
LnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWlu
dDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5
cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFycmF5
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0u
cHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0YVZp
ZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0lu
dDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
VWludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdl
dCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlw
ZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMy
KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDY0KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
RmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRGF0YVZpZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXc6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmplY3Q6
OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5N
YXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRF
bnVtKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IgPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7Cisg
ICAgRml4ZWRBcnJheTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZ
UEVTPiB0eXBlZEFycmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNb
dG9JbmRleChUeXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMs
IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZSh0aGlzLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJy
YXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBK
U1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0
KCksICJVaW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5
cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xhbXBl
ZEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYp
XSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3Rv
dHlwZS5nZXQoKSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRo
aXMsIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9h
dDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0
NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0NjRB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCld
LnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdG9JbmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAKKyAg
ICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJ
bmRleCA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7
CisgICAgICAgIG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250
RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElk
ZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5u
YW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250
RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9
IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4s
IGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTU0MCw2ICs1
OTYsMTQgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKKyAg
ICAKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclByb3RvdHlw
ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1
cmUpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9U
WVBFUzsgaS0tOykgeworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBl
ZEFycmF5c1tpXS5wcm90b3R5cGUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV90eXBlZEFycmF5c1tpXS5zdHJ1Y3R1cmUpOworICAgIH0KIH0KIAogSlNWYWx1ZSBKU0ds
b2JhbE9iamVjdDo6dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNt
YU1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNp
bmNsdWRlICJBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJO
dW1iZXJQcm90b3R5cGUuaCIKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CkBAIC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpT
QXJyYXlCdWZmZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1
Y3QgVHlwZWRBcnJheURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3Rv
dHlwZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07
CisgICAgCisgICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FS
UkFZX1RZUEVTPiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQ
b2ludGVyc1tTcGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkg
dGhlIExMSW50IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4
cFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUqIGFycmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZl
clByb3RvdHlwZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisg
ICAgU3RydWN0dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5z
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVj
aWFsOjpQb2ludGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTSW50OEFycmF5X2gKKyNkZWZpbmUgSlNJbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5X2gKKwor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMyQXJyYXlfaAorI2RlZmluZSBK
U0ludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZK
UyMjdHlwZSMjQ29uc3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0Vf
U19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9T
X0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1Nf
SU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gK
KworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
SW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFy
cmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVk
QXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29u
c3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNV
aW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNv
bnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
RmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1
Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFz
c0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19pbmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAm
SlMjI3R5cGUjI1Byb3RvdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFL
RV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19J
TkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9T
X0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lO
Rk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisjZGVmaW5lIEpTVHlw
ZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50OEFycmF5
PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5
UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1Vp
bnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJh
eVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNV
aW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheVByb3RvdHlw
ZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDMyQXJy
YXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU7CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5UHJvdG90eXBlc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAg
dGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7IFwK
KyAgICAgICAgI3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAw
LCAwLCBcCisgICAgICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5KSBcCisg
ICAgfTsgXAorICAgIGNvbnN0IENsYXNzSW5mbyogZ2V0IyN0eXBlIyNBcnJheUNsYXNzSW5mbygp
IHsgcmV0dXJuICZKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbzsgfQorCitNQUtFX1NfSU5GTyhJbnQ4
KTsKK01BS0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZP
KFVpbnQ4KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYp
OworTUFLRV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lO
Rk8oRmxvYXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAor
CisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJ
bnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFw
dG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4
Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2
NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhB
cnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZp
bmUgSlNVaW50OEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OENs
YW1wZWRBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U1VpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTVWludDE2QXJyYXlfaAorI2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMy
QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50
MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBP
cGVyYXRpb25zX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgor
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJK
U1Byb3h5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNB
cnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUJ1ZmZlciogbmF0
aXZlKQoreworICAgIGlmIChKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBuYXRpdmUtPm1fd3JhcHBl
ci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVy
KiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIGds
b2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgbmF0aXZlKTsKKyAgICBuYXRpdmUt
Pm1fd3JhcHBlciA9IFBhc3NXZWFrPEpTQXJyYXlCdWZmZXI+KHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVyIHVz
ZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVmZmVy
cyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAor
Ly8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3Rh
bmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBKU0Fy
cmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8K
Ky8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFmdGVy
IG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRo
ZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBo
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAgIHJldHVybiBoYXNJ
bmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzVHlwZWRW
aWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOwotICAgIH0K
KyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0OwogICAgIAog
ICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJl
SW5saW5lc19oCiAKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKQEAgLTEwNCw2
ICsxMDUsMTcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uYwogICAg
ICAgICB2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwog
fQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2Vs
bCogY2VsbCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3
KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNl
bGwpLT5tb2RlKCkgPT0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCgpICYmIGdsb2JhbE9iamVjdCgpID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlB
ZGFwdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9y
c19oCisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFy
ZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcg
Vmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3Rh
dGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAg
IHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQz
MigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8CisgICAgdHlw
ZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVB
cmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEZsb2F0VHlwZWRB
cnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmll
d1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7
CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFy
ZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihRTmFOKTsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3N0cnVjdCBJbnQ4QWRhcHRvcjsK
K3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJBZGFwdG9yOworc3RydWN0IFVpbnQ4
QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yOworc3RydWN0IFVpbnQxNkFkYXB0
b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvcjsKK3N0cnVj
dCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFk
YXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRh
cHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRh
cHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xh
bXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50MTZBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBKU0ludDMyQXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gSlNVaW50OEFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9y
PiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRBcnJheTsKKworc3Ry
dWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4X3QsIEludDhB
cnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07CitzdHJ1Y3QgSW50MTZBZGFwdG9yIDog
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5LCBKU0ludDE2QXJy
YXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJbnQzMkFycmF5LCBUeXBlSW50MzI+
IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVp
bnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlwZVVpbnQ4PiB7IH07CitzdHJ1Y3Qg
VWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDE2X3QsIFVpbnQx
NkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7IH07CitzdHJ1Y3QgVWludDMyQWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDMyX3QsIFVpbnQzMkFycmF5LCBK
U1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3IgOiBG
bG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMyQXJyYXksIEpTRmxvYXQzMkFycmF5
LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRBZGFwdG9yIDogRmxvYXRUeXBlZEFy
cmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNGbG9hdDY0QXJyYXksIFR5cGVGbG9h
dDY0PiB7IH07CisKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yIHsKKyAgICB0eXBlZGVmIHVp
bnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZpZXdUeXBlOworICAg
IHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25z
dCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWludDhDbGFtcGVkOworICAgIAorICAg
IHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVl
LmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4g
dG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
SlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBq
c051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
dWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90IGNsYW1w
KGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVy
biAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5QWRhcHRv
cnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlD
b250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJyYXlDb250cm9s
bGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVj
U3RhdGU7CitjbGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2Ns
YXNzIFR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNv
bnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlZEFycmF5Q29u
dHJvbGxlcigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBl
ZEFycmF5RGVzY3JpcHRvcl9oCi0jZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUg
ewotICAgIFR5cGVkQXJyYXlOb25lLAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJy
YXlJbnQxNiwKLSAgICBUeXBlZEFycmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAg
IFR5cGVkQXJyYXlVaW50OENsYW1wZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBl
ZEFycmF5VWludDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9h
dDY0Ci19OwotCi1zdHJ1Y3QgVHlwZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFn
ZU9mZnNldCgwKQotICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90
IHN0b3JhZ2VPZmZzZXQsIHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0lu
Zm8oY2xhc3NJbmZvKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQot
ICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNl
dDsKLSAgICBzaXplX3QgbV9sZW5ndGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHsKLSAgICBTaWduZWRUeXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQot
fTsKLWVudW0gVHlwZWRBcnJheVJvdW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAg
IENsYW1wUm91bmRpbmcKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlw
ZWRBcnJheURlc2NyaXB0b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVHlwZWRBcnJheUlubGluZXNfaAorI2RlZmluZSBUeXBlZEFycmF5SW5saW5l
c19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKKyNpbmNsdWRl
ICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIK
KworI2VuZGlmIC8vIFR5cGVkQXJyYXlJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOwor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBKU0ludDhBcnJheTo6aW5mbygpOwor
ICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gSlNVaW50OEFycmF5OjppbmZvKCk7
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gSlNVaW50OENsYW1w
ZWRBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gSlNJ
bnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4g
SlNVaW50MTZBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1
cm4gSlNJbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gSlNVaW50MzJBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgIHJldHVybiBKU0Zsb2F0MzJBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6
CisgICAgICAgIHJldHVybiBKU0Zsb2F0NjRBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZURh
dGFWaWV3OgorICAgICAgICByZXR1cm4gSlNEYXRhVmlldzo6aW5mbygpOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAg
ICAgb3V0LnByaW50KCJOb3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVJbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVVaW50OENsYW1wZWQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVVaW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVGbG9hdDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVG
bG9hdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAg
ICAgb3V0LnByaW50KCJUeXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
Q2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAor
ICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAg
IFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWlu
dDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmll
dworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVMgVHlwZURhdGFWaWV3
CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9CisKK2lubGluZSBib29s
IGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2Ug
VHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBy
ZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBUeXBlRmxvYXQ2
NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9y
VHlwZShUeXBlZEFycmF5VHlwZSk7CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBl
SW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNh
c2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFy
cmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0
MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNT
aWduZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgor
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgcmV0
dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUeXBl
ZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19o
CisjZGVmaW5lIFR5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4
Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFw
dG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRlZiBV
aW50OEFycmF5X2gKICNkZWZpbmUgVWludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4g
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0Owot
ICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLQotICAgIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIGlu
bGluZSBVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0
byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxV
aW50OEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJy
YXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGFycmF5
LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZTxVaW50OEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVV
bmluaXRpYWxpemVkPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQ4QXJyYXk6OlVpbnQ4
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi06IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4g
VWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXlJbXBsPFVpbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4QXJyYXk7
CiAKICNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMiwxMTIgKzEwLDI1IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAogI2lmbmRlZiBVaW50OENsYW1w
ZWRBcnJheV9oCiAjZGVmaW5lIFVpbnQ4Q2xhbXBlZEFycmF5X2gKIAotI2luY2x1ZGUgIlVpbnQ4
QXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgVWludDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUg
ZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2Ug
cmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQgdG8g
cG90ZW50aWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMgY3Jl
YXRlZCB1bmluaXRpYWxpemVkIC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhzCi0g
ICAgLy8gemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJvRmls
bCgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBpbmxp
bmUgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsK
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgaW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2Ug
Y29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBl
ZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJh
eTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+
KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6Onpl
cm9GaWxsKCkKLXsKLSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVpbnQ4
Q2xhbXBlZEFycmF5OjpzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBp
ZiAoaW5kZXggPj0gbV9sZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjppc25h
bih2YWx1ZSkgfHwgdmFsdWUgPCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBpZiAo
dmFsdWUgPiAyNTUpCi0gICAgICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0gPSBz
dGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKIHVzaW5nIEpTQzo6VWludDhDbGFtcGVkQXJyYXk7CiAKICNlbmRpZiAvLyBVaW50OENs
YW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQx
NkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDE2QXJyYXkuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWlu
dDE2QXJyYXlfaAogI2RlZmluZSBVaW50MTZBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDE2OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVh
dGU8VWludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MTZBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDE2QXJyYXk6OlVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBV
aW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQz
MkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDMyQXJyYXkuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWlu
dDMyQXJyYXlfaAogI2RlZmluZSBVaW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQzMl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVh
dGU8VWludDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDMyQXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBhcnJheUNvbnN0cnVjdG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3Rv
dHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7
CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFi
bGUgZGF0YVZpZXdUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBI
YXNoVGFibGUgZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAg
ICAsIGFycmF5UHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90
b3R5cGVUYWJsZSkpCiAgICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6Ym9vbGVhblByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAs
IGVycm9yUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5
cGVUYWJsZSkpCkBAIC0yNTgsNiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0g
YWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAv
LyBJbml0aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBW
TSBpbml0aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyKCkpOwogfQogCiBWTTo6flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAg
ICBhcnJheVByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0
b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0
ZVRhYmxlKCk7CisgICAgZGF0YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxl
KCk7CiAgICAgZXJyb3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICsz
MTQsNyBAQCBWTTo6flZNKCkKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGFycmF5UHJvdG90eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4oYm9vbGVhblByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2lu
Y2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2lu
Y2x1ZGUgIldlYWtSYW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KQEAgLTY5LDEzICs2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNo
ZTsKICAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0g
ICAgY2xhc3MgRmxvYXQzMkFycmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFz
cyBIYW5kbGVTdGFjazsKICAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50
OEFycmF5OwotICAgIGNsYXNzIEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAg
ICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFz
cyBKU09iamVjdDsKQEAgLTkzLDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBV
aW50OEFycmF5OwotICAgIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQx
NkFycmF5OwotICAgIGNsYXNzIFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
ZGF0YVZpZXdUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7
CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250
cm9sbGVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVt
cFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hh
c2hDb25zKCkgeyByZXR1cm4gbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51
bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAw
OyB9CiAKLSNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6
ZWRUeXBlKSBcCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25z
dCBjYXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNB
cnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyA9PSBkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VS
VChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRv
cigpIGNvbnN0IHsgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8p
OyByZXR1cm4gbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbihpbnQxNiwgSW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihpbnQzMiwgSW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1
aW50OCwgVWludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENs
YW1wZWQsIFVpbnQ4Q2xhbXBlZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KHVpbnQxNiwgVWludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWlu
dDMyLCBVaW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMy
LCBGbG9hdDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwg
RmxvYXQ2NCk7Ci0jdW5kZWYgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihU
eXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAg
ICAgICAgIHJldHVybiAmaW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRv
cigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAg
ICAgICAgIHJldHVybiAmdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNs
dXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAg
IE93blB0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1f
aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWlu
dDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3Vp
bnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50
MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQz
MkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yOwogICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEzLTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBB
ZGRlZCB0aGUgbm90aW9uIG9mIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRoYXQgY2FuIGJl
IG1hcmtlZCBEZWZlcnJlZCwKKyAgICAgICAgICB3aGljaCBpcyBsaWtlIGEgc3BlY2lhbC1wdXJw
b3NlIHVwcmVmLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBhIGNvbW1vbiBieXRlIGZsaXBw
ZXIuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2U6OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
Ojppc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZDo6c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVk
OjpEZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3Vu
dGVkOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMuaDog
QWRkZWQuCisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToKKyAg
ICAgICAgKFdURjo6ZmxpcEJ5dGVzKToKKwogMjAxMy0wOC0xMyAgQXJ1bnByYXNhZCBSYWprdW1h
ciAgPGFydXJhamt1QGNpc2NvLmNvbT4KIAogICAgICAgICBbV1RGXSBbSlNDXSBSZXBsYWNlIGN1
cnJlbnRUaW1lKCkgd2l0aCBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSBpbiBhbGwgcG9z
c2libGUgcGxhY2VzCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDggQEAKIAogLyogQmVnaW4gUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OworCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OworCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGODcx
MDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3
UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRp
b25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovOyB9Owog
CQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBG
MDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLzsgfTsKQEAgLTI4MCw2ICsyODIs
OCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMx
NzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUz
RiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBp
bGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1
IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzAsNiArNjM0LDcgQEAKIAkJCQlB
OEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgKi8sCiAJCQkJQThB
NDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3
RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5oICovLAorCQkJCTBGMkI2NkE0MTdCNkI0Rjcw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgy
NUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAv
KiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERv
dWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0OCw2ICs2NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1
REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovLAogCQkJCTBGOUQzMzVDMTY1
REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4
MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3
QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJCQlBOEE0NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyog
Rm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3MTUxQTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFs
LmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5ODAwMTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hl
ci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3IEBACiAJCQkJQThBNDczRjYxNTFBODI1QjAwNDEy
M0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVC
MDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZC
MTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJheVB0ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVCMDA0MTIzRkYgLyogT3duUHRyQ29tbW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTcsNiArMTA2NCw3IEBACiAJCQkJQThBNDc0MzMx
NTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBC
eXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRo
cmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRC
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorI2RlZmluZSBEZWZlcnJhYmxl
UmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2YgUmVmQ291bnRlZCB0aGF0IGFsbG93cyByZWZl
cmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQsCisvLyBhbmQgY2FuIHRlbGwgeW91IGlmIHRo
YXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5rIG9mIGEgZGVmZXJyYWwgYXMKKy8vIGp1c3Qg
YmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhjZXB0IHRoYXQgeW91IGNhbiBkZXRlY3QgaWYg
aXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVuZWQgLSB0aGlzIGNhbiBiZSB1c2VmdWwgZWl0
aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21ldGltZXMgZXZlbiBmb3Igc29tZSBhZGRpdGlv
bmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVycmVkRmxhZyA9IDE7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVudCA9IDI7CisgICAgCitwdWJsaWM6CisgICAgdm9p
ZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCArPSBub3JtYWxJbmNyZW1lbnQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJlZkNvdW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlZkNvdW50IC8gbm9ybWFsSW5jcmVt
ZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJlZEZsYWcpOworICAgIH0KKyAgICAK
K3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgICAgICA6IG1f
cmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgfkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGRlcmVm
QmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09IG5vcm1hbEluY3JlbWVudDsKKyAg
ICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKworICAgIGJvb2wgc2V0SXNEZWZlcnJl
ZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+ZGVmZXJyZWRGbGFnOworICAgICAg
ICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIERlZmVycmFi
bGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50ZWQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkKKyAgICB7CisgICAgICAgIGlmIChk
ZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChib29sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFzZXRJc0RlZmVycmVkQmFzZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291
bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ7CisKKyNlbmRp
ZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZsaXBC
eXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNkZWZpbmUgRmxpcEJ5dGVzX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIGJvb2wgbmVlZFRvRmxp
cEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9vbCBsaXR0bGVFbmRpYW4pCit7CisjaWYgQ1BVKEJJR19F
TkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKKyNlbHNlCisgICAgcmV0dXJuICFsaXR0
bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5saW5lIHVpbnQxNl90IGZsaXBCeXRlcyh1aW50MTZf
dCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDBmZikgPDwgOCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4KTsKK30KKworaW5saW5lIHVpbnQzMl90IGZsaXBCeXRl
cyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwZmYpIDw8
IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAwKSA8PCA4KQorICAgICAgICB8ICgo
dmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAw
KSA+PiAyNCk7Cit9CisKK2lubGluZSB1aW50NjRfdCBmbGlwQnl0ZXModWludDY0X3QgdmFsdWUp
Cit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMDAwMDAwMDAwZmZsbHUpIDw8IDU2KQor
ICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDAwMGZmMDBsbHUpIDw8IDQwKQorICAgICAg
ICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDBmZjAwMDBsbHUpIDw8IDI0KQorICAgICAgICB8ICgo
dmFsdWUgJiAweDAwMDAwMDAwZmYwMDAwMDBsbHUpIDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAm
IDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAw
ZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMDAw
MDAwMDAwbGx1KSA+PiA0MCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMDAwMDAwMDAw
bGx1KSA+PiA1Nik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0
ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSAxKQorICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMikgeworICAgICAgICB1bmlvbiB7
CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDE2X3Qgd29yZDsKKyAg
ICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9
IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9Cisg
ICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDMyX3Qgd29yZDsKKyAgICAgICAgfSB1Owor
ICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1
LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVv
Zih2YWx1ZSkgPT0gOCkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFs
OworICAgICAgICAgICAgdWludDY0X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9y
aWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAg
ICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5s
aW5lIFQgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4p
Cit7CisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikp
CisgICAgICAgIHJldHVybiBmbGlwQnl0ZXModmFsdWUpOworICAgIHJldHVybiB2YWx1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZMaXR0
bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzSWZM
aXR0bGVFbmRpYW47CisKKyNlbmRpZiAvLyBGbGlwQnl0ZXNfaAorCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNjYgQEAKKzIwMTMtMDgtMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHlwZWQgYXJyYXlz
IGFyZSBub3cgaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdENvcmUsIGFuZCBXZWJDb3JlIGlzIG1l
cmVseSBhCisgICAgICAgIGNsaWVudCBvZiB0aGVtLiBUaGVyZSBpcyBvbmx5IG9uZSBsYXllcmlu
ZyB2aW9sYXRpb246IFdlYkNvcmUgaW5zdGFsbHMgYQorICAgICAgICBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIgb24gVk0sIHdoaWNoIG1ha2VzIHRoZQorICAgICAgICBBcnJheUJ1ZmZlcjwt
PkpTQXJyYXlCdWZmZXIgcmVsYXRpb25zaGlwIHJlc2VtYmxlIERPTSB3cmFwcGVycy4gQnkgZGVm
YXVsdCwKKyAgICAgICAgSlNDIG1ha2VzIHRoZSBvd25lcnNoaXAgZ28gb25lIHdheTsgdGhlIEpT
QXJyYXlCdWZmZXIga2VlcHMgdGhlIEFycmF5QnVmZmVyCisgICAgICAgIGFsaXZlIGJ1dCBpZiBB
cnJheUJ1ZmZlciBpcyBrZXB0IGFsaXZlIGZyb20gbmF0aXZlIGNvZGUgdGhlbiB0aGUKKyAgICAg
ICAgSlNBcnJheUJ5ZmZlciBtYXkgZGllLiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgd2ls
bCBrZWVwIHRoZQorICAgICAgICBKU0FycmF5QnVmZmVyIGFsaXZlIGlmIHRoZSBBcnJheUJ1ZmZl
ciBpcyBpbiB0aGUgb3BhcXVlIHJvb3Qgc2V0LgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBu
b24tSlNET01XcmFwcGVycyBiZWhhdmUgbGlrZSBET00gd3JhcHBlcnMsIGEgYnVuY2ggb2YgY29k
ZSBpcworICAgICAgICBjaGFuZ2VkIHRvIG1ha2UgbW9zdCByZWZlcmVuY2VzIHRvIHdyYXBwZXJz
IHJlZmVyIHRvIEpTT2JqZWN0KiByYXRoZXIgdGhhbgorICAgICAgICBKU0RPTVdyYXBwZXIqLgor
ICAgICAgICAKKyAgICAgICAgQXJyYXkgYnVmZmVyIHZpZXdzIGFyZSBub3cgdHJhbnNpZW50OyB0
aGUgSlMgYXJyYXkgYnVmZmVyIHZpZXcgd3JhcHBlcnMKKyAgICAgICAgZG9uJ3Qgb3duIHRoZW0g
b3Iga2VlcCB0aGVtIGFsaXZlLiBUaGlzIHJlcXVpcmVkIGEgYnVuY2ggb2YgY2hhbmdlcyB0byBt
YWtlCisgICAgICAgIGJpbmRpbmdzIGNvZGUgdXNlIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHRv
IGhvbGQgb250byB0aGVpciB2aWV3cy4KKyAgICAgICAgCisgICAgICAgIEFsc28gdGhlcmUgaXMg
YSBidW5jaCBvZiBuZXcgY29kZSB0byBtYWtlIEpTQy1wcm92aWRlZCBhcnJheSBidWZmZXJzIGFu
ZAorICAgICAgICB2aWV3cyBvYmV5IHRoZSB0b0pTL3RvPENsYXNzTmFtZT4gaWRpb20gZm9yIHdy
YXBwaW5nIGFuZCB1bndyYXBwaW5nLgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgdGhlIERh
dGFWaWV3IEFQSSBpcyBub3cgY29tcGxldGVseSBkaWZmZXJlbnQ6IHRoZSBKU0RhdGFWaWV3Cisg
ICAgICAgIHByb3ZpZGVzIHRoZSBzYW1lIHVzZXItdmlzaWJsZSBKUyBBUEkgYnV0IHVzaW5nIGl0
cyBvd24gaW50ZXJuYWwgbWFnaWM7IHRoZQorICAgICAgICBDKysgY29kZSB0aGF0IHVzZXMgRGF0
YVZpZXcgbm93IHVzZXMgYSByYXRoZXIgZGlmZmVyZW50IEFQSSB0aGF0IGlzIG5vdAorICAgICAg
ICBhd2FyZSBvZiB1c3VhbCBET00gc2VtYW50aWNzLCBzaW5jZSBpdCdzIGluIEpTQyBhbmQgbm90
IFdlYkNvcmUuIEl0J3MKKyAgICAgICAgZXF1YWxseSB1c2VmdWwgZm9yIGFsbCBvZiBXZWJDb3Jl
J3MgcHVycG9zZXMsIGJ1dCBzb21lIGNvZGUgaGFkIHRvIGNoYW5nZQorICAgICAgICB0byBhZGFw
dCB0aGUgbmV3IGNvbnZlbnRpb25zLgorICAgICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJl
Y2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3Lmg6IEFk
ZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNE
YXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
VHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogTW9k
dWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmg6CisgICAgICAgICogV2ViQ29yZS5leHAu
aW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxv
YkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFs
dWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG86Omdl
dFJhbmRvbVZhbHVlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBl
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lQ2FjaGVkV3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNo
ZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlV3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9J
bnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1VpbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50OENsYW1wZWRB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvVWludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDMyQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9E
YXRhVmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OmxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVy
QXJyYXlCdWZmZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp3cmFwcGVyT3duZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEZv
ckFsbFBhcmVudHMpOgorICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOgorICAgICAgICAoU2tpcElu
Y2x1ZGVIZWFkZXIpOgorICAgICAgICAoSXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChJc1dy
YXBwZXJUeXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAoSlNW
YWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9y
SGVscGVyTWV0aG9kcyk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBmaWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICog
aHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0Zsb2F0MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQ2
NEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9VaW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
VWludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhDbGFt
cGVkQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBwYWdlL0NyeXB0by5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRyYWN0
S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKiB0ZXN0aW5nL01v
Y2tDRE0uY3BwOgorCiAyMDEzLTA4LTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgRm9vOjpzX2luZm8gc2hvdWxkIGJlIEZvbzo6aW5mbygpLCBzbyB0aGF0IHlv
dSBjYW4gY2hhbmdlIGhvdyB0aGUgc19pbmZvIGlzIGFjdHVhbGx5IGxpbmtlZApJbmRleDogU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsMzEgKzM4Miwx
OSBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL1RpbWVSYW5nZXMuaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAogICAgICQoV2ViQ29y
ZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZp
ZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0gICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9N
UGF0aC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL0ludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDhBcnJh
eS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwgXAotICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9V
aW50OEFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRB
cnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNyArMjM1LDYgQEAgX19aTjdX
ZWJDb3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUAogX19aTjdXZWJDb3JlMTJkZWxldGVD
b29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzRLVVJMRVJLTjNXVEY2U3Ry
aW5nRQogX19aTjdXZWJDb3JlMTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0
YWJhc2VFdgotX19aTjdXZWJDb3JlMTJ0b1VpbnQ4QXJyYXlFTjNKU0M3SlNWYWx1ZUUKIF9fWk43
V2ViQ29yZTEzQVhPYmplY3RDYWNoZTEwcm9vdE9iamVjdEV2CiBfX1pON1dlYkNvcmUxM0FYT2Jq
ZWN0Q2FjaGUxOHJvb3RPYmplY3RGb3JGcmFtZUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTNB
WE9iamVjdENhY2hlMjFnQWNjZXNzaWJpbGl0eUVuYWJsZWRFCkBAIC0yODgsNyArMjg3LDYgQEAg
X19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVyRVBOM0pTQzlFeGVjUwogX19aTjdXZWJDb3JlMTNk
aXJlY3RvcnlOYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTNsaXN0RGlyZWN0b3J5
RVJLTjNXVEY2U3RyaW5nRVMzXwogX19aTjdXZWJDb3JlMTNwb2ludGVyQ3Vyc29yRXYKLV9fWk43
V2ViQ29yZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTN0b0hU
TUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9K
U0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEy
cmVtb3ZlQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpAQCAtOTA3LDcgKzkwNSw2
IEBAIF9fWk43V2ViQ29yZTRQYXRoQzFFdgogX19aTjdXZWJDb3JlNFBhdGhEMUV2CiBfX1pON1dl
YkNvcmU0Y29yZUVQMjBOU1VSTFByb3RlY3Rpb25TcGFjZQogX19aTjdXZWJDb3JlNGNvcmVFUDI4
TlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQotX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlMwXzExQXJyYXlCdWZmZXJFCiBfX1pO
N1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBO
U18xMENsaWVudFJlY3RFCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18x
N0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xM0RPTVN0cmluZ0xpc3RFCiBfX1pON1dlYkNvcmU0dG9K
U0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xNENsaWVudFJl
Y3RMaXN0RQpAQCAtMjc0Myw3ICsyNzQwLDYgQEAgX19aTjdXZWJDb3JlMTZIVE1MTWVkaWFFbGVt
ZW50MTZyZXR1cm5UbwogX19aTks3V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDEyaXNGdWxsc2Ny
ZWVuRXYKIF9fWk43V2ViQ29yZTEwVGltZVJhbmdlczNhZGRFZGQKIF9fWk43V2ViQ29yZTEydG9U
aW1lUmFuZ2VzRU4zSlNDN0pTVmFsdWVFCi1fX1pON1dlYkNvcmUxNHRvRmxvYXQzMkFycmF5RU4z
SlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU18xMFRpbWVSYW5nZXNFCiBfX1pOSzdXZWJDb3JlMTBUaW1lUmFu
Z2VzN25lYXJlc3RFZAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfRGF0YVZpZXdfaAorI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGF0YVZp
ZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZm
ZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyX2gKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0FycmF5QnVmZmVyLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBA
QAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjZGVmaW5lIFdlYkNv
cmVfRldEX0pTQXJyYXlCdWZmZXJWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Fy
cmF5QnVmZmVyVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL0pTRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNEYXRhVmll
d19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTRGF0YVZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTRGF0YVZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVf
RldEX0pTVHlwZWRBcnJheXNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU1R5cGVkQXJyYXlzX2gK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1R5cGVkQXJyYXlzLmg+CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5
Q29udHJvbGxlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlDb250cm9sbGVyX2gK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5Q29udHJvbGxlci5oPgorI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVHlwZWRBcnJheUlu
bGluZXNzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRBcnJheUlubGluZXNzX2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBl
ZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfVHlwZWRBcnJheXNfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBl
ZEFycmF5c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheXMuaD4KKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGlt
ZUFuYWx5c2VyLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYs
MTIgQEAKICNkZWZpbmUgUmVhbHRpbWVBbmFseXNlcl9oCiAKICNpbmNsdWRlICJBdWRpb0FycmF5
LmgiCisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBGbG9hdDMyQXJyYXk7Ci1jbGFzcyBVaW50OEFycmF5OwotfQotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvQnVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0MDM4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDIsNiArMjQyLDggQEAKIAkJMEM0NTM0MjcxMENEQkJGQTAwODY5MTU3IC8q
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlm
b3JtTG9jYXRpb24uY3BwICovOyB9OwogCQkwQzQ1MzQyODEwQ0RCQkZBMDA4NjkxNTcgLyogSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9j
YXRpb24uaCAqLzsgfTsKIAkJMEYwOTA4N0YxNDQ0RkRCMjAwMDI4OTE3IC8qIFNjcm9sbGJhclRo
ZW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTcxNDE1MTQyMTg5RkMwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgKi87IH07CisJCTBG
MDk5RDA4MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDYx
N0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07
CisJCTBGMDk5RDA5MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDk5
RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjExQTU0RjBG
MzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8q
IFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgfTsKIAkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0
IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnMuaCAqLzsgfTsKIAkJMEYxMzE2NDAxNkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0
ZXJzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovOyB9
OwpAQCAtODI4LDExICs4MzAsNiBAQAogCQkyRTc1ODQxRjEyNzc5QURBMDA2MjYyOEIgLyogRmls
ZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJD
bGllbnQuaCAqLzsgfTsKIAkJMkU5NEY0M0IxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0
RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCAqLzsgfTsKIAkJMkU5NEY0
M0MxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpT
RmlsZVJlYWRlci5oICovOyB9OwotCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
N0NDRTcxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NDRUIx
MjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcu
aCAqLzsgfTsKLQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0ND
RjYxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwICovOyB9OwotCQkyRTk3
Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyog
SlNEYXRhVmlldy5jcHAgKi87IH07Ci0JCTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICovOyB9OwogCQkyRUE3Njgw
NDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUE3NjgwMzBGRTcxMjY0MDBB
QjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTJFQjRCQ0QyMTIx
RjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8q
IEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgKi87IH07CiAJCTJFQjRCQ0QzMTIxRjAzRTMwMEVDNDg4
NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VI
YW5kbGUuaCAqLzsgfTsKQEAgLTEyODgsOCArMTI4NSw2IEBACiAJCTQ5QjM3NjBEMTVDNkM2ODQw
MDU5MTMxRCAvKiBBcnJheVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUIzNzYwQjE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oICov
OyB9OwogCQk0OUM3Qjk5MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgKi87IH07CiAJCTQ5QzdCOTk0MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1
ZmZlci5oICovOyB9OwotCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAqLzsgfTsKLQkJNDlDN0I5OTYx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4
QXJyYXkuaCAqLzsgfTsKIAkJNDlDN0I5OTcxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLzsg
fTsKIAkJNDlDN0I5OTgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODUxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5oICovOyB9OwogCQk0OUM3Qjk5QjEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xQcm9ncmFtLmNwcCAqLzsgfTsKQEAgLTEzNTAsMjIgKzEzNDUsNiBAQAogCQk0OUVDRUI2
RTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyog
RmlsdGVyT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDlFQ0VCNkYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VC
NjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICovOyB9OwogCQk0OUVD
RUI3MDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0
IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQk0OUVFQ0YwMDEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
Q0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi87IH07Ci0JCTQ5RUVD
RjAxMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGMzEwNTA3MEM0MDAwOTlGQUIgLyog
SlNBcnJheUJ1ZmZlci5oICovOyB9OwotCQk0OUVFQ0YwMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNG
bG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLzsg
fTsKLQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNTEwNTA3MEM0
MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDQxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5
LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjcx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwNjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2
QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
Q0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA4
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpT
VWludDhBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjA5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1Vp
bnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0OUVFQ0YwQTEwNTA3MEM0MDAw
OTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJh
eS5jcHAgKi87IH07Ci0JCTQ5RUVDRjBCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VG
RDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwQzEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNV
aW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1Vp
bnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovOyB9OwotCQk0
OUVFQ0YxQjEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGMTkxMDUwNzJGMzAw
MDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsgfTsKLQkJNDlFRUNGMUMxMDUwNzJG
MzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0YxQTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk0OUVFRDE0MjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVEMTNDMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICov
OyB9OwogCQk0OUVFRDE0MzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
RDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07
CiAJCTQ5RUVEMTQ0MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
RDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICov
OyB9OwpAQCAtMTgyNyw4ICsxODA2LDYgQEAKIAkJNkU2N0QyQTYxMjgwRThBNDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3Bl
bkdMLmNwcCAqLzsgfTsKIAkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovOyB9Owog
CQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBODEyODBFOEJEMDA4NzU4
RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07Ci0JCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAv
KiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3Bw
ICovOyB9OwotCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5
MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNU
ZXh0dXJlRmxvYXQuY3BwICovOyB9OwogCQk2RUJGMEU0OTEyQTg5MjYxMDBEQjE3MDkgLyogT0VT
VGV4dHVyZUZsb2F0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmggKi87IH07
CiAJCTZFQkYwRTU0MTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU1MjEyQTg5Mjk4
MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uY3BwICovOyB9OwpAQCAtMjU4OSw3ICsyNTY2LDYg
QEAKIAkJODVGRjMxNUIwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZC
RkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKIAkJODYxQzJFQTQxM0ZC
NEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjFDMkVBMzEzRkI0RkREMDAwNjJBQkIgLyog
RG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLzsgfTsKIAkJODYxQzJFQTYxM0ZCNEZGRjAwMDYyQUJC
IC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjFDMkVBNTEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2Fk
VGltaW5nLmNwcCAqLzsgfTsKLQkJODYyNDNEMDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlC
dWZmZXJWaWV3SGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXIuaCAqLzsgfTsKIAkJODY1MTJFREUxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVz
b3VyY2VUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY1MTJFREIxNTRBMkFFRTAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuY3BwICovOyB9OwogCQk4NjUxMkVERjE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY1MTJFREMxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuaCAqLzsgfTsKIAkJODZCQTc2NkUxNjY0MjdBODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZC
QTc2NkQxNjY0MjdBODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVlc3QuY3BwICovOyB9OwpAQCAt
MjcwMyw4ICsyNjc5LDYgQEAKIAkJOTAwMTc3NDExMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkwMDE3NzNFMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVz
LmggKi87IH07CiAJCTkwMDE3ODgwMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVy
aXZhdGl2ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTAwMTc4N0UxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5j
cHAgKi87IH07CiAJCTkwMDE3ODgxMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVy
aXZhdGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwMDE3ODdGMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAq
LzsgfTsKLQkJOTEwODlEMzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkxMDg5RDMw
MTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi87IH07Ci0JCTkxMDg5
RDMzMTRDMzM2MDUwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkxMDg5RDJGMTRDMzM1Q0QwMDVB
RkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5Rjgy
OTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNw
cCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTQ2NTUsNyArNDYyOSw2IEBACiAJCUJDMjc0QjJGMTQwRUJFQjIw
MEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLzsgfTsKIAkJQkMyNzRCMzExNDBFQkVEODAwRUFE
RkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NT
Qm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCAqLzsgfTsKIAkJQkMyNzVCNzkxMUM1RDFDMzAwQzky
MDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0
UG9pbnRDdXN0b20uY3BwICovOyB9OwotCQlCQzI3NUNCMzExQzVFODVDMDBDOTIwNkMgLyogSlNB
cnJheUJ1ZmZlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3Rv
bS5jcHAgKi87IH07CiAJCUJDMjk5MzVEMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI5
OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovOyB9OwogCQlCQzJD
QkY0RTE0MEYxQUJEMDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyQ0JGNEIxNDBGMUE2NTAwMzg3
OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCAqLzsgfTsKIAkJQkMyQ0JGN0IxNDBGMUQ1ODAw
Mzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyQ0JGN0ExNDBGMUQ1ODAwMzg3OUJFIC8qIEpTV2Vi
R0xDb250ZXh0RXZlbnQuY3BwICovOyB9OwpAQCAtNjQ4MCw2ICs2NDUzLDggQEAKIAkJMEMzRjFG
NTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHBhdGggPSBjYW52YXMvV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1
MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5
RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4
NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclNlbGVjdGlvbkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzLmg7IHBhdGggPSBjYS9Q
bGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYz
RjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgcGF0
aCA9IGNhL21hYy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcxMzQsMTIgKzcxMDksNiBAQAogCQkyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIg
LyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXJM
b2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5NEY0MzkxMTky
MDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmlsZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YVZpZXcuY3BwOyBwYXRoID0g
Y2FudmFzL0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0ND
RTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERhdGFWaWV3Lmg7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBEYXRhVmlldy5pZGw7IHBhdGggPSBjYW52YXMv
RGF0YVZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NGNjEyOTNB
NDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0Rh
dGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8q
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2Ny
aXB0TG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQjRCQ0Qw
MTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNv
dXJjZUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVzb3Vy
Y2VIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NTQsOCArNzYyMyw2
IEBACiAJCTQ5QjM3NjBCMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODIxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTSW50OEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEZyYW1lYnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODUxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1dlYkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xQcm9ncmFtLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NjksNyArNzYzNiw2IEBACiAJCTQ5QzdCOUE4MTA0MkQz
MkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJHTEJ1ZmZlci5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0NDcg
LyogV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xC
dWZmZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUM3QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJH
TEJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOUFEMTA0MkQz
MkUwMDA5RDQ0NyAvKiBJbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDhB
cnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50OEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlDN0I5QUUxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZl
ci5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFGMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIu
aDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmlkbDsgcGF0aCA9IGNh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc3MjUsMzAgKzc2OTEsNiBAQAogCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVy
T3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZXJh
dGlvbi5oOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsdGVyT3BlcmF0
aW9ucy5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3Bl
cmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0ZXJPcGVyYXRp
b25zLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmll
dy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXJWaWV3LmlkbDsgcGF0aCA9
IGNhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IEFycmF5QnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9BcnJheUJ1ZmZlci5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENGMTA1MDNDMjMwMDA5OUZB
QiAvKiBGbG9hdDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0MzJBcnJh
eS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQzMkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNERDIxMDUwM0MyMzAwMDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDMyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0ludDMy
QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RENTEwNTAzQzIz
MDAwOTlGQUIgLyogSW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MTZB
cnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50MTZBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50OEFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50
OEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREIxMDUwM0My
MzAwMDk5RkFCIC8qIFVpbnQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50
MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXku
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZh
cy9VaW50MTZBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYy
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0
MzJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0
MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY1MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0Zsb2F0MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0lu
dDE2QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQx
NkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjkxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0ludDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNF
RkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQzMkFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkQxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNVaW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VG
RTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQxNkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNB
cnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Yx
QTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVF
RDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODIzOCw5ICs4MTgwLDYgQEAKIAkJNkU2N0QyQTQxMjgwRThBNDAw
ODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdM
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4Rjcg
LyogRXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVu
c2lvbnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUJDNUQ4MDEzOEI0QzRF
MDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9h
dDY0QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zsb2F0NjRBcnJheS5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0NjRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQkM1RUFFMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJG
MEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5jcHA7IHBhdGggPSBjYW52
YXMvT0VTVGV4dHVyZUZsb2F0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVC
RjBFNDYxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuaDsgcGF0aCA9IGNhbnZhcy9PRVNU
ZXh0dXJlRmxvYXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDcxMkE4
OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gT0VTVGV4dHVyZUZsb2F0LmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk3OCw3ICs4OTE3LDYgQEAKIAkJODVG
RjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxQzJFQTMxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3Vt
ZW50TG9hZFRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
b2N1bWVudExvYWRUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFD
MkVBNTEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFRpbWluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0Fy
cmF5QnVmZmVyVmlld0hlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0FycmF5QnVmZmVyVmlld0hlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREMxNTRBMkFF
RjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NjUxMkVERDE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFu
Y2VSZXNvdXJjZVRpbWluZy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTEzLDkg
KzkwNTEsNiBAQAogCQk5MDAxNzczRjEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5pZGw7IHBhdGggPSBjYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMDE3ODdFMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0
YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZh
dGl2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEwODlEMkYxNEMzMzVDRDAw
NUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTkxMDg5RDMwMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTFBMzkwNTgxNEMwRjRCOTAwRjY3
OTAxIC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50OENsYW1wZWRBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1l
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTEzNDIsNyArMTEyNzcsNiBAQAogCQlCQzI3NEIyRTE0MEVC
RUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0UG9pbnRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzI3NUNCMjExQzVFODVDMDBDOTIw
NkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMyOTkzNUMxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9ySW5wdXRUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyQ0JGNEIxNDBGMUE2NTAwMzg3OUJFIC8q
IEpTV2ViR0xDb250ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNXZWJHTENvbnRleHRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJD
QkY3QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDI1LDggKzEzOTU5LDYgQEAKIAkJNDk0ODRG
QUUxMDJDRjAxRTAwMTg3REQzIC8qIGNhbnZhcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNEQ0MxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVm
ZmVyLmlkbCAqLywKLQkJCQk0OUVFQ0RDOTEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXJW
aWV3LmlkbCAqLywKIAkJCQk2RTRFOTFBNzEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4
dEF0dHJpYnV0ZXMuY3BwICovLAogCQkJCTZFNEU5MUE4MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52
YXNDb250ZXh0QXR0cmlidXRlcy5oICovLAogCQkJCTQ5NDg0RkIzMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNHcmFkaWVudC5jcHAgKi8sCkBAIC0xNDA0Nyw5ICsxMzk3OSw2IEBACiAJCQkJNDk0
ODRGQkUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwgKi8s
CiAJCQkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCAqLywKIAkJ
CQk0OTQ4NEZDMDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuaCAqLywKLQkJCQkyRTk3
Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwICovLAotCQkJCTJFOTdDQ0U4MTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovLAotCQkJCTJFOTdDQ0U5MTI5MzlDQjgwMEM1
QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8sCiAJCQkJRkI5MTM5MjAxNkFFNEIwQjAwMUZFNjgyIC8q
IERPTVBhdGguaCAqLywKIAkJCQlGQjkxMzkyMTE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5p
ZGwgKi8sCiAJCQkJQTAyNDU3NEUxNkNFQUEyNzAwMEU1NjcxIC8qIEVYVERyYXdCdWZmZXJzLmNw
cCAqLywKQEAgLTE0MDU4LDExICsxMzk4Nyw2IEBACiAJCQkJNzcyODY5NEIxNEY4ODgyNTAwRjQ4
NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5NEMx
NEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oICovLAogCQkJ
CTc3Mjg2OTREMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
aWRsICovLAotCQkJCTQ5RUVDRENGMTA1MDNDMjMwMDA5OUZBQiAvKiBGbG9hdDMyQXJyYXkuaWRs
ICovLAotCQkJCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICov
LAotCQkJCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQxNkFycmF5LmlkbCAqLywKLQkJ
CQk0OUVFQ0REMjEwNTAzQzIzMDAwOTlGQUIgLyogSW50MzJBcnJheS5pZGwgKi8sCi0JCQkJNDlD
N0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhBcnJheS5pZGwgKi8sCiAJCQkJN0U1RDdBNzMx
NjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuY3BwICovLAogCQkJCTdFNUQ3
QTc0MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmggKi8sCiAJCQkJOTAw
MTc3M0QxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovLApA
QCAtMTQwNzcsMTAgKzE0MDAxLDYgQEAKIAkJCQk3N0ExN0E2RTEyRjI4MTgyMDA0RTAyRjYgLyog
T0VTVmVydGV4QXJyYXlPYmplY3QuY3BwICovLAogCQkJCTc3QTE3QTZGMTJGMjgxODIwMDRFMDJG
NiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5oICovLAogCQkJCTc3QTE3QTcwMTJGMjgxODIwMDRF
MDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwgKi8sCi0JCQkJNDlFRUNEREUxMDUwM0My
NDAwMDk5RkFCIC8qIFVpbnQxNkFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0REQjEwNTAzQzIzMDAw
OTlGQUIgLyogVWludDMyQXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZB
QiAvKiBVaW50OEFycmF5LmlkbCAqLywKLQkJCQk5MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyog
VWludDhDbGFtcGVkQXJyYXkuaWRsICovLAogCQkJCUE3RDIwRjZCMTA3RjQzOEIwMEE4MDM5MiAv
KiBXZWJHTEFjdGl2ZUluZm8uaCAqLywKIAkJCQlBN0QyMEYzQjEwN0YzNzM4MDBBODAzOTIgLyog
V2ViR0xBY3RpdmVJbmZvLmlkbCAqLywKIAkJCQk0OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyog
V2ViR0xCdWZmZXIuY3BwICovLApAQCAtMTY2NDUsMTAgKzE2NTY1LDYgQEAKIAkJQTgzQjc5MDgw
Q0NBRkYyQjAwMEIwODI1IC8qIEhUTUwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCTQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
LmNwcCAqLywKLQkJCQk0OUVFQ0VGMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5o
ICovLAotCQkJCTQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5j
cHAgKi8sCi0JCQkJNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmggKi8sCiAJCQkJQkU4RUYwM0UxNzFDOEZGOTAwOUI0OEMzIC8qIEpTQXVkaW9UcmFjay5jcHAg
Ki8sCiAJCQkJQkU4RUYwM0YxNzFDOEZGOTAwOUI0OEMzIC8qIEpTQXVkaW9UcmFjay5oICovLAog
CQkJCUJFOEVGMDQwMTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2tMaXN0LmNwcCAqLywK
QEAgLTE2NjYyLDggKzE2NTc4LDYgQEAKIAkJCQk0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNDlFRUQxM0UxMDUxOTY5NDAwMDk5
RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywKIAkJCQk0OUVFRDEzRjEw
NTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKLQkJCQky
RTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi8sCi0JCQkJMkU5N0NF
NkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLywKIAkJCQkyRTA4ODhEMjExNDg4
NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5jcHAgKi8sCiAJCQkJMkUwODg4RDMxMTQ4ODQ4
QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuaCAqLywKIAkJCQlGQjkxMzkyOTE2QUU0RkMwMDAx
RkU2ODIgLyogSlNET01QYXRoLmNwcCAqLywKQEAgLTE2Njc4LDEwICsxNjU5Miw2IEBACiAJCQkJ
NkVCRjBFNzUxMkE5ODY4ODAwREIxNzBBIC8qIEpTRVhURHJhd0J1ZmZlcnMuaCAqLywKIAkJCQk3
NzI4Njk4MTE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
Y3BwICovLAogCQkJCTc3Mjg2OTgyMTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5oICovLAotCQkJCTQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zs
b2F0MzJBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxv
YXQzMkFycmF5LmggKi8sCi0JCQkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2
NEFycmF5LmNwcCAqLywKLQkJCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0
QXJyYXkuaCAqLywKIAkJCQlCQzk3RTQxMDEwOTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29s
bGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM5N0U0MTExMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFs
bENvbGxlY3Rpb24uaCAqLywKIAkJCQkxQTRBMkRFQjBBMUI4NTJBMDBDODA3RjggLyogSlNIVE1M
QW5jaG9yRWxlbWVudC5jcHAgKi8sCkBAIC0xNjgzNSwxMiArMTY3NDUsNiBAQAogCQkJCUU0NDYx
NDBGMENENjgyNjkwMEZBREE3NSAvKiBKU0hUTUxWaWRlb0VsZW1lbnQuaCAqLywKIAkJCQlBNzc5
NzkyNDBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuY3BwICovLAogCQkJCUE3Nzk3OTI1
MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovLAotCQkJCTQ5RUVDRUY4MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUY5MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCAqLywKLQkJCQk0OUVFQ0VGNjEwNTA3MEM0MDAwOTlG
QUIgLyogSlNJbnQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQzMkFycmF5LmggKi8sCi0JCQkJNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
SW50OEFycmF5LmNwcCAqLywKLQkJCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4
QXJyYXkuaCAqLywKIAkJCQlDRDI3RjZFMjE0NTc2NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRy
b2xsZXIuY3BwICovLAogCQkJCUNEMjdGNkUzMTQ1NzY3NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29u
dHJvbGxlci5oICovLAogCQkJCUU0NDYxNDEwMENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJy
b3IuY3BwICovLApAQCAtMTY4NzMsMTQgKzE2Nzc3LDYgQEAKIAkJCQlFNDQ2MTQxMzBDRDY4MjY5
MDBGQURBNzUgLyogSlNUaW1lUmFuZ2VzLmggKi8sCiAJCQkJMDc4NDYzNDAxNDVCMTUxQTAwQTU4
REYxIC8qIEpTVHJhY2tFdmVudC5jcHAgKi8sCiAJCQkJMDc4NDYzNDExNDVCMTUxQTAwQTU4REYx
IC8qIEpTVHJhY2tFdmVudC5oICovLAotCQkJCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQxNkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNV
aW50MTZBcnJheS5oICovLAotCQkJCTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQz
MkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJB
cnJheS5oICovLAotCQkJCTQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXku
Y3BwICovLAotCQkJCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAq
LywKLQkJCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5j
cHAgKi8sCi0JCQkJOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCAqLywKIAkJCQkxNUM3NzA5MjEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRl
LmNwcCAqLywKIAkJCQkxNUM3NzA5MTEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRl
LmggKi8sCiAJCQkJQkU4RUYwNDYxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAg
Ki8sCkBAIC0xODc4MCw2ICsxODY3Niw4IEBACiAJCQkJQTc1RTQ5NzUxMDc1MkFDQjAwQzlCODk2
IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgKi8sCiAJCQkJQTc1RTQ5NzQxMDc1MkFDQjAw
QzlCODk2IC8qIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovLAogCQkJCUJDNTNEOTEwMTE0MzEw
Q0MwMDBEODE3RSAvKiBXZWJDb3JlSlNDbGllbnREYXRhLmggKi8sCisJCQkJMEYwOTlEMDYxN0I5
NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJCQkJ
MEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
ICovLAogCQkJCUUxQTY0M0ZDMEVDMDk3QTAwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9s
bGVyLmNwcCAqLywKIAkJCQlFMUE2NDNGMTBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0
Q29udHJvbGxlci5oICovLAogCQkJCUYzNDc0MkU2MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAgKi8sCkBAIC0xODgzNSw4ICsxODczMyw2IEBACiAJCUJDNEVE
RUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCUJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5
QnVmZmVyQ3VzdG9tLmNwcCAqLywKLQkJCQk4NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNB
cnJheUJ1ZmZlclZpZXdIZWxwZXIuaCAqLywKIAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYg
LyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQlDRERFNjkxRDE3MURGODkxMDBBNDREODkgLyog
SlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAgKi8sCiAJCQkJRkRFQUFBRUYxMkIwMkVFNDAwRENGMzNC
IC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcCAqLywKQEAgLTE4ODYyLDcgKzE4
NzU4LDYgQEAKIAkJCQlBRDcyNkZFQTE2RDlGNDBCMDAzQTRFNkQgLyogSlNDU1NTdHlsZURlY2xh
cmF0aW9uQ3VzdG9tLmggKi8sCiAJCQkJRTFBRDE0RTcxMjk3Mzc3NDAwQUNBOTg5IC8qIEpTQ1NT
U3R5bGVSdWxlQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzIwRkI3RTBDMEU4RTZDMDBEMTQ0N0YgLyog
SlNDU1NWYWx1ZUN1c3RvbS5jcHAgKi8sCi0JCQkJMkU5N0NDRjYxMjkzQTQzQTAwQzVDOEZGIC8q
IEpTRGF0YVZpZXdDdXN0b20uY3BwICovLAogCQkJCTQxNjJBNDUzMTAxMTQ1RTMwMERGRjNFRCAv
KiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLywKIAkJCQkzMUZCMUE2
QjEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgKi8sCiAJ
CQkJNTkwRTFCNEExMUU0RUY3MDAwNjlGNzg0IC8qIEpTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1
c3RvbS5jcHAgKi8sCkBAIC0yMTMyMSw3ICsyMTIxNiw2IEBACiAJCQkJQkM2NDY0MUMxMUQ3RjQx
NjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTgx
QUM1OTk5MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4MUFDNTk5QTEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJFOTdDQ0VCMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmll
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3MzJCMEIxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVD
b21wb25lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCNjEyNTFGMTJEMDAzRUYyNjkg
LyogRGF0ZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUzRUI2MzcxNTlDNTcwNDAw
MDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTIxODMwLDYgKzIx
NzI0LDcgQEAKIAkJCQk4OTNDNDgwRjEyNDhCRDNBMDAyQjNEODYgLyogRmlsZUVudHJ5U3luYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODMxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVFcnJv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVERjM2OUYxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVF
eGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMDk5RDA5MTdCOTY4QTEwMEZGODRCOSAv
KiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBODhB
OTA1MTc1NTNDRDcwMDBDNzRGOSAvKiBGaWxlSWNvbkxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjU1QjNEQkUxMjUxRjEyRDAwM0VGMjY5IC8qIEZpbGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlzdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yMjIzOSw5ICsyMjEzNCw2IEBACiAJCQkJMUM4MUJBMEEwRTk3MzQ4MzAwMjY2
RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxOEY4ODA1
MEZGOTU3QUYwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGREExNUVDQTEyQjAzRjUwMDAzQTU4M0EgLyogSlNBbmFseXNlck5vZGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RUVDRjAxMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZl
clZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MjQzRDAxMTFCQzMxRjcwMENDMDA2QSAvKiBK
U0FycmF5QnVmZmVyVmlld0hlbHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVERjMxREIwOUQx
QzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFOUUxMkIw
M0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZERjdF
OUM0MTNBQzIxREIwMEE1MUVBQyAvKiBKU0F1ZGlvQnVmZmVyQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtMjIzMDIsNyArMjIxOTQsNiBAQAogCQkJCTFBRTgyRjkwMENBQUZBOUQwMDIyMzdB
RSAvKiBKU0RhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTlERDY5OTExOTAyOUU1MDA3
RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNThDRUI2
OTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJFOTdDRTcwMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MTYyQTQ1ODEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFRDIxMkIwM0Y5NDAwM0E1ODNBIC8qIEpT
RGVsYXlOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUZCMUE2NjEyMEE1RDNGMDBEQzAyQTAg
LyogSlNEZXZpY2VNb3Rpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjM3NSw4ICsyMjI2
Niw2IEBACiAJCQkJODk4Nzg1QjMxMjJDQTJBNzAwM0FBQkRBIC8qIEpTRmlsZVN5c3RlbUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkRBODQ0RTEyMjRBMDcxMDA2MEQwMDYgLyogSlNG
aWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTNDNDdCQzEyMzhBMEE5MDAyQjNEODYg
LyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjAzMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkVC
QzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCNkQ5RDI3QjE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MDlFQkRDMDE2QjdGMzhFMDBDQkEzRkMgLyogSlNGb250TG9hZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGREExNUVBQzEyQjAzRUUxMDAzQTU4M0EgLyogSlNHYWluTm9kZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMjQ3Nyw5ICsyMjM2Niw2IEBACiAJCQkJQTc3OTc5MjkwRDZC
OUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzZE
QjEwQkYwNTk4MDBBMDI3NkUgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdBMEU3NzFGMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9z
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDUxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5OTYxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTSW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzVGQUVEMjBEQ0ZEOTAx
MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
ODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzVGNDU0MzBGN0MzQjVGMDBEN0MxRkIgLyogSlNMYXp5RXZlbnRMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yMjcyOSwxMCArMjI2MTUsNiBAQAogCQkJCUUxN0I0OTIxMTZB
OUI4RkYwMDFDODgzOSAvKiBKU1RyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE3NTBENUQwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg2NjI5Q0YwOURBMkI0NzAwOTYzM0E1IC8qIEpTVUlFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDlFRUNGMEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTQ5RUVDRjBCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50
OEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZDNDkgLyog
SlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFBNEZBRDIxNzVENUNC
MzAwNzQzODczIC8qIEpTVUlSZXF1ZXN0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1Qzc3
MDkzMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJFOEVGMDRCMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suaCBpbiBIZWFkZXJz
ICovLApAQCAtMjQ3MzIsNyArMjQ2MTQsNiBAQAogCQkJCTk3QkM2QTJGMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZVRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEzMTE1MDVG
MDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NjQ2NDFEMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTJFOTdDQ0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTczMkIwQTEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjUxMjUxRjEyRDAwM0VGMjY5IC8qIERh
dGVJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQjcxMjUxRjEyRDAwM0VG
MjY5IC8qIERhdGVUaW1lSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUzODgsOSAr
MjUyNjksNiBAQAogCQkJCTFDODFCQTA5MEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2Fs
bEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxOEY4ODA0MEZGOTU3QUUwMDgwRjA0NSAv
KiBKU0Fic3RyYWN0V29ya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUM5MTJCMDNG
NTAwMDNBNTgzQSAvKiBKU0FuYWx5c2VyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwMDEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCQzI3NUNCMzExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YxQjEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVERjMxREEwOUQxQzEyMzAwMEJFMzI1
IC8qIEpTQXR0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDZCQzBDNkJEMkYwMDA5MjBC
RkYgLyogSlNBdHRyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RTlEMTJCMDNF
RTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU0NzAs
OCArMjUzNDgsNiBAQAogCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OURENjlBMTE5MDI5RTUwMDdFOTY4NCAvKiBKU0Rh
dGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU4Q0VCNkExMTkxMzYwNzAw
MkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJFOTdDRTZG
MTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTJF
OTdDQ0Y3MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNF
RCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZEQTE1RUQxMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1NTQzLDggKzI1NDE5LDYgQEAKIAkJCQk4OTg3ODVGNDEyMkUxRUFDMDAz
QUFCREEgLyogSlNGaWxlUmVhZGVyU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTg3ODVC
MjEyMkNBMkE3MDAzQUFCREEgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODkzQzQ3QkIxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zs
b2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENG
OEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjZEOUQyN0MxNEVB
QzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREEx
NUVBQjEyQjAzRUUxMDAzQTU4M0EgLyogSlNHYWluTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTgwREE2MzBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI1NjAzLDYgKzI1NDc3LDcgQEAKIAkJCQlBNjE0OEE3ODEyRTQxRTNCMDA0NEE3
ODQgLyogSlNIVE1MS2V5Z2VuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIy
MTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGFiZWxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTJBQjIzMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMZWdlbmRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMDk5RDA4MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjUwQTFD
RTYzQjAwQjQyQjI1IC8qIEpTSFRNTExJRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODBFN0IxMDBBMTlENjA2MDA3RkI4QzUgLyogSlNIVE1MTGlua0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTFBRDEzOUIxMjk1RDkyNjAwQUNBOTg5IC8qIEpTSFRNTExpbmtFbGVtZW50
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2NTcsOSArMjU1MzIsNiBAQAogCQkJCUYz
MTYzOTZFMTMyOTQ4NzYwMEE2NDlDQiAvKiBKU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QTBFNzcxRTEwQzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E3NEVDQkQxMDE4MzlEQTAwQkY5
MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNDlFRUNGMDQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1RkFFRDEwRENGRDkwMTAwRDU4Rjc4IC8qIEpT
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVFNzBEQ0ZE
QTY4MDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4NjYyOUQ0MDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yNTk0MSwxMCArMjU4MTMsNiBAQAogCQkJCTFBNzUwRDVDMEE5
MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2
QkI3OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODY2MjlEMDA5REEyQjQ4MDA5NjMzQTUgLyogSlNVSUV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1Vp
bnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA4MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1VpbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTEwODlEMzMxNEMzMzYw
NTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QUFBNEZBRDMxNzVENUNCMzAwNzQzODczIC8qIEpTVUlSZXF1ZXN0RXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTVDNzcwOTQxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCRThFRjA0QTE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRl
b1RyYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NV3JhcHBlcldvcmxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw3IEBAIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgSlNET01XcmFwcGVyOwogY2xhc3MgU2Ny
aXB0Q29udHJvbGxlcjsKIAotdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBKU0M6OldlYWs8SlNET01X
cmFwcGVyPiA+IERPTU9iamVjdFdyYXBwZXJNYXA7Cit0eXBlZGVmIEhhc2hNYXA8dm9pZCosIEpT
Qzo6V2VhazxKU0M6OkpTT2JqZWN0PiA+IERPTU9iamVjdFdyYXBwZXJNYXA7CiB0eXBlZGVmIEpT
Qzo6V2Vha0dDTWFwPFN0cmluZ0ltcGwqLCBKU0M6OkpTU3RyaW5nLCBQdHJIYXNoPFN0cmluZ0lt
cGwqPiA+IEpTU3RyaW5nQ2FjaGU7CiAKIGNsYXNzIERPTVdyYXBwZXJXb3JsZCA6IHB1YmxpYyBS
ZWZDb3VudGVkPERPTVdyYXBwZXJXb3JsZD4gewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OmNvbnN0cnVjdEpTQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0KLSAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCkKLSAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9JbnQzMihleGVjKTsgLy8gTmFOLytpbmYvLWluZiByZXR1cm5zIDAsIHRoaXMg
aXMgaW50ZW5kZWQgYnkgV2ViSURMCi0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7Ci0g
ICAgaWYgKGxlbmd0aCA+PSAwKQotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpLCAxKTsKLSAgICBpZiAoIWJ1ZmZlci5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRl
Z2VyLiIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywg
anNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5nZXQoKSkpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNB
cnJheUJ1ZmZlclZpZXdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDI4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXJfaAotI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0KLSNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmll
dy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pT
VmFsdWUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9PcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5QmFzZS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0b29MYXJnZVNpemUgPSAi
U2l6ZSBpcyB0b28gbGFyZ2UgKG9yIGlzIG5lZ2F0aXZlKS4iOwotCi10ZW1wbGF0ZTxjbGFzcyBD
LCB0eXBlbmFtZSBUPgotYm9vbCBjb3B5VHlwZWRBcnJheUJ1ZmZlcihDKiB0YXJnZXQsIEFycmF5
QnVmZmVyVmlldyogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgsIHVuc2lnbmVkIG9mZnNl
dCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHNvdXJjZVR5cGUgPSBzb3VyY2Ut
PmdldFR5cGUoKTsKLSAgICBBU1NFUlQoc291cmNlVHlwZSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVEYXRhVmlldyk7Ci0KLSAgICBpZiAodGFyZ2V0LT5nZXRUeXBlKCkgPT0gc291cmNlVHlwZSkg
ewotICAgICAgICBpZiAoIXRhcmdldC0+c2V0KHN0YXRpY19jYXN0PEMqPihzb3VyY2UpLCBvZmZz
ZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXRhcmdldC0+Y2hlY2tJbmJvdW5kRGF0YShvZmZzZXQsIHNvdXJjZUxl
bmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAoc291cmNlVHlwZSkg
ewotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50ODoKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5z
ZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFy
PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlC
dWZmZXJWaWV3OjpUeXBlVWludDg6Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50
OENsYW1wZWQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7
ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2Fz
dDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MTY6Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFz
ZTxzaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTY6Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0
KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBzaG9y
dD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5
QnVmZmVyVmlldzo6VHlwZUludDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAo
VCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8aW50PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDMyOgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJh
eUJhc2U8dW5zaWduZWQgaW50PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQzMjoKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0
LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPGZsb2F0PiAq
Pihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZm
ZXJWaWV3OjpUeXBlRmxvYXQ2NDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNv
dXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQp
KHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4gKj4oc291cmNlKS0+aXRlbShpKSkp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1i
b29sIHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBDKiBpbXBsKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5ID0gdG9B
cnJheUJ1ZmZlclZpZXcoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghYXJyYXkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUgYXJyYXlU
eXBlID0gYXJyYXktPmdldFR5cGUoKTsKLSAgICBpZiAoYXJyYXlUeXBlID09IEFycmF5QnVmZmVy
Vmlldzo6VHlwZURhdGFWaWV3KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25l
ZCBvZmZzZXQgPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMikKLSAgICAg
ICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLQotICAgIHVpbnQz
Ml90IGxlbmd0aCA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+Z2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLQotICAgIGlmICgh
KGNvcHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGltcGwsIGFycmF5LmdldCgpLCBsZW5ndGgsIG9m
ZnNldCkpKQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IkluZGV4IGlzIG91dCBvZiByYW5nZS4iKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLUpTQzo6SlNWYWx1ZSBzZXRXZWJHTEFycmF5SGVs
cGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBDKiBpbXBsKQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gSlNDOjp0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIGlmIChzZXRXZWJHTEFy
cmF5V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBUPihleGVjLCBpbXBsKSkKLSAgICAgICAgLy8g
dm9pZCBzZXQoaW4gV2ViR0w8PkFycmF5IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgIGlm
IChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIC8vIHZvaWQgc2V0KGlu
IHNlcXVlbmNlPGxvbmc+IGFycmF5LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICAgICAgSlNDOjpKU09iamVjdCogYXJyYXkgPSBKU0M6OmFzT2JqZWN0KGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAyKQotICAgICAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gYXJyYXkt
PmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVj
KTsKLSAgICAgICAgaWYgKCFpbXBsLT5jaGVja0luYm91bmREYXRhKG9mZnNldCwgbGVuZ3RoKSkK
LSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5k
ZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU0M6
OkpTVmFsdWUgdiA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgIGltcGwtPnNldChpICsgb2Zmc2V0LCB2LnRvTnVt
YmVyKGV4ZWMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBK
U0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEpTQzo6dGhyb3dUeXBlRXJy
b3IoZXhlYywgIkludmFsaWQgYXJndW1lbnQiKTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24g
dXNlZCBieSBYWFhBcnJheUNvbnN0cnVjdG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3
aWxsIGFscmVhZHkgaGF2ZSB0aHJvd24gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRl
PGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVy
Vmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc291cmNlID0gdG9BcnJheUJ1ZmZlclZpZXcoZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgIGlmICghc291cmNlKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUgc291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgp
OwotICAgIGlmIChzb3VyY2VUeXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHVpbnQzMl90IGxlbmd0aCA9IGFzT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KDApKS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
KS50b1VJbnQzMihleGVjKTsKLSAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgICAgIHJldHVy
biBhcnJheTsKLSAgICB9Ci0KLSAgICBpZiAoIShjb3B5VHlwZWRBcnJheUJ1ZmZlcjxDLCBUPihh
cnJheS5nZXQoKSwgc291cmNlLmdldCgpLCBsZW5ndGgsIDApKSkgewotICAgICAgICB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgICAg
IHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLS8vIFRlbXBs
YXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlDb25zdHJ1Y3RvcnMuCi0vLyBJZiB0aGlzIHJl
dHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUgdGhyb3duIGEgSmF2YVNjcmlwdCBleGNlcHRp
b24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1
Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIo
ZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKLSAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMikKLSAgICAgICAgbGVu
Z3RoID0gZXhlYy0+YXJndW1lbnQoMikudG9VSW50MzIoZXhlYyk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpICUgc2l6ZW9mKFQpKSB7Ci0g
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5
QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0
aGUgZWxlbWVudCBzaXplLiIpKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgLyBzaXplb2Yo
VCk7Ci0gICAgfQotICAgIFJlZlB0cjxDPiBhcnJheSA9IEM6OmNyZWF0ZShidWZmZXIsIG9mZnNl
dCwgbGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgcmV0dXJuIGFycmF5Owot
fQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1
Y3RBcnJheUJ1ZmZlclZpZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIDMgY29uc3RydWN0b3JzOgotICAgIC8vCi0gICAgLy8gIDEpIChpbiBpbnQgc2l6ZSkKLSAg
ICAvLyAgMikgKGluIEFycmF5QnVmZmVyIGJ1ZmZlciwgW09wdGlvbmFsXSBpbiBpbnQgb2Zmc2V0
LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGludCBsZW5ndGgpCi0gICAgLy8gIDMpIChpbiBzZXF1
ZW5jZTxUPikgLSBUaGlzIGVuZHMgdXAgYmVpbmcgYSBKUyAiYXJyYXktbGlrZSIgb2JqZWN0Ci0g
ICAgLy8gICAgCi0gICAgLy8gRm9yIHRoZSAwIGFyZ3MgY2FzZSwganVzdCBjcmVhdGUgYSB6ZXJv
LWxlbmd0aCB2aWV3LiBXZSBjb3VsZAotICAgIC8vIGNvbnNpZGVyIHJhaXNpbmcgYSBTeW50YXhF
cnJvciBmb3IgdGhpcyBjYXNlLCBidXQgbm90IGFsbAotICAgIC8vIEphdmFTY3JpcHQgRE9NIGJp
bmRpbmdzIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuICJuZXcKLSAgICAvLyA8VHlwZT5BcnJheSgp
IiBhbmQgd2hhdCBvY2N1cnMgd2hlbiBhIHByZXZpb3VzbHktY29uc3RydWN0ZWQKLSAgICAvLyBB
cnJheUJ1ZmZlclZpZXcgaXMgcmV0dXJuZWQgdG8gSmF2YVNjcmlwdDsgZS5nLiwgZnJvbQotICAg
IC8vICJhcnJheS5zdWJzZXQoKSIuCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
Ci0gICAgICAgIHJldHVybiBDOjpjcmVhdGUoMCk7Ci0gICAgCi0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50KDApLmlzTnVsbCgpKSB7Ci0gICAgICAgIC8vIEludmFsaWQgZmlyc3QgYXJndW1lbnQKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgIFJlZlB0cjxD
PiB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5QnVmZmVyQXJndW1lbnQ8
QywgVD4oZXhlYyk7Ci0gICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7
Ci0gICAgCi0gICAgICAgIHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoVHlwZWRB
cnJheUFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAg
IHJldHVybiB2aWV3OwotCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIHNyY0FycmF5ID0gYXNPYmpl
Y3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBzcmNBcnJh
eS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihl
eGVjKTsKLSAgICAgICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgpOwotICAgICAgICBpZiAoIWFycmF5KSB7Ci0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gc3JjQXJyYXkt
PmdldChleGVjLCBpKTsKLSAgICAgICAgICAgIGFycmF5LT5zZXQoaSwgdi50b051bWJlcihleGVj
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIGludCBs
ZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIFJlZlB0cjxDPiBy
ZXN1bHQ7Ci0gICAgaWYgKGxlbmd0aCA+PSAwKQotICAgICAgICByZXN1bHQgPSBDOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgdG9vTGFyZ2VTaXplKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEpTVHlwZSwgdHlw
ZW5hbWUgV2ViQ29yZVR5cGU+Ci1zdGF0aWMgSlNDOjpKU1ZhbHVlIHRvSlNBcnJheUJ1ZmZlclZp
ZXcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFdlYkNvcmVUeXBlKiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotCi0gICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBvYmplY3QpKQotICAgICAgICByZXR1cm4g
d3JhcHBlcjsKLQotICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG9iamVj
dC0+Ynl0ZUxlbmd0aCgpKTsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxKU1R5cGU+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlICJBdWRp
b0NvbnRleHQuaCIKIAogI2luY2x1ZGUgIkF1ZGlvQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9CdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlv
Q29udGV4dC5oIgogI2luY2x1ZGUgIkpTT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDE0ICszNCwxNCBAQAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAi
SlNGaWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QmxvYkJ1aWxkZXIuaCIKICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
UnVsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghcnVsZSkKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVk
V3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHJ1bGUpOworICAgIEpTT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHJ1bGUpOwogICAgIGlmICh3
cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmEKICAgICBpZiAoIXZhbHVlLT5pc0NTU09NU2FmZSgpKQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFw
cGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdmFsdWUpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHZhbHVlKTsKIAogICAgIGlmICh3
cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTAgKzI2LDEwIEBACiAjaW5jbHVkZSAiSlNDcnlwdG8uaCIKIAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogCiAjaW5j
bHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkBAIC00MSwxMiArNDEsMTIgQEAgSlNWYWx1ZSBKU0NyeXB0bzo6Z2V0UmFu
ZG9tVmFsdWVzKEV4ZWNTdAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CiAKICAgICBKU1ZhbHVlIGJ1ZmZlciA9IGV4
ZWMtPmFyZ3VtZW50KDApOwotICAgIEFycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3ID0g
dG9BcnJheUJ1ZmZlclZpZXcoYnVmZmVyKTsKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBh
cnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOwogICAgIGlmICghYXJy
YXlCdWZmZXJWaWV3KQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpbXBsKCktPmdldFJhbmRvbVZhbHVlcyhhcnJh
eUJ1ZmZlclZpZXcsIGVjKTsKKyAgICBpbXBsKCktPmdldFJhbmRvbVZhbHVlcyhhcnJheUJ1ZmZl
clZpZXcuZ2V0KCksIGVjKTsKIAogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjEgQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgIlNj
cmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9yLmg+CiAjaW5jbHVkZSA8aGVhcC9X
ZWFrLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0RhdGFWaWV3Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5
cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxydW50
aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvTnVsbFB0ci5oPgpAQCAtMTI4LDYgKzEzNCwx
NiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlND
OjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMs
IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFBy
b3RvdHlwZSgpKSk7CiAgICAgfQogCisgICAgaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyKj4od29ybGQtPnZtKCktPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVy
T3duZXIoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERP
TVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHdvcmxkOworICAgIH0KKwogICAgIGlubGluZSBKU0RPTVdyYXBwZXIqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwgdm9pZCopIHsgcmV0dXJuIDA7IH0KICAg
ICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZv
aWQqLCBKU0RPTVdyYXBwZXIqLCBKU0M6OldlYWtIYW5kbGVPd25lciosIHZvaWQqKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIGlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQqLCB2b2lkKiwgSlNET01XcmFwcGVyKikgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTEzOSw2ICsxNTUsMTMgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIGRv
bU9iamVjdC0+d3JhcHBlcigpOwogICAgIH0KIAorICAgIGlubGluZSBKU0M6OkpTQXJyYXlCdWZm
ZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpB
cnJheUJ1ZmZlciogYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBw
ZXIuZ2V0KCk7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNE
T01XcmFwcGVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2
b2lkKiBjb250ZXh0KQogICAgIHsKICAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAg
LTE0Nyw2ICsxNzAsMTQgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNB
cnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwg
dm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0g
SlNDOjpQYXNzV2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJPd25lciwg
Y29udGV4dCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGlubGluZSBib29s
IGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBTY3JpcHRX
cmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQogICAgIHsKICAgICAg
ICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKQEAgLTE1NSwyNCArMTg2LDMyIEBAIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTRE9NV3JhcHBlciogZ2V0Q2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0KQorICAgIGlubGlu
ZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBK
U0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikK
ICAgICB7Ci0gICAgICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QpKQorICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1h
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB3ZWFrQ2xlYXIoZG9tT2Jq
ZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBn
ZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmpl
Y3QpCisgICAgeworICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBlciA9IGdldElubGlu
ZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICAgICAgcmV0dXJuIHdvcmxkLT5tX3dyYXBwZXJzLmdldChkb21PYmplY3QpOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIHZvaWQgY2Fj
aGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIEpT
RE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikK
ICAgICB7CiAgICAgICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25l
cih3b3JsZCwgZG9tT2JqZWN0KTsKICAgICAgICAgdm9pZCogY29udGV4dCA9IHdyYXBwZXJDb250
ZXh0KHdvcmxkLCBkb21PYmplY3QpOwogICAgICAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lciwgY29udGV4dCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEpTQzo6UGFzc1dlYWs8SlNET01XcmFwcGVyPiBwYXNzV2Vhayh3
cmFwcGVyLCBvd25lciwgY29udGV4dCk7CisgICAgICAgIEpTQzo6UGFzc1dlYWs8SlNDOjpKU09i
amVjdD4gcGFzc1dlYWsod3JhcHBlciwgb3duZXIsIGNvbnRleHQpOwogICAgICAgICB3ZWFrQWRk
KHdvcmxkLT5tX3dyYXBwZXJzLCAodm9pZCopZG9tT2JqZWN0LCBwYXNzV2Vhayk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3Jh
cHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBKU0RPTVdy
YXBwZXIqIHdyYXBwZXIpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKICAg
ICB7CiAgICAgICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVj
dCwgd3JhcHBlcikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xOTUsNyArMjM0LDcgQEAgY2xh
c3MgRE9NU3RyaW5nTGlzdDsKICAgICB7CiAgICAgICAgIGlmICghZG9tT2JqZWN0KQogICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIGlmIChKU0RPTVdyYXBwZXIqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9tT2JqZWN0KSkK
KyAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgZG9tT2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVy
OwogICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxXcmFwcGVyQ2xhc3M+KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgZG9tT2JqZWN0KTsKICAgICB9CkBAIC0zMjMsNiArMzYyLDI1IEBAIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCisgICAgaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisgICAgeworICAgICAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICBpZiAoSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGdldEV4aXN0aW5nV3JhcHBlcjxKU0M6OkpTQXJy
YXlCdWZmZXI+KGV4ZWMsIGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICBidWZmZXItPnJlZigpOworICAgICAgICBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIg
PSBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShleGVjLT52bSgpLCBnbG9iYWxPYmplY3QtPmFy
cmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CisgICAgICAgIGNhY2hlV3JhcHBlcihjdXJy
ZW50V29ybGQoZXhlYyksIGJ1ZmZlciwgd3JhcHBlcik7CisgICAgICAgIHJldHVybiB3cmFwcGVy
OworICAgIH0KKworICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZp
ZXcqIHZpZXcpCisgICAgeworICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIHZpZXctPndyYXAoZXhlYywgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VD4gcHRyKQogICAgIHsKQEAgLTM3Niw2ICs0MzQsMzIg
QEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIAogICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
KTsKIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b0FycmF5
QnVmZmVyVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3KiB3cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXcqPih2YWx1ZSk7CisgICAgICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gd3JhcHBlci0+aW1wbCgpOworICAgIH0KKyAgICAKKyAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9JbnQ4QXJyYXkoSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0
b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9J
bnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDE2QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8
SlNDOjpJbnQzMkFycmF5PiB0b0ludDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVWludDhBcnJheShKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFk
YXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDhDbGFtcGVk
QXJyYXk+IHRvVWludDhDbGFtcGVkQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odmFsdWUpOyB9
CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VaW50MTZBcnJheShK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50MTZBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQz
MkFycmF5PiB0b1VpbnQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b0Zsb2F0MzJBcnJheShKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRh
cHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+
IHRvRmxvYXQ2NEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2
ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICAKKyAgICBpbmxp
bmUgUGFzc1JlZlB0cjxKU0M6OkRhdGFWaWV3PiB0b0RhdGFWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTQzo6SlNEYXRhVmlldyogd3JhcHBlciA9IEpTQzo6anNEeW5h
bWljQ2FzdDxKU0M6OkpTRGF0YVZpZXcqPih2YWx1ZSk7CisgICAgICAgIGlmICghd3JhcHBlcikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gd3JhcHBlci0+dHlwZWRJbXBs
KCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJh
aXRzOwogCiAgICAgdGVtcGxhdGU8PgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEYXRhVmlld0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
RGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1lbnVtIERhdGFWaWV3QWNjZXNzVHlwZSB7Ci0gICAgQWNjZXNzRGF0YVZpZXdN
ZW1iZXJBc0Zsb2F0MzIsCi0gICAgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQKLX07Ci0K
LUpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIERhdGFWaWV3KiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHdyYXA8SlNEYXRhVmlldz4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNEYXRhVmlldyhFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpIHx8ICFleGVj
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLQotICAgIFJlZlB0cjxEYXRhVmlldz4gdmlldyA9IGNvbnN0cnVjdEFycmF5QnVm
ZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PERhdGFWaWV3LCBjaGFyPihleGVjKTsKLSAg
ICBpZiAoIXZpZXcuZ2V0KCkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIElOREVY
X1NJWkVfRVJSKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICB9Ci0KLSAgICBKU0RhdGFWaWV3Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBq
c0Nhc3Q8SlNEYXRhVmlld0NvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKSwgdmlldy5nZXQoKSkpKTsKLX0KLQotc3RhdGljIEpTVmFsdWUgZ2V0RGF0YVZp
ZXdNZW1iZXIoRXhlY1N0YXRlKiBleGVjLCBEYXRhVmlldyogaW1wLCBEYXRhVmlld0FjY2Vzc1R5
cGUgdHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQg
PSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgYm9vbCBsaXR0
bGVFbmRpYW4gPSBmYWxzZTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSAmJiAo
dHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMiB8fCB0eXBlID09IEFjY2Vzc0Rh
dGFWaWV3TWVtYmVyQXNGbG9hdDY0KSkgewotICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5h
cmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQ7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBBY2Nlc3NE
YXRhVmlld01lbWJlckFzRmxvYXQzMjoKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNG
bG9hdDY0OiB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9ICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3
TWVtYmVyQXNGbG9hdDMyKSA/IGltcC0+Z2V0RmxvYXQzMihieXRlT2Zmc2V0LCBsaXR0bGVFbmRp
YW4sIGVjKSA6IGltcC0+Z2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsK
LSAgICAgICAgcmVzdWx0ID0gc3RkOjppc25hbih2YWx1ZSkgPyBqc05hTigpIDoganNOdW1iZXIo
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1KU1ZhbHVlIEpTRGF0YVZpZXc6
OmdldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXREYXRhVmlld01l
bWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+KGltcGwoKSksIEFjY2Vzc0RhdGFWaWV3
TWVtYmVyQXNGbG9hdDMyKTsKLX0KLQotSlNWYWx1ZSBKU0RhdGFWaWV3OjpnZXRGbG9hdDY0KEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YVZpZXdNZW1iZXIoZXhlYywgc3Rh
dGljX2Nhc3Q8RGF0YVZpZXcqPihpbXBsKCkpLCBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2
NCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdl
LmgiCiAjaW5jbHVkZSAiSlNUcmFja0N1c3RvbS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5o
IgogI2luY2x1ZGUgIkpTVm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
VHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4K
ICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KICNpbmNsdWRlIDxydW50aW1lL09w
ZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgSlNWYWx1ZSBKU0RvY3VtZW50Ojpsb2NhdGlv
bihFeGVjU3RhdGUqIAogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBMb2NhdGlvbiog
bG9jYXRpb24gPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmxvY2F0aW9uKCk7Ci0g
ICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdv
cmxkKGV4ZWMpLCBsb2NhdGlvbikpCisgICAgaWYgKEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxvY2F0aW9uKSkKICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CiAKICAgICBKU0xvY2F0aW9uKiBqc0xvY2F0aW9uID0gSlNMb2NhdGlvbjo6Y3Jl
YXRlKGdldERPTVN0cnVjdHVyZTxKU0xvY2F0aW9uPihleGVjLCBnbG9iYWxPYmplY3QoKSksIGds
b2JhbE9iamVjdCgpLCBsb2NhdGlvbik7CkBAIC04Myw3ICs4Myw3IEBAIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9jdW1lbnQpOworICAgIEpTT2JqZWN0KiB3cmFw
cGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvY3VtZW50KTsKICAg
ICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhCiAgICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0g
ICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIGV2ZW50KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIo
Y3VycmVudFdvcmxkKGV4ZWMpLCBldmVudCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVS
ZWFkZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDggKzM1LDggQEAKICNpbmNsdWRlICJKU0ZpbGVSZWFkZXIuaCIKIAogI2luY2x1ZGUgIkZp
bGVSZWFkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDM4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYQogICAgIGlmICghY29sbGVjdGlvbikKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihj
dXJyZW50V29ybGQoZXhlYyksIGNvbGxlY3Rpb24pOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNvbGxlY3Rpb24pOwogCiAgICAg
aWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0
MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXku
aCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KQEAgLTQwLDcgKzM5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
Ci0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29y
bGQoZXhlYyksIGltYWdlRGF0YSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VEYXRhKTsKICAgICBpZiAod3JhcHBlcikK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAog
I2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0
MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1M
QWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRl
ICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJK
U0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKLSNpbmNsdWRlICJKU1VpbnQxNkFycmF5LmgiCi0j
aW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2luY2x1ZGUgPHBh
cnNlci9Tb3VyY2VDb2RlLmg+CkBAIC02Nyw4ICs1OSwxMSBAQAogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VFdmVudC5oIgogCi0j
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC0zOSw2ICszOCw3
IEBACiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VF
dmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2
aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9y
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAogI2luY2x1ZGUg
IkV2ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNl
Z0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAg
aWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlmIChKU0RPTVdy
YXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2Jq
ZWN0KSkKKyAgICBpZiAoSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgb2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBz
d2l0Y2ggKG9iamVjdC0+cGF0aFNlZ1R5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3Vy
cmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKICAgICBpZiAo
d3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgCiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIAotICAg
IEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCB0cmFjayk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1
cm4gd3JhcHBlcjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9u
IDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE0IEBACiAjaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRVhURHJhd0J1ZmZlcnMuaCIK
ICNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpT
RmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1
ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5j
bHVkZSAiSlNJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50Lmgi
CiAjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiSlNPRVNU
ZXh0dXJlRmxvYXQuaCIKICNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKICNpbmNs
dWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5o
IgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIK
ICNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKICNpbmNsdWRlICJKU1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgpAQCAtODUsMTAgKzgxLDkgQEAKICNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlw
ZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQAog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgi
CiAjaW5jbHVkZSAiSlNET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9t
LmgiCkBAIC01MCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRv
ci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBA
IC0xMjcsOSArMTI3LDEwIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3Rh
dGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0RPTUZvcm1EYXRhKHZhbCksIGVjKTsKICAg
ICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXI6OmluZm8oKSkpCiAgICAg
ICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1ZmZlcih2YWwpLCBlYyk7Ci0gICAgICAgIGVs
c2UgaWYgKHZhbC5pbmhlcml0cyhKU0FycmF5QnVmZmVyVmlldzo6aW5mbygpKSkKLSAgICAgICAg
ICAgIGltcGwoKS0+c2VuZCh0b0FycmF5QnVmZmVyVmlldyh2YWwpLCBlYyk7Ci0gICAgICAgIGVs
c2UKKyAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXJWaWV3OjppbmZv
KCkpKSB7CisgICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB2aWV3ID0gdG9BcnJh
eUJ1ZmZlclZpZXcodmFsKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2aWV3LmdldCgpLCBl
Yyk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHZhbC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNp
b24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjUgKzMyLDEzIEBACiAjaW5jbHVkZSAi
RmlsZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0j
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiSlNCbG9iLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgogI2luY2x1ZGUg
IkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiSlNG
aWxlTGlzdC5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNGbG9h
dDY0QXJyYXkuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MTZB
cnJheS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5
LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgi
Ci0jaW5jbHVkZSAiSlNVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIK
LSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNjMsMTIgKzUxLDE3IEBACiAjaW5jbHVk
ZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBl
ZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KICNpbmNsdWRlIDxydW50aW1l
L1JlZ0V4cE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCkBAIC0xNzIyLDQ3ICsxNzE1LDYgQEAgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpTZXJpYWxpemVkU2NyaXB0VgogICAgIG1fYmxvYlVSTHMuc3dhcChibG9iVVJMcyk7CiB9
CiAKLXN0YXRpYyB2b2lkIG5ldXRlclZpZXcoSlNDZWxsKiBqc1ZpZXcpCi17Ci0gICAgaWYgKCFq
c1ZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzd2l0Y2ggKGpzVmlldy0+Y2xhc3NJ
bmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6
Ci0gICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBEYXRhVmlldywgZm9yIGV4YW1wbGUuIEFzc3Vt
ZSB0aGF0IHRoZXJlIGFyZSB2aWV3cyB0aGF0IHRoZQotICAgICAgICAvLyBERkcgZG9lc24ndCBj
YXJlIGFib3V0LgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAg
ICAgICAganNDYXN0PEpTSW50OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICBqc0Nh
c3Q8SlNJbnQxNkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICBqc0Nhc3Q8SlNJbnQz
MkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4o
anNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAganNDYXN0PEpTVWludDhDbGFtcGVkQXJy
YXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KGpz
VmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5
cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eUZsb2F0MzI6Ci0gICAgICAgIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KGpzVmlldyktPm1fc3Rv
cmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9h
dDY0OgotICAgICAgICBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VM
ZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25QdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJh
eUJ1ZmZlcnMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1
ZmZlcnMsIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlJiBjb2RlKQogewpAQCAtMTc3OSwyNiArMTcz
MSwxNSBAQCBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCCiAKICAgICBI
YXNoU2V0PEpTQzo6QXJyYXlCdWZmZXIqPiB2aXNpdGVkOwogICAgIGZvciAoc2l6ZV90IGFycmF5
QnVmZmVySW5kZXggPSAwOyBhcnJheUJ1ZmZlckluZGV4IDwgYXJyYXlCdWZmZXJzLnNpemUoKTsg
YXJyYXlCdWZmZXJJbmRleCsrKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3PiA+IG5ldXRlcmVkVmlld3M7Ci0KICAgICAgICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoYXJy
YXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB2aXNpdGVkLmFkZChhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0
KCkpOwogCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5k
ZXhdLT50cmFuc2Zlcihjb250ZW50cy0+YXQoYXJyYXlCdWZmZXJJbmRleCksIG5ldXRlcmVkVmll
d3MpOworICAgICAgICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4
XS0+dHJhbnNmZXIoY29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpKTsKICAgICAgICAgaWYg
KCFyZXN1bHQpIHsKICAgICAgICAgICAgIGNvZGUgPSBWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhl
IHZpZXdzIG1heSBoYXZlIGJlZW4gbmV1dGVyZWQsIGJ1dCB0aGVpciB3cmFwcGVycyBhbHNvIG5l
ZWQgdG8gYmUgbmV1dGVyZWQsIHRvby4KLSAgICAgICAgZm9yIChzaXplX3Qgdmlld0luZGV4ID0g
bmV1dGVyZWRWaWV3cy5zaXplKCk7IHZpZXdJbmRleC0tOykgewotICAgICAgICAgICAgQXJyYXlC
dWZmZXJWaWV3KiB2aWV3ID0gbmV1dGVyZWRWaWV3c1t2aWV3SW5kZXhdLmdldCgpOwotICAgICAg
ICAgICAgZm9yIChzaXplX3Qgd29ybGRJbmRleCA9IHdvcmxkcy5zaXplKCk7IHdvcmxkSW5kZXgt
LTspIHsKLSAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gd29ybGRzW3dv
cmxkSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgICAgIG5ldXRlclZpZXcoZ2V0Q2FjaGVkV3Jh
cHBlcih3b3JsZCwgdmlldykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBjb250ZW50cy5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5o
IgogI2luY2x1ZGUgIkRPTU9iamVjdEhhc2hUYWJsZU1hcC5oIgorI2luY2x1ZGUgIldlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NSw2ICs3Niw3IEBAIGlubGluZSB2b2lkIGluaXROb3Jt
YWxXb3JsZENsaWVudERhdGEoSlMKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3JlSlND
bGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7CiAgICAgdm0tPmNsaWVudERhdGEg
PSB3ZWJDb3JlSlNDbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAg
d2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3Jl
YXRlKHZtLCB0cnVlKTsKKyAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVm
KG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlIDxoZWFwL1Bhc3NXZWFrLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQor
eworfQorV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
cjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVm
ZmVyKj4oCisgICAgICAgIFdlYkNvcmU6OnRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgbmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJv
b3RzKAorICAgIEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJy
YXlCdWZmZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIGlmICghanNBcnJheUJ1ZmZl
ci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJy
YXlCdWZmZXIqIHJvb3QgPSBqc0FycmF5QnVmZmVyLT5pbXBsKCk7CisgICAgcmV0dXJuIHZpc2l0
b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOworfQorCit2b2lkIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSgKKyAgICBIYW5kbGU8VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJy
YXlCdWZmZXIgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7
CisgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3Js
ZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc0FycmF5QnVmZmVyLT5p
bXBsKCksIGpzQXJyYXlCdWZmZXIpOworICAgIGpzQXJyYXlCdWZmZXItPmltcGwoKS0+ZGVyZWYo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gK
KworI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVi
bGljIEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgfldlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNDOjpKU0FycmF5QnVmZmVyKiB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKKyAg
ICAKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKCkgeyByZXR1cm4gJm1f
b3duZXI7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworICAg
IH07CisKKyAgICBKU0FycmF5QnVmZmVyT3duZXIgbV9vd25lcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0JKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDIxICsxODAsMjIgQEAg
c3ViIEZvckFsbFBhcmVudHMKIAogICAgIG15ICRyZWN1cnNlOwogICAgICRyZWN1cnNlID0gc3Vi
IHsKKyAgICAgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgICAgIG15ICRjdXJy
ZW50SW50ZXJmYWNlID0gc2hpZnQ7CiAKICAgICAgICAgZm9yIChAeyRjdXJyZW50SW50ZXJmYWNl
LT5wYXJlbnRzfSkgewogICAgICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkXzsKLSAgICAg
ICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkaW50
ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gJG9iamVjdC0+
UGFyc2VJbnRlcmZhY2UoJG91dGVySW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CiAKICAgICAg
ICAgICAgIGlmICgkYmVmb3JlUmVjdXJzaW9uKSB7CiAgICAgICAgICAgICAgICAgJiRiZWZvcmVS
ZWN1cnNpb24oJHBhcmVudEludGVyZmFjZSkgZXEgJ3BydW5lJyBhbmQgbmV4dDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICYkcmVjdXJzZSgkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAg
ICAgICYkcmVjdXJzZSgkb3V0ZXJJbnRlcmZhY2UsICRwYXJlbnRJbnRlcmZhY2UpOwogICAgICAg
ICAgICAgJiRhZnRlclJlY3Vyc2lvbigkcGFyZW50SW50ZXJmYWNlKSBpZiAkYWZ0ZXJSZWN1cnNp
b247CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgJiRyZWN1cnNlKCRpbnRlcmZhY2UpOworICAg
ICYkcmVjdXJzZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlKTsKIH0KIAogc3ViIEZpbmRTdXBlck1l
dGhvZApAQCAtMjM4LDYgKzIzOSw3IEBAIHN1YiBJRExGaWxlRm9ySW50ZXJmYWNlCiBzdWIgUGFy
c2VJbnRlcmZhY2UKIHsKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJG91dGVySW50
ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKIAogICAgIHJl
dHVybiB1bmRlZiBpZiAkaW50ZXJmYWNlTmFtZSBlcSAnT2JqZWN0JzsKQEAgLTI0OCw3ICsyNTAs
NyBAQCBzdWIgUGFyc2VJbnRlcmZhY2UKIAogICAgICMgU3RlcCAjMTogRmluZCB0aGUgSURMIGZp
bGUgYXNzb2NpYXRlZCB3aXRoICdpbnRlcmZhY2UnCiAgICAgbXkgJGZpbGVuYW1lID0gJG9iamVj
dC0+SURMRmlsZUZvckludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSkKLSAgICAgICAgb3IgZGllKCJD
b3VsZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5hbWVcIiFc
biIpOworICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBmaWxlIGZvciBpbnRlcmZh
Y2UgXCIkaW50ZXJmYWNlTmFtZVwiLCByZWFjaGFibGUgZnJvbSBcIiIgLiAkb3V0ZXJJbnRlcmZh
Y2UtPm5hbWUgLiAiXCIhXG4iKTsKIAogICAgIHByaW50ICIgIHwgIHw+ICBQYXJzaW5nIHBhcmVu
dCBJREwgXCIkZmlsZW5hbWVcIiBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5hbWVcIlxuIiBp
ZiAkdmVyYm9zZTsKIApAQCAtMjc3LDYgKzI3OSwxMCBAQCBzdWIgU2tpcEluY2x1ZGVIZWFkZXIK
IAogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdOdW1iZXIuaCBkb2VzIG5vdCBleGlzdC4KICAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICAKKyAgICAjIFR5cGVkIGFycmF5
cyBhbHJlYWR5IGluY2x1ZGVkIGJ5IEpTRE9NQmluZGluZy5oLgorICAgIHJldHVybiAxIGlmICRv
YmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOworICAgIAogICAgIHJldHVybiAwOwogfQog
CkBAIC0zNjgsNyArMzc0LDcgQEAgc3ViIElzVHlwZWRBcnJheVR5cGUKICAgICByZXR1cm4gMSBp
ZiAoKCR0eXBlIGVxICJBcnJheUJ1ZmZlciIpIG9yICgkdHlwZSBlcSAiQXJyYXlCdWZmZXJWaWV3
IikpOwogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIlVpbnQ4QXJyYXkiKSBvciAoJHR5cGUg
ZXEgIlVpbnQ4Q2xhbXBlZEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MTZBcnJheSIpIG9yICgk
dHlwZSBlcSAiVWludDMyQXJyYXkiKSk7CiAgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiSW50
OEFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQzMkFy
cmF5IikpOwotICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgk
dHlwZSBlcSAiRmxvYXQ2NEFycmF5IikpOworICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkZs
b2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5Iikgb3IgKCR0eXBlIGVxICJE
YXRhVmlldyIpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjA5LDYgKzYxNSw3IEBAIHN1YiBJ
c1dyYXBwZXJUeXBlCiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+R2V0U2VxdWVuY2VUeXBlKCR0
eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKICAgICBy
ZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAwIGlm
ICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICR3ZWJD
b3JlVHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJhbnkiOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBA
QCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgbXkgJGluY2x1ZGVzUmVmID0gc2hpZnQ7CiAK
ICAgICByZXR1cm4gaWYgU2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwotCisgICAgCiAgICAgIyBX
aGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVv
cmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KICAgICBpZiAo
JHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKQEAgLTIyNSw4ICsyMjUsNiBAQCBzdWIgQWRk
SW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCRpc0NhbGxiYWNrICYmICRjb2RlR2VuZXJh
dG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkgewogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlMk
e3R5cGV9LmgifSA9IDE7Ci0gICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJh
eVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICRpbmNsdWRlc1JlZi0+eyI8cnVudGltZS8ke3R5cGV9
Lmg+In0gPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUg
c2FtZSBuYW1lZCBmaWxlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyIke3R5cGV9LmgifSA9IDE7
CkBAIC02ODIsMTEgKzY4MCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgIGlm
ICgkaGFzUGFyZW50ICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QifSkgewotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlw
ZWRBcnJheVR5cGUoJGludGVyZmFjZU5hbWUpKSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5jbHVk
ZXN7IjxydW50aW1lLyRpbnRlcmZhY2VOYW1lLmg+In0gPSAxOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwotICAg
ICAgICB9CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsK
ICAgICB9CiAgICAgCiAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU09iamVjdC5oPiJ9
ID0gMTsKQEAgLTk2NSwyMiArOTU5LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7CiAgICAgfQogCi0gICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5cGUgbmUgIkFy
cmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlciIpKSB7Ci0gICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6VHlwZWRBcnJh
eVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjoiKTsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQ4IikgaWYgJGltcGxUeXBlIGVxICJJbnQ4QXJyYXki
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDE2IikgaWYgJGlt
cGxUeXBlIGVxICJJbnQxNkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5
cGVkQXJyYXlJbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MzJBcnJheSI7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDgiKSBpZiAkaW1wbFR5cGUgZXEgIlVp
bnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQ4
Q2xhbXBlZCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhDbGFtcGVkQXJyYXkiOwotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQxNiIpIGlmICRpbXBsVHlwZSBlcSAi
VWludDE2QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVp
bnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0MzIiKSBpZiAkaW1wbFR5cGUgZXEgIkZsb2F0MzJB
cnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5RmxvYXQ2NCIp
IGlmICRpbXBsVHlwZSBlcSAiRmxvYXQ2NEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIjtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGludHB0cl90
IG1fc3RvcmFnZUxlbmd0aDtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHZvaWQqIG1fc3RvcmFnZTtcbiIpOwotICAgIH0KLQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJwcm90ZWN0ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xODY5LDEyICsxODQ3LDYgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NO
YW1lfTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTtcbiIpOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRB
cnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3Iikg
YW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJHtjbGFzc05h
bWV9OjppbmZvKCksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9C
SkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNj
cmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIG1fc3RvcmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0
aCgpO1xuIik7Ci0gICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNT
RVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
fVxuXG4iKTsKICAgICB9CkBAIC0yMzc0LDcgKzIzNDYsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJh
dG9yLT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0
dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1
bWVudHMsICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZSkgYW5kIG5vdCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkFycmF5
QnVmZmVyIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlLmdldCgpIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVt
ZW50ZWRCeSJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkg
JGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJJbXBsZW1lbnRlZEJ5In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwpAQCAtMjUyNiwx
MyArMjUwMiw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
aWYgKCRpc0N1c3RvbSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBs
ZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAi
c2V0IiBhbmQgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0V2ViR0xB
cnJheUhlbHBlcjwkaW1wbFR5cGUsICR2aWV3VHlwZT4oZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgp
KSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbFR5
cGUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW1wbC0+aXNSZWFk
T25seSgpKSB7XG4iKTsKQEAgLTMwODcsNyArMzA1Niw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRl
cnNDaGVjawogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCRhcmdUeXBl
IGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIi
IHx8ICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXJnVHlwZSkgYW5kIG5vdCAk
YXJnVHlwZSBlcSAiQXJyYXlCdWZmZXIiKSkgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRz
LCAiJG5hbWUuZ2V0KCkiOwogICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdU
eXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xp
c3QkLykgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5hbWUtPnByb3BlcnR5UmVm
ZXJlbmNlKCkiOwpAQCAtMzM2OSw2ICszMzM4LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICBt
eSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJP
ZmYoJHR5cGUpOwogICAgIHJldHVybiAiJHtzdmdOYXRpdmVUeXBlfSoiIGlmICRzdmdOYXRpdmVU
eXBlOwogICAgIHJldHVybiAiUmVmUHRyPERPTVN0cmluZ0xpc3Q+IiBpZiAkdHlwZSBlcSAiRE9N
U3RyaW5nTGlzdCI7CisgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlmICRjb2RlR2VuZXJh
dG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSBhbmQgbm90ICR0eXBlIGVxICJBcnJheUJ1ZmZl
ciI7CiAgICAgcmV0dXJuICRuYXRpdmVUeXBleyR0eXBlfSBpZiBleGlzdHMgJG5hdGl2ZVR5cGV7
JHR5cGV9OwogCiAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5
cGUoJHR5cGUpOwpAQCAtMzUwOCw2ICszNDc4LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NU3RyaW5nTGlzdC5oIiwgJGNvbmRpdGlvbmFs
KTsKICAgICAgICAgcmV0dXJuICJ0b0RPTVN0cmluZ0xpc3QoZXhlYywgJHZhbHVlKSI7CiAgICAg
fQorICAgIAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkp
IHsKKyAgICAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOworICAgIH0KIAogICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJIVE1MT3B0aW9uRWxlbWVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlw
ZSBlcSAiSFRNTE9wdGlvbkVsZW1lbnQiOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFdmVudC5o
IiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZlbnQiOwpAQCAtMzU3Nyw3ICszNTUxLDcg
QEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRp
bWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KLQorICAgIAogICAgIG15ICRnbG9iYWxP
YmplY3Q7CiAgICAgaWYgKCR0aGlzVmFsdWUpIHsKICAgICAgICAgJGdsb2JhbE9iamVjdCA9ICIk
dGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSI7CkBAIC0zNjE4LDE0ICszNTkyLDEyIEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlIiBvciAkdHlwZSBlcSAiYW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIiR2
YWx1ZSA/ICR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIDApIDoganNOdWxsKCkiOworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVk
QXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICAjIERvIG5vdGhpbmcgLSBhbGwgaGVhZGVycyBh
cmUgYWxyZWFkeSBpbmNsdWRlZC4KICAgICB9IGVsc2UgewogICAgICAgICAjIERlZmF1bHQsIGlu
Y2x1ZGUgaGVhZGVyIHdpdGggc2FtZSBuYW1lLgogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5J
c1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IjxydW50aW1lLyR0eXBlLmg+IiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3It
PlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVH
ZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfQorICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2Vu
ZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICR2
YWx1ZSBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpOwpAQCAtNDEw
OCwzMCArNDA4MCw2IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5l
cmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7
Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIn0g
PSAxOwotICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNv
bnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PCR7
Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRpbnRlcmZhY2VOYW1lPiBhcnJheSA9
IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwgJHZpZXdUeXBlPihleGVj
KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghYXJyYXku
Z2V0KCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgLy8g
RXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLlxuIik7Ci0gICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmpl
Y3QoKSwgYXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCAke2ludGVyZmFjZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1lfT4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9
XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlcbiIpOwotICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpbXBsKCktPnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhl
YykpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsK
LSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRp
bnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29u
c3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICAg
ICBteSAkb3ZlcmxvYWRlZEluZGV4U3RyaW5nID0gIiI7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0
aW9uLT57b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ID4g
MCkgewpAQCAtNDIxMCw3ICs0MTU4LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJN
ZXRob2RzCiAKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVk
Q29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05h
bWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMDsKLSAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAi
RXZlbnQiKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZh
Y2UsICJUeXBlZEFycmF5IikpIHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0
b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewogICAgICAgICAkbGVhc3RDb25zdHJ1
Y3Rvckxlbmd0aCA9IDE7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgbXkgQGNvbnN0cnVjdG9ycyA9IEB7JGlu
dGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2Vi
S2l0QmxvYkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
V2ViS2l0QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyAr
OTgsNyBAQCB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXIqIGFyCiAgICAgYXBw
ZW5kQnl0ZXNEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpOwogfQogCi12b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXJWaWV3KiBhcnJh
eUJ1ZmZlclZpZXcpCit2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldykKIHsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0
b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5CbG9iLmNvbnN0cnVjdG9yLkFycmF5QnVmZmVyT3JW
aWV3IiwgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJWaWV3LCBCbG9iQ29uc3RydWN0b3JBcnJh
eUJ1ZmZlck9yVmlld01heCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0
QmxvYkJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktp
dEJsb2JCdWlsZGVyLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcm
IGVuZGluZyk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgdm9pZCBhcHBlbmQoSlNDOjpBcnJheUJ1
ZmZlciopOwotICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7CisgICAgdm9p
ZCBhcHBlbmQoUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4pOwogI2VuZGlmCiAKICAg
ICBQYXNzUmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCShyZXZpc2lv
biAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBH
bG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBHZW5lcmF0ZUlz
UmVhY2hhYmxlPUltcGwsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IodW5zaWduZWQgbG9uZyBsZW5n
dGgpLAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9
SlNDLAotICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKLV0gaW50ZXJmYWNlIEFycmF5QnVm
ZmVyIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoOwot
ICAgIEFycmF5QnVmZmVyIHNsaWNlKGxvbmcgYmVnaW4sIG9wdGlvbmFsIGxvbmcgZW5kKTsKLX07
Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3
LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJy
YXlCdWZmZXJWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotWwotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEFycmF5QnVmZmVyIGJ1ZmZlcjsKLSAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0OwotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0K
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAgIGNoYXIgYnl0ZXNbc2l6
ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERh
dGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2Yo
dWludDhfdCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRh
Vmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVP
ZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ2hl
Y2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7
Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0
ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRN
YXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBpZiAoY2hlY2tlZE1heC5o
YXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFW
aWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQotCi1EYXRhVmlldzo6RGF0
YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0
ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQotewotfQotCi1zdGF0aWMg
Ym9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19F
TkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0
bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNo
YXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRl
bXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAg
IHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0
cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAg
KyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBw
KQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsg
Nik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBw
ICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBz
aXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0
ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7
Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHMo
dmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdl
PFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRh
dGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0
dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZh
bHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1f
YmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5l
ZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2
YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0
RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7
Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBp
dCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1w
VmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRl
cywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFy
Kj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihU
KSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVp
bnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6Omdl
dEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMp
OwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90
IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZs
b2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQot
Ci12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lk
IERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZf
dD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFW
aWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6
c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0
ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNl
dCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2
YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17
Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwot
fQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHJldmlzaW9u
IDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFWaWV3X2gKLSNk
ZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5
QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBj
cmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0g
ICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBp
bnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFs
c2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMy
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWlu
dDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7
IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90
IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQg
c2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQs
IHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBl
Yyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldElu
dDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQg
c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVl
LCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
LSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlw
ZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7Ci0g
ICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi1wcml2YXRl
OgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyBy
ZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihU
KSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdl
dERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRh
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19OwotCi0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIEN1c3RvbUNvbnN0cnVjdG9yKEFycmF5QnVmZmVyIGJ1ZmZlciwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVM
ZW5ndGgpLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcwotXSBp
bnRlcmZhY2UgRGF0YVZpZXcgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIC8vIEFsbCB0aGVzZSBt
ZXRob2RzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IHdvdWxkIHJlYWQgb3Igd3JpdGUgYmV5
b25kIHRoZSBlbmQgb2YgdGhlIHZpZXcuCi0KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBieXRlIGdl
dEludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBv
Y3RldCBnZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBnZXRJbnQxNih1bnNpZ25lZCBsb25n
IGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIHNob3J0IGdldFVpbnQxNih1
bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGxvbmcgZ2V0SW50MzIo
dW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25n
IGdldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0
dGxlRW5kaWFuKTsKLQotICAgIC8vIFVzZSBjdXN0b20gY29kZSB0byBoYW5kbGUgTmFOIGNhc2Uu
Ci0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGZsb2F0
IGdldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxp
dHRsZUVuZGlhbik7Ci0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9u
YWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBz
ZXRJbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgYnl0ZSB2YWx1ZSk7Ci0gICAgW1JhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9jdGV0
IHZhbHVlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBzZXRJbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBvcHRpb25h
bCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIHNob3J0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDMyKHVuc2lnbmVk
IGxvbmcgYnl0ZU9mZnNldCwgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRp
YW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRV
aW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbHVlLCBvcHRp
b25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBm
bG9hdCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlh
bik7Ci19OwotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJh
eS5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zs
b2F0MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21J
bmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50
cywKLSAgICBUeXBlZEFycmF5PWZsb2F0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpT
QwotXSBpbnRlcmZhY2UgRmxvYXQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25z
dCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDMyQXJyYXkgc3ViYXJyYXko
W0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGZsb2F0ICh1bnNp
Z25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0MzJBcnJheSBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNl
PGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBz
ZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJh
eS5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1b
Ci0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29u
c3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0g
ICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAg
Q3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJy
YXk9ZG91YmxlLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2Ug
RmxvYXQ2NEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25n
IEJZVEVTX1BFUl9FTEVNRU5UID0gODsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDY0QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZp
bmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGRvdWJsZSAodW5zaWduZWQgbG9uZyBpbmRl
eCk7Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDY0QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQw
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250
ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRl
PVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9O
YXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0
LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaWduZWQgY2hhciwK
LSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDhBcnJheSA6
IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxF
TUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
Ci0gICAgSW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9u
ZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQot
ICAgIGdldHRlciBieXRlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0
KEludDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8v
IHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRv
dyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXks
Ci0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3Qs
Ci0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90
Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaG9ydCwKLSAgICBJbXBsZW1lbnRhdGlv
bk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcg
ewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDE2QXJyYXkg
c3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBzaG9y
dCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQxNkFycmF5IGFy
cmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2Vx
dWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2
b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJy
YXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJy
YXkuaWRsCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9J
bnQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0g
ICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0
ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMs
Ci0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5
cGVkQXJyYXk9aW50LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZh
Y2UgSW50MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9u
ZyBCWVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmlu
ZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGxvbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwot
Ci0gICAgLy8gdm9pZCBzZXQoSW50MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9u
ZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25h
bCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9
RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlw
ZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2
ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0g
ICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0g
ICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OEFycmF5IDog
QXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVN
RU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsK
LSAgICBVaW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9u
ZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25l
ZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4QXJyYXkgYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25n
PiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7
Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBl
ZEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21J
bmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50
cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OENsYW1wZWRBcnJheSA6IFVpbnQ4QXJyYXkgewot
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0
aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBsb25nIGluZGV4
KTsKLQotICAgIC8vIEZJWE1FOiBNaXNzaW5nIG90aGVyIHNldHRlcnMhCi0gICAgLy8gdm9pZCBz
ZXQoVWludDhDbGFtcGVkQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdp
bmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJy
YXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERv
Tm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBzaG9ydCwKLSAgICBJ
bXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQxNkFycmF5IDogQXJy
YXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5U
ID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAg
ICBVaW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
c3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25lZCBzaG9ydCAo
dW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MTZBcnJheSBhcnJh
eSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVl
bmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9p
ZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJh
eS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJy
YXkuaWRsCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAot
ICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0
dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVz
LAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBU
eXBlZEFycmF5PXVuc2lnbmVkIGludCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MK
LV0gaW50ZXJmYWNlIFVpbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1
bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50MzJBcnJheSBzdWJhcnJheShbRGVm
YXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsK
LQotICAgIGdldHRlciB1bnNpZ25lZCBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAg
IC8vIHZvaWQgc2V0KFVpbnQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVu
c2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
cmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1
ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAK
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9VaW50MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KQEAgLTM0MTUsNyArMzQxNiw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAvLyBWYWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAocGl4
ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgpIHsKKyAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTUxNTYsNyArNTE1Nyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEYKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBB
cnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OCkgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBV
TlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTE2NCwxMyArNTE2NSwxMyBAQCBi
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2KSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
dHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAot
ICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxv
YXQzMikgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQz
MikgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZl
clZpZXcgbm90IEZsb2F0MzJBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0
MSw3IEBAIG5hbWVzcGFjZSB7CiAKIGJvb2wgaXNJbnRlZ2VyQXJyYXkoQXJyYXlCdWZmZXJWaWV3
KiBhcnJheSkKIHsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHR5cGUgPSBhcnJheS0+
Z2V0VHlwZSgpOwotICAgIHJldHVybiB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDgK
LSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OAotICAgICAg
ICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZAotICAgICAg
ICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2Ci0gICAgICAgICAgIHx8
IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2Ci0gICAgICAgICAgIHx8IHR5cGUg
PT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzIKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVVaW50MzI7CisgICAgcmV0dXJuIEpTQzo6aXNJbnQoYXJyYXktPmdl
dFR5cGUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24g
MTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNiBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkRhdGFW
aWV3LmgiCiAjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbXBvcnQgIkZs
b2F0Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC00Nyw2ICs0
Niw5IEBACiAjaW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIldl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9y
dCA8cnVudGltZS9EYXRhVmlldy5oPgorI2ltcG9ydCA8cnVudGltZS9PcGVyYXRpb25zLmg+Cisj
aW1wb3J0IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW1wb3J0IDxydW50aW1lL1Vp
bnQxNkFycmF5Lmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CiAjaW1wb3J0IDxy
dW50aW1lL1VpbnQ4QXJyYXkuaD4KQEAgLTkyMyw4ICs5MjUsOCBAQCBib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAgIC8vIFs0IGJ5dGVzOiBrZXlVUkkgc2l6
ZV0sIFtrZXlVUkkgc2l6ZSBieXRlczoga2V5VVJJXQogICAgICAgICB1bnNpZ25lZCBrZXlVUklT
aXplID0ga2V5VVJJLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoNCArIGtleVVS
SVNpemUsIDEpOwotICAgICAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFW
aWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpOwotICAgICAgICBpbml0RGF0YVZpZXctPnNldFVpbnQzMigwLCBrZXlVUklTaXplLCB0cnVl
LCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXRE
YXRhVmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERh
dGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGluaXREYXRhVmlldy0+c2V0PHVpbnQz
Ml90PigwLCBrZXlVUklTaXplLCB0cnVlKTsKIAogICAgICAgICBSZWZQdHI8VWludDE2QXJyYXk+
IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgNCwga2V5
VVJJLmxlbmd0aCgpKTsKICAgICAgICAga2V5VVJJQXJyYXktPnNldFJhbmdlKGtleVVSSS5jaGFy
YWN0ZXJzKCksIGtleVVSSS5sZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBjaGFyKSwgMCk7CkBA
IC0xMjA0LDEzICsxMjA2LDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gaW5pdERhdGEt
PmJ1ZmZlcigpOwogCiAgICAgLy8gVXNlIGEgRGF0YVZpZXcgdG8gcmVhZCB1aW50MzIgdmFsdWVz
IGZyb20gdGhlIGJ1ZmZlciwgYXMgVWludDMyQXJyYXkgcmVxdWlyZXMgdGhlIHJlYWRzIGJlIGFs
aWduZWQgb24gNC1ieXRlIGJvdW5kYXJpZXMuIAotICAgIFJlZlB0cjxEYXRhVmlldz4gaW5pdERh
dGFWaWV3ID0gRGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZm
ZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXREYXRhVmll
dyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZm
ZXItPmJ5dGVMZW5ndGgoKSk7CiAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBib29sIHN0YXR1cyA9IHRydWU7CiAKLSAgICB1aW50MzJfdCBr
ZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsK
KyAgICB1aW50MzJfdCBrZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50MzJfdD4o
b2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAoZWMgfHwg
b2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3Rh
dHVzIHx8IG9mZnNldCArIGtleVVSSUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlVUklBcnJheSA9
IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5VVJJTGVuZ3Ro
KTsKQEAgLTEyMjAsOSArMTIyMiw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzoKICAgICBrZXlVUkkgPSBTdHJpbmcoa2V5VVJJQXJyYXktPmRhdGEoKSwga2V5VVJJ
TGVuZ3RoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zmc2V0ICs9IGtleVVSSUxl
bmd0aDsKIAotICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50
MzIob2Zmc2V0LCB0cnVlLCBlYyk7CisgICAgdWludDMyX3Qga2V5SURMZW5ndGggPSBpbml0RGF0
YVZpZXctPmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQg
Kz0gNDsKLSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0YS0+bGVu
Z3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0
YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxVaW50MTZB
cnJheT4ga2V5SURBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9m
ZnNldCwga2V5SURMZW5ndGgpOwpAQCAtMTIzMiw5ICsxMjM0LDkgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleUlEID0gU3RyaW5nKGtleUlEQXJyYXkt
PmRhdGEoKSwga2V5SURMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgICBvZmZz
ZXQgKz0ga2V5SURMZW5ndGg7CiAKLSAgICB1aW50MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9IGlu
aXREYXRhVmlldy0+Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGNl
cnRpZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1
ZSwgJnN0YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGNl
cnRpZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8
IG9mZnNldCArIGNlcnRpZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjZXJ0aWZpY2F0ZSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShp
bml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBjZXJ0aWZpY2F0ZUxlbmd0aCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3Rv
bUZpbHRlci5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEy
ICszNyw5IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8cnVudGltZS9VaW50OENs
YW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXN0b21GaWx0ZXJSZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAog
I2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAK
KyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVk
QXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJy
YXkuaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrQ0RNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5j
bHVkZSAiQ0RNLmgiCiAjaW5jbHVkZSAiTWVkaWFLZXlFcnJvci5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
ICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDgtMTIgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJl
IHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBZb3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEpTVWludDhBcnJheSBhbnltb3Jl
IGlmIHlvdSBqdXN0IHdhbnQgdG8KKyAgICAgICAgdW53cmFwIG9uZTsgSlNET01CaW5kaW5nIGdp
dmVzIHlvdSBhbGwgb2YgdGhlIHRoaW5ncyB5b3UgbmVlZC4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorCiAyMDEzLTA4LTEyICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQgYW4gb2ZmLWJ5LShz
aXplb2YoY2hhciopIC0gMSkgYnVnLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlz
aW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvblBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9K
U0RPTVdpbmRvdy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNOb3RpZmljYXRpb24uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0pTVWludDhBcnJheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QcmludENv
bnRleHQuaD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0
cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zl
ci1vZi1jb250cm9sLmpzCShyZXZpc2lvbiAxNTQwMzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQCB2YXIgYmFzaWNCdWZmZXJUeXBlcyA9
CiAgICAgWyJVaW50MzIiLCBVaW50MzJBcnJheSwgNF0sCiAgICAgWyJJbnQ4IiwgSW50OEFycmF5
LCAxXSwKICAgICBbIlVpbnQ4IiwgVWludDhBcnJheSwgMV0sCisgICAgWyJVaW50OENsYW1wZWQi
LCBVaW50OENsYW1wZWRBcnJheSwgMV0sCiAgICAgWyJJbnQxNiIsIEludDE2QXJyYXksIDJdLAog
ICAgIFsiVWludDE2IiwgVWludDE2QXJyYXksIDJdLAogICAgIFsiRmxvYXQzMiIsIEZsb2F0MzJB
cnJheSwgNF0sCkBAIC0yMDAsNyArMjAxLDcgQEAgZnVuY3Rpb24gY2hlY2tWaWV3KHRlc3ROYW1l
LCB0eXBlZEFycmF5VAogICAgIH0KICAgICBpZiAodmlldy5idWZmZXIuYnl0ZUxlbmd0aCAhPT0g
YXJyYXlTaXplIHx8CiAgICAgICAgICghKHZpZXcgaW5zdGFuY2VvZiBEYXRhVmlldykgJiYgdmll
dy5sZW5ndGggIT09IGFycmF5RWZmZWN0aXZlU2l6ZSAvIHZpZXcuQllURVNfUEVSX0VMRU1FTlQp
KSB7Ci0gICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB0aGUgd3Jvbmcg
bGVuZ3RoICgiICsgdmlldy5sZW5ndGggKyAiKSIpOworICAgICAgICB0ZXN0RmFpbGVkKHRlc3RO
YW1lICsgIjogdmlldyBoYXMgdGhlIHdyb25nIGxlbmd0aCAoIiArIHZpZXcubGVuZ3RoICsgIiBp
bnN0ZWFkIG9mICIgKyBhcnJheUVmZmVjdGl2ZVNpemUgKyAiIC8gIiArIHZpZXcuQllURVNfUEVS
X0VMRU1FTlQgKyAiKSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICh2
aWV3LmJ5dGVPZmZzZXQgIT09IGFycmF5T2Zmc2V0KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208703</attachid>
            <date>2013-08-14 00:31:17 -0700</date>
            <delta_ts>2013-08-14 13:52:41 -0700</delta_ts>
            <desc>and now, passing more tests than ever!</desc>
            <filename>bug-119064-20130814003117.patch</filename>
            <type>text/plain</type>
            <size>625629</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyMiBA
QAorMjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFR5cGVkIGFycmF5cyB3ZXJlIHByZXZp
b3VzbHkgZGVmaWNpZW50IGluIHNldmVyYWwgbWFqb3Igd2F5czoKKyAgICAgICAgCisgICAgICAg
IC0gVGhleSB3ZXJlIGRlZmluZWQgc2VwYXJhdGVseSBpbiBXZWJDb3JlIGFuZCBpbiB0aGUganNj
IHNoZWxsLiBUaGUgdHdvCisgICAgICAgICAgaW1wbGVtZW50YXRpb25zIHdlcmUgZGlmZmVyZW50
LCBhbmQgdGhlIGpzYyBzaGVsbCBvbmUgd2FzIGJhc2ljYWxseSB3cm9uZy4KKyAgICAgICAgICBU
aGUgV2ViQ29yZSBvbmUgd2FzIHF1aXRlIGF3ZnVsLCBhbHNvLgorICAgICAgICAKKyAgICAgICAg
LSBUeXBlZCBhcnJheXMgd2VyZSBub3QgdmlzaWJsZSB0byB0aGUgSklUIGV4Y2VwdCB0aHJvdWdo
IHNvbWUgd2VpcmQgaG9va3MuCisgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBKSVQgY291bGQg
bm90IGFzayAid2hhdCBpcyB0aGUgU3RydWN0dXJlIHRoYXQgdGhpcyB0eXBlZAorICAgICAgICAg
IGFycmF5IHdvdWxkIGhhdmUgaWYgSSBqdXN0IGFsbG9jYXRlZCBpdCBmcm9tIHRoaXMgZ2xvYmFs
IG9iamVjdCIuIEFsc28sCisgICAgICAgICAgaXQgd2FzIGRpZmZpY3VsdCB0byB3aXJlIGFueSBv
ZiB0aGUgdHlwZWQgYXJyYXkgaW50cmluc2ljcywgYmVjYXVzZSBtb3N0CisgICAgICAgICAgb2Yg
dGhlIGZ1bmN0aW9uYWxpdHkgd2Fzbid0IHZpc2libGUgYW55d2hlcmUgaW4gSlNDLgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheSBhbGxvY2F0aW9uIHdhcyBicmFpbi1kZWFkLiBBbGxv
Y2F0aW5nIGEgdHlwZWQgYXJyYXkgaW52b2x2ZWQKKyAgICAgICAgICB0d28gSlMgb2JqZWN0cywg
dHdvIEdDIHdlYWsgaGFuZGxlcywgYW5kIHRocmVlIG1hbGxvYyBhbGxvY2F0aW9ucy4KKyAgICAg
ICAgCisgICAgICAgIC0gTmV1dGVyaW5nLiBJdCBpbnZvbHZlZCBrZWVwaW5nIHRhYnMgb24gYWxs
IG5hdGl2ZSB2aWV3cyBidXQgbm90IHRoZSB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGV2ZW4g
dGhvdWdoIHRoZSBuYXRpdmUgdmlld3MgY2FuIGF1dG9uZXV0ZXIganVzdCBieSBhc2tpbmcgdGhl
CisgICAgICAgICAgYnVmZmVyIGlmIGl0IHdhcyBuZXV0ZXJlZCBhbnl0aW1lIHlvdSB0b3VjaCB0
aGVtOyB3aGlsZSB0aGUgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzIGFyZSB0aGUgb25lcyB0
aGF0IHlvdSByZWFsbHkgd2FudCB0byByZWFjaCBvdXQgdG8uCisgICAgICAgIAorICAgICAgICAt
IENvbW1vbiBjYXNlLWluZy4gTW9zdCB0eXBlZCBhcnJheXMgaGF2ZSBvbmUgYnVmZmVyIGFuZCBv
bmUgdmlldywgYW5kCisgICAgICAgICAgdXN1YWxseSBub2JvZHkgdG91Y2hlcyB0aGUgYnVmZmVy
LiBZZXQgd2UgY3JlYXRlZCBhbGwgb2YgdGhhdCBzdHVmZgorICAgICAgICAgIGFueXdheSwgdXNp
bmcgZGF0YSBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGhhZCBh
IGxvdAorICAgICAgICAgIG9mIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgLSBTZW1hbnRpYyBn
b29mcy4gVHlwZWQgYXJyYXlzIHNob3VsZCwgaW4gdGhlIGZ1dHVyZSwgYmVoYXZlIGxpa2UgRVMK
KyAgICAgICAgICBmZWF0dXJlcyByYXRoZXIgdGhhbiBET00gZmVhdHVyZXMsIGZvciBleGFtcGxl
IHdoZW4gaXQgY29tZXMgdG8gZXhjZXB0aW9ucy4KKyAgICAgICAgICBGaXJlZm94IGFscmVhZHkg
ZG9lcyB0aGlzIGFuZCBJIGFncmVlIHdpdGggdGhlbS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
cGF0Y2ggY2xlYW5zZXMgb3VyIGNvZGViYXNlIG9mIHRoZXNlIHNpbnM6CisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyBhcmUgYWxtb3N0IGVudGlyZWx5IGRlZmluZWQgaW4gSlNDLiBP
bmx5IHRoZSBsaWZlY3ljbGUKKyAgICAgICAgICBtYW5hZ2VtZW50IG9mIG5hdGl2ZSByZWZlcmVu
Y2VzIHRvIGJ1ZmZlcnMgaXMgbGVmdCB0byBXZWJDb3JlLgorICAgICAgICAKKyAgICAgICAgLSBB
bGxvY2F0aW5nIGEgdHlwZWQgYXJyYXkgcmVxdWlyZXMgZWl0aGVyIHR3byBHQyBhbGxvY2F0aW9u
cyAoYSBjZWxsIGFuZCBhCisgICAgICAgICAgY29waWVkIHN0b3JhZ2UgdmVjdG9yKSBvciBvbmUg
R0MgYWxsb2NhdGlvbiwgYSBtYWxsb2MgYWxsb2NhdGlvbiwgYW5kIGEKKyAgICAgICAgICB3ZWFr
IGhhbmRsZSAoYSBjZWxsIGFuZCBhIG1hbGxvYydkIHN0b3JhZ2UgdmVjdG9yLCBwbHVzIGEgZmlu
YWxpemVyIGZvciB0aGUKKyAgICAgICAgICBsYXR0ZXIpLiBUaGUgbGF0dGVyIGlzIG9ubHkgdXNl
ZCBmb3Igb3ZlcnNpemUgYXJyYXlzLiBSZW1lbWJlciB0aGF0IGJlZm9yZQorICAgICAgICAgIGl0
IHdhcyA3IGFsbG9jYXRpb25zIG5vIG1hdHRlciB3aGF0LgorICAgICAgICAKKyAgICAgICAgLSBU
eXBlZCBhcnJheXMgcmVxdWlyZSBqdXN0IDQgd29yZHMgb2Ygb3ZlcmhlYWQ6IFN0cnVjdHVyZSos
IEJ1dHRlcmZseSosCisgICAgICAgICAgbW9kZS9sZW5ndGgsIHZvaWQqIHZlY3Rvci4gQmVmb3Jl
IGl0IHdhcyBhIGxvdCBtb3JlIHRoYW4gdGhhdCAtIHJlbWVtYmVyLAorICAgICAgICAgIHRoZXJl
IHdlcmUgZml2ZSBhZGRpdGlvbmFsIG9iamVjdHMgdGhhdCBkaWQgYWJzb2x1dGVseSBub3RoaW5n
IGZvciBhbnlib2R5LgorICAgICAgICAKKyAgICAgICAgLSBOYXRpdmUgdmlld3MgYXJlbid0IHRy
YWNrZWQgYnkgdGhlIGJ1ZmZlciwgb3IgYnkgdGhlIHdyYXBwZXJzLiBUaGV5IGFyZQorICAgICAg
ICAgIHRyYW5zaWVudC4gSW4gdGhlIGZ1dHVyZSB3ZSdsbCBwcm9iYWJseSBzd2l0Y2ggdG8gbm90
IGV2ZW4gaGF2aW5nIHRoZW0gYmUKKyAgICAgICAgICBtYWxsb2MnZC4KKyAgICAgICAgCisgICAg
ICAgIC0gTmF0aXZlIGFycmF5IGJ1ZmZlcnMgaGF2ZSBhbiBlZmZpY2llbnQgd2F5IG9mIHRyYWNr
aW5nIGFsbCBvZiB0aGVpciBKUyB2aWV3CisgICAgICAgICAgd3JhcHBlcnMsIGJvdGggZm9yIG5l
dXRlcmluZywgYW5kIGZvciBsaWZlY3ljbGUgbWFuYWdlbWVudC4gVGhlIEdDCisgICAgICAgICAg
c3BlY2lhbC1jYXNlcyBuYXRpdmUgYXJyYXkgYnVmZmVycy4gVGhpcyBzYXZlcyBhIGJ1bmNoIG9m
IGdyaWVmOyBmb3IgZXhhbXBsZQorICAgICAgICAgIGl0IG1lYW5zIHRoYXQgYSBKUyB2aWV3IHdy
YXBwZXIgY2FuIHJlZmVyIHRvIGl0cyBidWZmZXIgdmlhIHRoZSBidXR0ZXJmbHksCisgICAgICAg
ICAgd2hpY2ggd291bGQgYmUgZGVhZCBieSB0aGUgdGltZSB3ZSB3ZW50IHRvIGZpbmFsaXplLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhID44eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhh
dCBhbGxvY2F0ZSBhIGxvdCBvZiBzbWFsbCB0eXBlZCBhcnJheXMsCisgICAgICAgIGFuZCBhID42
eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxvY2F0ZSBhIGxvdCBvZiBsYXJnZSBvbmVz
LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKU0NUeXBlZEFy
cmF5U3R1YnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5VmFsSW5mby5oOgorICAgICAg
ICAoSlNDOjpoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpT
Qzo6aml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVR5
cGVGb3JKSVRBcnJheU1vZGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKToKKyAgICAgICAgKiBk
ZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjp0b1R5cGVkQXJyYXlUeXBl
KToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjp0eXBlZEFycmF5VHlwZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFy
cmF5TGVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogaGVhcC9Db3B5VG9rZW4uaDoKKyAgICAgICAgKiBoZWFwL0RlZmVyR0MuaDoKKyAgICAg
ICAgKEpTQzo6RGVmZXJHQ0ZvckFXaGlsZTo6RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgIChK
U0M6OkRlZmVyR0NGb3JBV2hpbGU6On5EZWZlckdDRm9yQVdoaWxlKToKKyAgICAgICAgKiBoZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHQ0luY29taW5n
UmVmQ291bnRlZDo6R0NJbmNvbWluZ1JlZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpHQ0luY29t
aW5nUmVmQ291bnRlZDo6fkdDSW5jb21pbmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJ
bmNvbWluZ1JlZkNvdW50ZWQ6Om51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKToKKyAgICAgICAg
KEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OmluY29taW5nUmVmZXJlbmNlQXQpOgorICAgICAg
ICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6c2luZ2xldG9uRmxhZyk6CisgICAgICAgIChK
U0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNWZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKEpT
Qzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc0FueUluY29taW5nKToKKyAgICAgICAgKEpTQzo6
R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhhc1NpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5j
b21pbmdSZWZDb3VudGVkOjpzaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVm
Q291bnRlZDo6dmVjdG9yT2ZDZWxscyk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6YWRkSW5jb21pbmdSZWZlcmVu
Y2UpOgorICAgICAgICAoSlNDOjo6OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAg
ICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6OnNpemUpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdDSW5jb21p
bmdSZWZDb3VudGVkU2V0KToKKyAgICAgICAgKEpTQzo6Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQpOgorICAgICAgICAoSlNDOjo6OmFkZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6Ojo6c3dl
ZXApOgorICAgICAgICAoSlNDOjo6OnJlbW92ZUFsbCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3Zl
RGVhZCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRk
UmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZXh0cmFTaXplKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6c2l6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNhcGFjaXR5KToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVy
cmFsRGVwdGgpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZk5lZWRlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSk6
CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0
VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwpOgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6QXJyYXlCdWZmZXI6OnRyYW5zZmVyKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVy
Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAg
KEpTQzo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRlcyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpw
aW4pOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6dW5waW4pOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVm
ZmVyVmlldyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmll
dyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZSk6CisgICAg
ICAgICogcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZm
ZXJWaWV3Ojppc05ldXRlcmVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpidWZm
ZXIpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmJhc2VBZGRyZXNzKToKKyAgICAg
ICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJy
YXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6Y2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVm
ZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0RhdGFWaWV3LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuY3BwLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OndyYXApOgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZp
ZXcuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaC4K
KyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpEYXRh
Vmlldzo6Z2V0VHlwZSk6CisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpnZXQpOgorICAgICAgICAo
SlNDOjpEYXRhVmlldzo6c2V0KToKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0MzJBcnJheS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvRmxvYXQ2NEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6ZGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0
KToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRSYW5nZSk6CisgICAg
ICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVyb1JhbmdlKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp6ZXJvRmlsbCk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldzo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjppdGVtKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91
bmREYXRhKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToK
KyAgICAgICAgKiBydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQu
CisgICAgICAgIChKU0M6Ojo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAg
ICAoSlNDOjo6OnN1YmFycmF5KToKKyAgICAgICAgKEpTQzo6Ojp3cmFwKToKKyAgICAgICAgKiBy
dW50aW1lL0luZGV4aW5nSGVhZGVyLmg6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjph
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBcnJheUJ1ZmZl
cik6CisgICAgICAgICogcnVudGltZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9J
bnQzMkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlcjo6SlNBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjppbXBsKToKKyAgICAgICAgKEpTQzo6dG9BcnJheUJ1ZmZlcik6Cisg
ICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmFycmF5
QnVmZmVyUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90
eXBlOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250
ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkpTQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OnNpemVPZik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpD
b25zdHJ1Y3Rpb25Db250ZXh0OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OnZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpsZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bW9k
ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0
OjpidXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bW9kZSk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpK
U0FycmF5QnVmZmVyVmlldzo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9m
ZnNldE9mTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
TW9kZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVt
b3J5SWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVy
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmltcGwpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmJ5dGVPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNDZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlldzo6SlNEYXRhVmlldyk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpzZXQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3Ojp0
eXBlZEltcGwpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmll
dy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAg
ICAgIChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6Cisg
ICAgICAgIChKU0M6OmdldERhdGEpOgorICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50
MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmll
d1Byb3RvRnVuY0dldFVpbnQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0
RmxvYXQzMik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCk6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCk6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jU2V0SW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y1NldEludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCk6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6
ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3Rv
RnVuY1NldEZsb2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0
NjQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0pTRmxvYXQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNGbG9hdDY0QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlw
ZWRWZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuR2V0
SW5kZXhRdWlja2x5KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNh
blNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc6OmdldEluZGV4UXVpY2tseUFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRv
RG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4
UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5BY2Nl
c3NSYW5nZVF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6
dHlwZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OnRvTmF0aXZlVHlwZWRWaWV3KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yKToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6Omdl
dENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjo6OmdldENhbGxEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3Jl
YXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpT
Qzo6Ojp2YWxpZGF0ZVJhbmdlKToKKyAgICAgICAgKEpTQzo6OjpzZXRXaXRoU3BlY2lmaWNUeXBl
KToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6cHV0QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAoSlNDOjo6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjo6OmNv
cHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjo6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkp
OgorICAgICAgICAoSlNDOjo6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKiBydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTZXQpOgorICAgICAg
ICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheSk6CisgICAgICAg
IChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUpOgorICAgICAgICAoSlND
Ojo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgICog
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
YXJyYXlCdWZmZXJQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6YXJy
YXlCdWZmZXJTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dHlwZWRB
cnJheVN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0ludDE2QXJyYXkuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9KU0ludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0ludDhBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJh
eUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU1VpbnQxNkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50
MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDhBcnJheS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlND
OjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
KToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3Vs
ZEhhdmVJbmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIpOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJ
bnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OkludGVn
cmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkludGVncmFs
VHlwZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFy
cmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFw
dG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0
b0RvdWJsZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvTmF0aXZlKToK
KyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpVaW50
OENsYW1wZWRBZGFwdG9yOjpjbGFtcCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpUeXBlZEFycmF5Q29udHJvbGxlcjo6
VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpUeXBlZEFycmF5Q29udHJvbGxl
cjo6flR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlD
b250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0
b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6Y2xhc3NJbmZvRm9yVHlwZSk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OnRvSW5kZXgpOgorICAgICAgICAoSlNDOjppc1R5cGVkVmlldyk6CisgICAgICAgIChKU0M6
OmVsZW1lbnRTaXplKToKKyAgICAgICAgKEpTQzo6aXNJbnQpOgorICAgICAgICAoSlNDOjppc0Zs
b2F0KToKKyAgICAgICAgKEpTQzo6aXNTaWduZWQpOgorICAgICAgICAoSlNDOjppc0NsYW1wZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9VaW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDMyQXJyYXkuaDoKKyAg
ICAgICAgKiBydW50aW1lL1VpbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpWTSk6CisgICAgICAgIChKU0M6OlZNOjp+Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAxMy0wOC0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEZvbzo6c19pbmZvIHNob3VsZCBiZSBGb286OmluZm8oKSwgc28gdGhhdCB5b3UgY2FuIGNoYW5n
ZSBob3cgdGhlIHNfaW5mbyBpcyBhY3R1YWxseSBsaW5rZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsNyBAQCBhbGwgOiBcCiAgICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBEYXRl
UHJvdG90eXBlLmx1dC5oIFwKICAgICBFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgSlNEYXRh
Vmlld1Byb3RvdHlwZS5sdXQuaCBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAgSlNHbG9i
YWxPYmplY3QubHV0LmggXAogICAgIEtleXdvcmRMb29rdXAuaCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBKU0NUeXBlZEFycmF5U3R1YnNfaAotI2RlZmluZSBKU0NUeXBlZEFy
cmF5U3R1YnNfaAotCi0jaW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiRmxvYXQ2
NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkludDMyQXJyYXku
aCIKLSNpbmNsdWRlICJJbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVj
dC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQzMkFycmF5LmgiCi0j
aW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQ4Q2xhbXBlZEFycmF5LmgiCi0K
LSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLSNkZWZp
bmUgVFlQRURfQVJSQVkobmFtZSwgdHlwZSkgXAotY2xhc3MgSlMjI25hbWUjI0FycmF5IDogcHVi
bGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsgXAotcHVibGljOiBcCi0gICAgdHlwZWRlZiBKU0Rl
c3RydWN0aWJsZU9iamVjdCBCYXNlOyBcCi0gICAgc3RhdGljIEpTIyNuYW1lIyNBcnJheSogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpIFwKLSAgICB7IFwKLSAgICAgICAgSlMj
I25hbWUjI0FycmF5KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTIyNu
YW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFtZSMjQXJyYXkoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24oZ2xvYmFsT2JqZWN0LT52bSgpKTsgXAotICAgICAgICByZXR1cm4gcHRyOyBcCi0gICAgfVwK
LVwKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQg
cHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3Rh
dGljIHZvaWQgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBERUNMQVJFX0lORk87
XAotXAotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpXAotICAgIHtcCi0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTtcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtcCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcCi1cCi0gICAg
c3RhdGljIGNvbnN0IEpTQzo6VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0g
SlNDOjpUeXBlZEFycmF5IyNuYW1lO1wKLSAgICB1aW50MzJfdCBtX3N0b3JhZ2VMZW5ndGg7XAot
ICAgIHR5cGUqIG1fc3RvcmFnZTtcCi0gICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAot
cHJvdGVjdGVkOlwKLSAgICBKUyMjbmFtZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7XAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7IFwKLSAgICBKU0M6
OkpTVmFsdWUgZ2V0QnlJbmRleChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcCi0g
ICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6
OkpTVmFsdWUpO1wKLX07XAotXAotY29uc3QgQ2xhc3NJbmZvIEpTIyNuYW1lIyNBcnJheTo6c19p
bmZvID0geyAjbmFtZSAiQXJyYXkiICwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKUyMjbmFtZSMjQXJyYXkpIH07XAotXAotSlMjI25hbWUjI0FycmF5OjpKUyMjbmFt
ZSMjQXJyYXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJyYXk+IGltcGwpXAotICAgIDogQmFzZShnbG9iYWxPYmpl
Y3QtPnZtKCksIHN0cnVjdHVyZSlcCi0gICAgLCBtX2ltcGwoaW1wbClcCi17XAotfVwKLVwKLXZv
aWQgSlMjI25hbWUjI0FycmF5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXAote1wKLSAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7XAotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0
b3IoJkpTIyNuYW1lIyNBcnJheTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0Fy
cmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3Jh
Z2VMZW5ndGgpKTtcCi0gICAgdm0ucmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihtX2ltcGwu
Z2V0KCksIGRlc2NyaXB0b3IpO1wKLSAgICBtX3N0b3JhZ2UgPSBtX2ltcGwtPmRhdGEoKTtcCi0g
ICAgbV9zdG9yYWdlTGVuZ3RoID0gbV9pbXBsLT5sZW5ndGgoKTtcCi0gICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgXAotICAgIEFTU0VSVChpbmhlcml0cyhp
bmZvKCkpKTtcCi19XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVj
dC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0
QnlJbmRleChleGVjLCBpbmRleCkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0g
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAg
ICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4o
b2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAg
IGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNT
RVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERv
bnREZWxldGUpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJh
c2U6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7XAotfVwKLVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXAote1wKLSAgICBKUyMjbmFtZSMjQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICBpZiAo
cHJvcGVydHlOYW1lIDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7
XAotICAgICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMj
I25hbWUjI0FycmF5OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClc
Ci17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMj
QXJyYXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7
XAotICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAg
IHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICBy
ZXR1cm47XAotICAgIH1cCi0gICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUg
dmFsdWUpIFwKLXtcCi0gICAgbV9pbXBsLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMj
bmFtZSMjQXJyYXkqPihjZWxsKTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpO1wKLSAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlKTtcCi0gICAgcmV0dXJuO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNB
cnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSlcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFt
ZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7XAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0
LT5tX3N0b3JhZ2VMZW5ndGg7ICsraSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXI6OmZyb20oZXhlYywgaSkpO1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpT
IyNuYW1lIyNBcnJheTo6Z2V0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17
XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTtcCi0gICAgdHlw
ZSByZXN1bHQgPSBtX2ltcGwtPml0ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91
YmxlKXJlc3VsdCkpXAotICAgICAgICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFs
dWUocmVzdWx0KTtcCi19XAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMjI25hbWUjI0FycmF5KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAo
Y2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFt
ZS0+YXJndW1lbnQoMCkudG9JbnQzMihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDAp
IFwKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
Y2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJl
ZlB0cjxuYW1lIyNBcnJheT4gYnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBc
Ci0gICAgaWYgKCFidWZmZXIpIFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJh
bWUsIGNyZWF0ZVJhbmdlRXJyb3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3Qg
YSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTIyNuYW1lIyNBcnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9B
UlJBWShVaW50OCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3Qp
OwotVFlQRURfQVJSQVkoVWludDE2LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVp
bnQzMl90KTsKLVRZUEVEX0FSUkFZKEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwg
aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9h
dDMyLCBmbG9hdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAj
aW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ1R5cGVkQXJyYXlTdHVicy5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJK
U1Byb3h5LmgiCkBAIC0yMzgsMTYgKzIzNyw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5jdGlvbkNsZWFyU2FtcGxpbmdGbGFn
cywgMSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlv
bih2bSwgIlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4QXJyYXksIDEpOwotICAgICAgICBh
ZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENsYW1wZWRBcnJheSIsIGNvbnN0cnVj
dEpTVWludDhDbGFtcGVkQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rp
b24odm0sICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWludDE2QXJyYXksIDEpOwotICAgICAg
ICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MzJBcnJheSIsIGNvbnN0cnVjdEpT
VWludDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJ
bnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVj
dGFibGVGdW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDE2QXJyYXksIDEp
OwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQzMkFycmF5IiwgY29u
c3RydWN0SlNJbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9u
KHZtLCAiRmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9hdDMyQXJyYXksIDEpOwotICAgICAg
ICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDY0QXJyYXkiLCBjb25zdHJ1Y3RK
U0Zsb2F0NjRBcnJheSwgMSk7Ci0KICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFsRXhlYygpLCBhcmd1bWVudHNbaV0p
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYy
NTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFC
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3
LmNwcCAqLzsgfTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2
RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwICovOyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICov
OyB9OworCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZF
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9Owor
CQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJ
CTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9h
dDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
SW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICov
OyB9OworCQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgKi87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJy
YXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3
QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2
NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVk
QXJyYXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmNwcCAqLzsgfTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
RDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1
RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3
IEBACiAJCTBGNDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQw
MTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0
NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJG
RTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07
CisJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNw
ZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87
IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFG
QjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fi
c3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICov
OyB9OwpAQCAtMzQ5LDcgKzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVC
M0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUz
IC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUx
N0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1
QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FE
QjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2
IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9u
Lmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBB
QTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5j
b21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNG
IC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENs
YW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJy
YXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
aXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBw
YXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI1NCw2ICsxMzUyLDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RD
YWxsUmV0dXJuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVBy
b3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVBy
b3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3
NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVj
aWFsUG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9p
bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBD
RUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBA
CiAJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdD
b21tb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7
IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgx
QTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7
IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlB
NzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFBy
ZUhlYWRlckNyZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5
MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFy
cmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBYnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4
QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1
QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFG
MzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
N0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4
MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZG
NjBGNyAvKiBjb25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2
YVNjcmlwdENvcmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyog
SlNDVHlwZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8q
IERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8q
IEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3
QjlGIC8qIEFQSSAqLywKQEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhG
MkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJF
MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1
OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0Yg
LyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2
QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2
QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICov
LAogCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJ
QzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUx
NUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYg
KzI5NzEsOCBAQAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklU
TG9jay5oICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRh
LmNwcCAqLywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5o
ICovLAorCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJ
CQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAz
NDUwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAz
NDYwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4
MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMw
MDcsOCBAQAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlw
ZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwICovLAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcg
LyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyog
R2V0dGVyU2V0dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50
aWZpZXIuY3BwICovLApAQCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDhBcnJheS5oICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4
ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJ
CQkJMTREQTgxOEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkz
QURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAz
OEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYy
QjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJ
CQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAor
CQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAor
CQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmgg
Ki8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0y
OTM4LDE3ICszMDQ4LDMyIEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pT
VmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVl
LmggKi8sCiAJCQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVz
LmggKi8sCisJCQkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICov
LAorCQkJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJ
MEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAor
CQkJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8s
CiAJCQkJOTc4OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJ
CTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2
ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdC
NEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2
QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1
NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0Qw
MUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhD
IC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkw
RjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2
QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lcy5oICovLAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVj
dC5jcHAgKi8sCiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0
LmggKi8sCiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJ
bnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJB
cnJheS5oICovLAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5o
ICovLAogCQkJCTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJ
CTY1RUE0QzlBMDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1
RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3
IEBACiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2Jq
ZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAor
CQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNU
eXBlSW5mby5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFy
cmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXku
aCAqLywKKwkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8s
CisJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAq
LywKIAkJCQlCQzIyQTM5QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAg
Ki8sCiAJCQkJMTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAq
LywKIAkJCQkxNDQyNTY1RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApA
QCAtMzA1MSw2ICszMTg2LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVq
ZWN0LmggKi8sCiAJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5jcHAgKi8sCiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRl
ci5oICovLAorCQkJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgKi8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZB
IC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8q
IFNtYWxsU3RyaW5ncy5oICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFy
c2VBcnJheVZhbHVlTWFwLmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5
NkE2MENEMjkzMzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUx
QzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFF
NTQ5IC8qIFRyYWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlw
ZWRBcnJheUJhc2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRB
cnJheURlc2NyaXB0b3IuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0Yg
LyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAz
QTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5VHlwZS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
MTZBcnJheS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRo
RnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJy
YXkuaCAqLywKQEAgLTM1MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBC
MzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2Vt
YmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYx
MTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdC
ODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBC
b29sZWFuT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhF
NDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVF
RDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNTU1LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURC
MiAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFF
NjgyMDBCMkQxQzEgLyogQ2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICov
LApAQCAtMzU2Niw2ICszNzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyog
Q29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAw
QURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1v
bklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUz
N0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3
IEBACiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0
aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3Bp
ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZF
MTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAw
Rjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAx
NUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBA
CiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNo
RGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMz
NjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RC
MSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcg
QEAKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVu
ZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2
MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZBRTZDNEUxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNjU4LDYgKzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4
QjgwMDlERjc0NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTczQTUzNUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJ
ODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkE1ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBC
OUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERG
ODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNG
RTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMw
MDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1By
ZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVG
OTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4
MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2Fy
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4
Miw3IEBACiAJCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJl
c3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdB
OEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2
NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OEE5NzdGMTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9z
aXRvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5
NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3
OTQsNyArMzk1Miw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyog
SW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQg
LyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkEx
Nzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4
MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNB
Uk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJ
VFN0dWJzTUlQUy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJD
MThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRh
cHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjND
NiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3
OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4NTUsNiArNDAxNCw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFu
YWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcg
LyogSlNOYW1lU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQy
NTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzg2Niw2ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFE
IC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdG
MzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2
MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYg
KzQwNDUsNyBAQAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3
Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZE
NzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcg
QEAKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAw
QjM0NDYwIC8qIExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAw
QkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Qjcy
M0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMzkyNiw2ICs0MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8q
IE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJB
MUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwx
NyBAQAogCQkJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1
bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRo
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkND
MjAwQjM0NDYwIC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0Uz
RTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAv
KiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4
RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1
NjBGMDZBMDA4RTkyMjIgLyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVC
RjMwNDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQw
RUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiAr
NDEzOCw3IEBACiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAw
RDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQ
cml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2Nywx
MSBAQAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGly
ZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFD
N0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAy
QzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTQwMjQsNiArNDE5NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZB
IC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAw
QjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNo
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDRE
QTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBF
MTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5n
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAg
LyogU3RyaW5nUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEs
OCBAQAogCQkJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAw
ODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQw
ODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3
OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4
NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAy
MUU1NDkgLyogVHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAw
NUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2
MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2Rl
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4
NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0Yz
OUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENE
REY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJE
QTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0Ux
MzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBG
QTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTEx
NUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAv
KiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZB
REI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURG
RjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwx
MyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNO
b3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNE
MTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3
NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NjkwLDYgKzQ4NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYx
MTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNX
cmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NzEyLDYgKzQ4OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBN
YWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYw
MDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5
QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYz
REExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NDc2MiwxNyArNDk0NywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90
b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4
ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAw
N0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQw
Q0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDgwNSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYz
IC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUw
MENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcw
QTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlW
YWxJbmZvLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeVZhbEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUg
Ym9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGlt
aXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7
Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJy
YXlOb25lOworICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBq
aXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JD
bGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFz
c0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6
CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJu
IEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBl
SW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJh
eTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgogICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBU
eXBlZEFycmF5VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJ
VFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVV
aW50MzI6CiAgICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJy
YXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9h
dDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9h
dDY0OgogICAgICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0
QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBl
ZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJ
bnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsK
KyAgICBjYXNlIEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAg
Y2FzZSBKSVRVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2Ug
SklUVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwor
ICAgIGNhc2UgSklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAg
IGNhc2UgSklUVWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNh
c2UgSklURmxvYXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2Fz
ZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAg
ICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBl
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rp
b246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYg
KGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0g
ICAgICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVj
SW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY0ludDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAg
ICAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlV
aW50OENsYW1wZWQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5Owot
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1Vp
bnQxNkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY1VpbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgot
ICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRB
cnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChj
bGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAg
ICByZXR1cm4gU3BlY0ludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJl
dHVybiBTcGVjSW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJu
IFNwZWNVaW50OEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0
dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAg
IHJldHVybiBTcGVjVWludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gU3BlY1VpbnQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJl
dHVybiBTcGVjRmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJl
dHVybiBTcGVjRmxvYXQ2NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8o
KSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJy
YXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9U
eXBlZEFycmF5VHlwZShBcnJheTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAg
IGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xh
bXBlZDsKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVV
aW50MTY7CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBl
VWludDMyOworICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDMyOworICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJu
IFR5cGVGbG9hdDY0OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5
OworICAgIH0KK30KKwogdm9pZCBBcnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnQodHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCks
IGNvbnZlcnNpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFy
KiBhcnJheUNsYXNzVG9TdHJpbmcoQXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0
aW9uVG9TdHJpbmcoQXJyYXk6OlNwZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVy
c2lvblRvU3RyaW5nKEFycmF5OjpDb252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBl
ZEFycmF5VHlwZShBcnJheTo6VHlwZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAg
ICAgQXJyYXlNb2RlKCkKQEAgLTM4MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdHlwZSgpID09IEFycmF5OjpTdHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGVkQXJyYXlUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVk
QXJyYXlUeXBlKHR5cGUoKSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBBcnJheU1vZGUmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9
PSBvdGhlci50eXBlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY2NywzNyArMjY2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUs
IHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0
b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4
Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1
aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
Zihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJ
bnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1w
ZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUs
IHNpemVvZihmbG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBi
cmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU4MSwzNyArMjU4MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBu
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShu
b2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjg3Miw0NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVz
Y3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwg
Q2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCks
IHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAg
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAg
ICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOwor
ICAgICAgICB9IH0KIAogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4MywzMiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2ls
ZW50RmlsbChjb25zdCBTaQogICAgIH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yKiBTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5
TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9q
aXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpOwotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0
b3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENv
bXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2Rl
KEdQUlJlZyB0ZW1wR1BSLCBBcnJheU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUp
CiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAg
IAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgp
LCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jl
c3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6Omlu
Zm8oKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBj
YXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5m
bzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JU
eXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAg
IAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBj
b21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAg
ICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNl
IDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAg
IGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJh
eSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2
U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpA
QCAtMjYzOSwxMiArMjYwNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVs
ZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVk
VHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2ln
bmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAg
ICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1
c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91Ymxl
UmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVk
QXJyYXlSb3VuZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSog
bm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwor
ICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogICAgIApAQCAtMjY3Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRv
dWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xh
bXBSb3VuZGluZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAg
ICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAg
ICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDgg
KzI2NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVP
cC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBS
b3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAg
ICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50
ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xh
bXBSb3VuZGluZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsK
KyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9h
dFNjcmF0Y2godGhpcyk7CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRB
cnJheSkKKyAgICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAg
ICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdw
ciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwpAQCAtMjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1
ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsy
NzM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBu
b1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3
NTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRl
c2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUp
KSB7CiAgICAgY2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
Rm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJl
c3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQ
UlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCAr
Mjc5NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAg
QVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZCht
X2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9
PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09
IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsK
KyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAg
IG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5j
b252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQw
MDksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BS
VGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAy
MiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRv
cik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFT
U0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAg
ICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4
ICs0MTI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6
RG91YmxlOgpAQCAtNDE5MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9s
ZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTY0LDEwICsxOTY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBp
bGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAg
IHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7
Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6
ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJh
eVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUp
OwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdF
eHBFeGVjKE5vZGUqKTsKQEAgLTIxMDksOCArMjEwOSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNw
ZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAg
ICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3Io
QXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJ
bmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsK
ICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgor
ICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZl
ckdDLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Rl
ZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBI
ZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9y
QVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAg
ICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVm
ZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVm
aW5lIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTQ2VsbDsKKworLy8gQSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBo
YXZlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVy
ZW5jZXMgZnJvbSB0aGUgaGVhcCwgd2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRo
ZSBvYmplY3Qga25vd3MgaXRzIGluY29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNv
CisvLyBoYXZlIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBi
YWNrIGludG8gdGhlIEdDCisvLyBoZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
R0NJbmNvbWluZ1JlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4gewor
cHVibGljOgorICAgIEdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQ
b2ludGVyKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQo
KQorICAgIHsKKyAgICAgICAgaWYgKGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRl
bGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZklu
Y29taW5nUmVmZXJlbmNlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29t
aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigp
KQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCkt
PnNpemUoKTsKKyAgICB9CisgICAgCisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygp
KTsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlu
ZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8v
IEl0J3MgZ2VuZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNp
bmNlIGlmIHRoaXMKKyAgICAvLyByZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQg
dGhpcyBvYmplY3QgdG8gdGhlIEdDJ3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0OjphZGRSZWZlcmVuY2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdS
ZWZlcmVuY2UoSlNDZWxsKik7CisgICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJu
cyB0cnVlIGlmIHdlIHdpc2ggdG8ga2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2Us
IGFuZCBmYWxzZSBpZiB3ZSBkb24ndC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAg
Ly8gYW5kIGlmIGl0IGRvZXMgc28sIHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3Ug
ZG9uJ3Qgd2FudAorICAgIC8vIHRvIHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhh
dCBjYW4gcmV0dXJuIGZhbHNlIHVubGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhl
IEdDJ3MgbGlzdC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+Cisg
ICAgYm9vbCBmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0
dXJuIDE7IH0KKyAgICAKKyAgICBib29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVy
biAhKG1fZW5jb2RlZFBvaW50ZXIgJiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNB
bnlJbmNvbWluZygpIGNvbnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJv
b2wgaGFzU2luZ2xldG9uKCkgY29uc3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFz
VmVjdG9yT2ZDZWxscygpOyB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU0NlbGwqPihtX2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxWZWN0b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAg
ICB9CisgICAgCisgICAgLy8gU2luZ2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxs
Ki4KKyAgICAvLyBTaW5nbGV0b24gZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBh
IHZlY3RvciBvZiBjZWxscy4KKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRl
ZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVy
ZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAg
ICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNp
bmdsZXRvbkZsYWcoKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAg
ICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhl
YXA6OmhlYXAoY2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAg
ICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAg
ICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChj
ZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNl
bGwpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBs
YXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50
ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRl
ckZ1bmN0aW9uKQoreworICAgIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJl
bmNlcy5cbiIpOworICAgIAorICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBB
U1NFUlQoIXRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3Vu
dCgpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFz
IG5vIGluY29taW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKHRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgCisgICAgaWYgKGhhc1NpbmdsZXRv
bigpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbihzaW5nbGV0b24oKSkpIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFNpbmdsZXRv
biBwYXNzZWQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1v
dmluZyBzaW5nbGV0b24uXG4iKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAg
ICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJy
ZWQoZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgIEhhcyAiLCB2ZWN0b3JPZkNlbGxzKCktPnNpemUo
KSwgIiBlbnRyaWVzLlxuIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNl
bGxzKCktPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JP
ZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JP
ZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVj
dG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIGlmICh2ZWN0b3JP
ZkNlbGxzKCktPnNpemUoKSA+PSAyKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgU3RpbGwgaGFzICIsIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpLCAiIGVu
dHJpZXMuXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAo
dmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmluZy5cbiIpOworICAgICAgICBkZWxldGUgdmVjdG9y
T2ZDZWxscygpOworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJU
KCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiICAgU2hyaW5raW5nIHRvIHNpbmdsZXRvbi5cbiIpOworICAgIEpTQ2Vs
bCogc2luZ2xldG9uID0gdmVjdG9yT2ZDZWxscygpLT5hdCgwKTsKKyAgICBkZWxldGUgdmVjdG9y
T2ZDZWxscygpOworICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihzaW5nbGV0b24pIHwgc2luZ2xldG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24o
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKworI2luY2x1ZGUgIkdDSW5j
b21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUID0gc29tZSBzdWJ0
eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQgYSBnY1NpemVFc3RpbWF0
ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZFNl
dCgpOworICAgIH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIAorICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhpcyBzZXQuCisgICAgYm9v
bCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZvaWQgc3dlZXAoKTsKKyAg
ICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMg
Ym9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7
CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5n
UmVmQ291bnRlZFNldElubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2lu
Y2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAg
ICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAo
c2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5m
aWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0Nl
bGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZl
cmVuY2UoY2VsbCkpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7Cisg
ICAgbV9ieXRlcyArPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgIEFTU0VS
VChvYmplY3QtPmlzRGVmZXJyZWQoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNv
bWluZ1JlZmVyZW5jZXMoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBU
KiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdj
U2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVk
KCkpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5udW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygp
KTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVE
ZWFkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2J5dGVzIC09IHNpemU7Cisg
ICAgICAgIG1fdmVjdG9yW2ktLV0gPSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAgIG1fdmVjdG9y
LnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0PFQ+OjpyZW1vdmVEZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gSGVh
cDo6aXNNYXJrZWQoY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVh
cFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTM1OCw2
ICszNTksMTQgQEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAg
IG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFk
ZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYg
KG1fYXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5n
Y1NpemVFc3RpbWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90
ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFBy
b3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBA
IC02MjEsMTQgKzYzMCwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVy
biBtX29iamVjdFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNp
emUoKQoreworICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5z
aXplKCk7Cit9CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RT
cGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7
CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgp
ICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0
dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7
CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNh
cGFjaXR5KCkgKyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2Jh
bE9iamVjdENvdW50KCkKQEAgLTc0NSw2ICs3NTksMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3
ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktF
RCgpOworICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7
CisgICAgICAgIG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAg
ICBtX2Jsb2NrU25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6
ZSgpKTsKQEAgLTkyNCwxMiArOTQzLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpCiAgICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50
RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoKCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAg
ICAgCiAgICAgbV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVt
ZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAK
ICNpZm5kZWYgSGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxv
Y2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7
IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUg
aGVhcAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc2l6ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksMTEgKzE4MiwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAg
ICAgIAogICAgICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkg
eyByZXR1cm4gbV9qaXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRk
UmVmZXJlbmNlKEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxv
Y2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDOworICAgICAgICBmcmllbmQgY2xhc3Mg
RGVmZXJHQ0ZvckFXaGlsZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91
dGluZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZVNldDsKICAgICAgICAgZnJpZW5kIGNs
YXNzIEpJVFN0dWJSb3V0aW5lOwpAQCAtMjMwLDYgKzIzNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBCbG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAg
ICAgIHZvaWQgaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRlY3JlbWVu
dERlZmVycmFsRGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZk5lZWRlZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CkBAIC0y
NDUsNiArMjUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yIG1f
YmxvY2tBbGxvY2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAg
ICAgIENvcGllZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5nUmVmQ291
bnRlZFNldDxBcnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVfdCBtX2V4
dHJhTWVtb3J5VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2
aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1
Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90
eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5h
cnJheVByb3RvdHlwZVRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJv
b2xlYW5Qcm90b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZy
YW1lLT52bSgpLmJvb2xlYW5Qcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBj
YWxsRnJhbWUtPnZtKCkuZGF0YVZpZXdUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBkYXRlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5kYXRlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0
ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS5kYXRlQ29uc3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBjYWxsRnJhbWUtPnZtKCkuZXJyb3JQcm90b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KTsKLSAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwg
c2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBM
aXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRT
aXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAg
SnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8g
UHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGlu
ZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxv
YWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250
aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFy
cmF5Um91bmRpbmcpOwotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJ
bnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQ
dXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5h
bCwgS25vd25Ob3RGaW5hbCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NDksMzUgKzE1NDksMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlW
YWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50
VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3Zt
LT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5
cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0lu
dCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAg
ICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
CiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwg
U2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRU
eXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBl
ZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJh
eSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMy
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9h
dFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2Vz
ID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgdHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywx
MCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1l
bnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBl
KSk7CisgICAgCiAgICAgLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMg
dG8gdXNlIHRoZSBjbGFzc0luZm8uIFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNs
b2JiZXJpbmcgdGhlIHJlZ2lzdGVyIHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2Us
IGFuZCBwcm9wZXJ0eS4KIApAQCAtMTY4OSwxOSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAog
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhP
ZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZm
ZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3
aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAg
ICAgY2FzZSAxOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQor
ICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNl
SW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNP
bmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAg
ICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWdu
ZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3Bl
cnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBsb2FkMTYoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxv
YWQpOwpAQCAtMTcxNCw3ICsxNjcxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5R2V0QgogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRT
aXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAo
dHlwZSA9PSBUeXBlVWludDMyKSB7CiAgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAg
ICAgIAogICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1Qw
KTsKQEAgLTE3NDAsOCArMTY5NywxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVk
QXJyYXlHZXRCCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3Qg
ZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDE7CkBAIC0xNzU4LDExICsxNzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZz
ZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDQ6CiAgICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVz
Rm91ciksIGZwUmVnVDApOwogICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBm
cFJlZ1QwKTsKQEAgLTE3ODksOCArMTc0OCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheUdlCiAgICAgcmV0dXJuIHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7
CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAt
MTgwOCw4ICsxNzY5LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0
QgogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9j
bGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAg
ICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2Ny
YXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJ
bmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZMZW5ndGgoKSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBX
ZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2Vw
dCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xv
YmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9m
ZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYg
KHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
ID09IDEpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBV
bnNpZ25lZFR5cGVkQXJyYXkpOworICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVk
KHR5cGUpKTsKICAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwg
ZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9
IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7
CiAgICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyAr
MTc5Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAg
ICAgaW5Cb3VuZHMubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAg
ICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nh
c2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNp
emUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAg
IHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC0xODcyLDggKzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAg
IGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlT
Y3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
bGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwg
VHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAg
LTE4OTgsOSArMTg2MSw5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
UHUKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGlu
IGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRo
ZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRj
aCk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0
KGZwUmVnVDAsIGZwUmVnVDApOwogICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRl
eChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgpAQCAtMjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJl
c3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCiti
b29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7
CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0
MSw5IEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0g
dHJ1ZTsKLSAgICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0g
aS0+bV9uZXh0VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAg
ICAgICAgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNO
ZXV0ZXJhYmxlID0gIW1fcGluQ291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxl
KQorICAgIGlmIChpc05ldXRlcmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVz
dWx0KTsKICAgICBlbHNlIHsKICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAg
LTU2LDM2ICs1MSwxMyBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNv
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RW
aWV3KSB7Ci0gICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3Owot
ICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0
ZXJhYmxlIHx8IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+
bmV1dGVyKCk7Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZv
ciAoc2l6ZV90IGkgPSBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAg
ICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KGluY29taW5nUmVmZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAg
ICAgICAgIHZpZXctPm5ldXRlcigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmll
dy0+bV9idWZmZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXct
Pm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAg
IG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7
Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQotewotICAgIEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+
bV9uZXh0VmlldykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXct
Pm1fcHJldlZpZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1f
cHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0
VmlldyA9PSB2aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0g
ICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1l
c3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQog
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lm
bmRlZiBBcnJheUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRl
ICJXZWFrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNz
IEFycmF5QnVmZmVyVmlldzsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVm
ZmVyQ29udGVudHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVu
dHMpOwpAQCAtNDUsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFy
cmF5QnVmZmVyQ29udGVudHMoKTsKLQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBt
X2RhdGE7IH0KICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0
ZXM7IH0KIApAQCAtODYsMTIgKzg4LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXpl
SW5CeXRlczsKIH07CiAKLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJy
YXlCdWZmZXI+IHsKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBj
cmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwog
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVm
ZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAK
ICAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQuCiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpOwpAQCAtOTksMTQgKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEo
KTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVF
c3RpbWF0ZUluQnl0ZXMoKSBjb25zdDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGlu
ZSB2b2lkIHBpbigpOworICAgIGlubGluZSB2b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZp
ZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmll
dyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJD
b250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdz
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CiAgICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRh
OyB9CiAKICAgICB+QXJyYXlCdWZmZXIoKSB7IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0
ZToKICAgICBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAg
IHN0YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQp
OwogCisgICAgdW5zaWduZWQgbV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1f
Y29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgor
ICAgIFdlYWs8SlNBcnJheUJ1ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVy
OjpjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2Nywx
MiBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMo
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSksIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUo
Y29udGVudHMpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplKQogewogICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3
IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlC
dWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDog
bV9maXJzdFZpZXcoMCkKKyAgICA6IG1fcGluQ291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFu
c2ZlcihtX2NvbnRlbnRzKTsKIH0KQEAgLTE5NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlC
dWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUlu
Qnl0ZXM7CiB9CiAKK3NpemVfdCBBcnJheUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZW9mKEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNp
emVfdD4oYnl0ZUxlbmd0aCgpKTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlC
dWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xp
Y2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsy
MzcsMjMgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJl
dHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJh
eUJ1ZmZlcjo6cGluKCkKK3sKKyAgICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZm
ZXI6OnVucGluKCkKK3sKKyAgICBtX3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJD
b250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1l
bnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9s
aWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93
IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5v
dD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50
cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5
IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3Ry
aWN0aXZlIGNoZWNrIGhlcmU/CisgICAgLy8gRG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBv
ZiB0aGUgdG90YWwgc2l6ZS4KICAgICBpZiAobnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWdu
ZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlm
ICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAg
aWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAg
ICAgfHwgdG90YWxTaXplID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1heCgpKSkgewogICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1
ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJDb250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
dXNpbmcgSlNDOjpBcnJheUJ1ZmZlcjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsK
IAogI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5
QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQot
ICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAs
IG1fcHJldlZpZXcoMCkKLSAgICAsIG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJy
YXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQor
ICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVy
KQogewogICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4o
bV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIp
IAotICAgICAgICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3
Ojp+QXJyYXlCdWZmZXJWaWV3KCkKIHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVm
ZmVyLT5yZW1vdmVWaWV3KHRoaXMpOworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAg
IG1fYnVmZmVyLT51bnBpbigpOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkK
K3ZvaWQgQXJyYXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBt
X2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lz
TmV1dGVyYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0g
ZmxhZzsKKyAgICAKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGZsYWcpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAg
ICAgbV9idWZmZXItPnBpbigpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZp
c2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZl
clZpZXdfaAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJy
YXlUeXBlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CitjbGFzcyBFeGVjU3RhdGU7CisKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZD
b3VudGVkPEFycmF5QnVmZmVyVmlldz4gewogcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewot
ICAgICAgICBUeXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhD
bGFtcGVkLAotICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAg
IFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0g
ICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZp
cnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJy
YXlUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJl
ZCgpOworICAgIH0KKyAgICAKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFk
ZHJlc3MoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRl
cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNl
dDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7
CiAKLSAgICB2b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0g
ZmxhZzsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZs
YWcpOwogICAgIGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFi
bGU7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXco
KTsKIAotcHJvdGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5s
aW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
LQotICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wg
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50
IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVu
c2lnbmVkKiBsZW5ndGgpOwotCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4g
c3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbnVtRWxlbWVudHMpCisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAg
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9m
ZnNldCwKKyAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0
ZUxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4g
MSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBp
ZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IC0gYnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0Vs
ZW1lbnRzID0gKGJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAg
aWYgKG51bUVsZW1lbnRzID4gcmVtYWluaW5nRWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5s
aW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsK
KworICAgIGlubGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
ZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wg
emVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3Ro
KTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisg
ICAgICAgIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1
bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNl
dCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAv
LyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5n
IGJ1ZmZlcidzIHZpZXcuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZv
aWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQg
Km51bUVsZW1lbnRzKQorICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMo
CisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWdu
ZWQgYXJyYXlCeXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1
bnNpZ25lZCAqbnVtRWxlbWVudHMpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQg
PSAoVUlOVF9NQVggLSBhcnJheUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAo
Km9mZnNldCA+IG1heE9mZnNldCkgewpAQCAtMTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVt
ZW50cyk7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0
ZXIoKTsKLQogICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mg
c3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsK
IApAQCAtMTMwLDggKzE0MSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAg
QXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0
VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmll
dyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBB
cnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUltcGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFy
dCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25l
ZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0
aCgKKyAgICBpbnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCArPSBhcnJheVNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmll
dzsKIHN0cnVjdCBIYXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5
NywxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JGdW5jdGlvblB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlw
ZWRlZiB2b2lkICgqU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsK
KyAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAg
CisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5
SW1wbCkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBl
ZEFycmF5SW1wbDsKIH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikg
XApAQCAtMTM5LDYgKzE0Niw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFz
c05hbWU6OnB1dERpcmVjdFZpcnR1YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3du
UHJvcGVydHksIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
LCBcCisgICAgICAgICZDbGFzc05hbWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0VHlwZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05h
bWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1NDAzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhl
IGxpc3QuCiAjZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1F
KG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXkpIFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAor
ICAgIG1hY3JvKEJZVEVTX1BFUl9FTEVNRU5UKSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAg
IG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAg
IG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkg
XAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNy
byhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29k
ZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAg
ICAgbWFjcm8ocHJvcGVydHlJc0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwK
ICAgICBtYWNybyhzZXQpIFwKKyAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkg
XAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3Jv
KHN1YmFycmF5KSBcCiAgICAgbWFjcm8odGVzdCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwp
IFwKICAgICBtYWNybyh0b0ZpeGVkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUg
IkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5
QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxl
bmd0aCkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhi
dWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcq
IERhdGFWaWV3Ojp3cmFwKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBn
bG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCks
IGJ5dGVPZmZzZXQoKSwKKyAgICAgICAgYnl0ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAor
I2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNs
dWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7
Citwcm90ZWN0ZWQ6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
VHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlw
ZURhdGFWaWV3OworICAgIH0KKworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAo
RXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIFQgZ2V0KHVuc2lnbmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wq
IHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBp
ZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
KnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAqc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkg
PD0gYnl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFu
KAorICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihtX2Jhc2VBZGRyZXNzKSArIG9mZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2ln
bmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDAp
CisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsg
c2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkp
OworICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
YmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWdu
ZWQgbV9ieXRlTGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBE
YXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0
MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GbG9hdDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxv
YXQzMkFycmF5X2gKICNkZWZpbmUgRmxvYXQzMkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJy
YXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewot
cHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMy
QXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJy
YXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRp
cmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0g
ICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxv
YXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1Q
YXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMy
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJy
YXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNy
ZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJh
eTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFy
cmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpT
Qzo6RmxvYXQzMkFycmF5OwogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1
NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTExLDk4ICsxMCwyNSBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZp
bmUgRmxvYXQ2NEFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRB
cnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29u
c3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25s
eSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxl
ZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNj
cmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEZsb2F0NjRBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBU
eXBlZEFycmF5QmFzZTxkb3VibGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0
PGRvdWJsZT4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxG
bG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5
cGVGbG9hdDY0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIAotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNz
LgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1Jl
ZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6
Y3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3Jl
YXRlPEZsb2F0NjRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJh
eTo6RmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91Ymxl
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0
QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBK
U0M6OkZsb2F0NjRBcnJheTsKIAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6Cisg
ICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25z
dCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSo+KGJhc2VBZGRyZXNzKCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGgg
KiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBz
aXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHpl
cm9SYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICBy
ZXR1cm4gemVyb1JhbmdlSW1wbChvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSksIGxlbmd0aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgemVyb0ZpbGwoKSB7IHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAK
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVy
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhd
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9y
Ojp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0
YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8
PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAg
ICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zm
c2V0KTsKKyAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRB
cnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVm
ZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlw
ZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAs
IGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVz
dWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwg
bGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJh
eVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4K
K0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAg
ICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4g
PgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAg
ICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZv
ZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6
VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0
dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNBcnJheUJ1ZmZlclZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6d3JhcCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEFkYXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAg
ICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0
b3I6OnR5cGVWYWx1ZSksIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDAzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFy
cmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMy
X3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAg
IHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1Ymxp
Y0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIo
KSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZl
cihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUudHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0K
KyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCiAgICAgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRl
cio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxk
IGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkg
b24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCku
CiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhl
IGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdl
IGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAg
ICAgIAorICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsK
KyAgICAgICAgfSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAs
MTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2
LDkgQEAKICNpZm5kZWYgSW50OEFycmF5X2gKICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1
ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhl
IGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6
c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gVHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlu
bGluZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUg
dG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNy
ZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJy
YXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJy
YXk+IEludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50
OEFycmF5PihsZW5ndGgpOwotfQotCi1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJy
YXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBl
ZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJ
KHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKQEAgLTI2LDc3ICsyNiw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAog
I2RlZmluZSBJbnQxNkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQx
NkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGlj
OgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3Jl
YXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJl
IGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8g
SmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsK
LQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50
ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Owot
Ci0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBUeXBlSW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
Ci0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1Jl
ZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNv
bnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJy
YXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFy
cmF5PiBJbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8
SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRl
T2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFy
dCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJ
bXBsPEludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRp
ZiAvLyBJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDMyQXJyYXkuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJ
bnQzMkFycmF5X2gKICNkZWZpbmUgSW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBl
ZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQ+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShp
bnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgaW5saW5lIEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25z
dHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJy
YXlCYXNlPGludD47Ci19OwotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46
OmNyZWF0ZTxJbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+
IEludDMyQXJyYXk6OmNyZWF0ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJh
eSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0
ZTxJbnQzMkFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlh
bGl6ZWQ8SW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFy
cmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0
YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJh
eUltcGw8SW50MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2Vu
ZGlmIC8vIEludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlC
dWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlC
dWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sK
K30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMs
IG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAg
ICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBw
YXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRC
dWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlC
dWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051
bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5p
bXBsKCktPmJ5dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChl
eGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQt
b25seSBhcnJheSBidWZmZXIgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAg
IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhy
b3cpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3Vs
ZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9w
ZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisK
K2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZm
ZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5l
IEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNB
cnJheUJ1ZmZlciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4pOworICAgIAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
OyB9CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5
QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIo
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWlj
Q2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNl
KGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBw
cm90b3R5cGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisK
K0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVh
dGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I+KHZtLmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3Rv
dHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAg
ICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgeworICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBB
bHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBj
b3JyZWN0IHRvIHNheQorICAgICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0
IGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdp
dGggYSB6ZXJvIGxlbmd0aC4KKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwg
MSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisg
ICAgICAgIGV4ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpn
ZXRDb25zdHJ1Y3REYXRhKAorICAgIEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJh
eUJ1ZmZlcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNh
bGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5
QnVmZmVyOworICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNz
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgor
ICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUo
SlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7Cisg
ICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpT
Q2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBi
dWZmZXIuIikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2Ug
cmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJl
Z2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9
IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5k
KTsKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5
QnVmZmVyU3RydWN0dXJlKCk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVy
UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJh
eUJ1ZmZlclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFt
ZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisK
K0pTQXJyYXlCdWZmZXJQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hD
cmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisK
K1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAg
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJv
dG90eXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7
CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNs
dWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlC
dWZmZXJWaWV3OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2lu
Zm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitK
U0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4
dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVp
bnQzMl90IGVsZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDog
bV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5
KDApCit7CisgICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0
dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90
IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVh
cC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9
IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVp
bnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykK
KyAgICAgICAgICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBp
ZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAg
ICAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92
ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgh
dHJ5RmFzdE1hbGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7Cisg
ICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVU
eXBlZEFycmF5OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6
Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAg
LCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBi
eXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVs
VHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBp
bmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9i
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdI
ZWFkZXIsIDApOworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0m
IHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4
dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRl
eHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9t
b2RlKGNvbnRleHQubW9kZSgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZp
bmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3Rl
ZnVsVHlwZWRBcnJheToKKyAgICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVy
Zmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNB
cnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52
bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jv
b2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgewor
ICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ1ZmZlcikgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAg
ICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAg
ICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZl
cigpKSwKKyAgICAgICAgICAgIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisK
K3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBy
ZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8g
cmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVy
dHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWpl
Y3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlw
ZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxk
VGhyb3cpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAg
ICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1
ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3Qp
OworICAgIAorICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVt
LCBhdCBsZWFzdCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpIHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0KTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3Ojpm
aW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1f
bW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUg
PT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3Zl
Y3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBw
cm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0
IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXBy
ZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwg
d2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBh
IHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBh
Y3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRl
IGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGls
ZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3Np
YmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlz
ICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBs
ZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2
ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRo
YXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZp
ZXcgaXMgbm90IGluc3RhbnRpYWJsZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZm
ZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVy
IHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNr
aW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGll
cy4KK2VudW0gVHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFy
cmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQg
aW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMK
KyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAg
RmFzdFR5cGVkQXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0
aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBp
bml0aWFsaXplZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBi
dWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RD
YWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNz
IGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBh
bmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNp
emVUeXBlZEFycmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBp
biBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQg
dG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisg
ICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcu
IFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13
aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5v
dCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVu
IFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUg
dG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyIGFuZCBsaXR0bGUgZWxzZS4gVGhpcyBy
ZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNj
ZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1
ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1l
dGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhh
cyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBj
b2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisK
K2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMg
c2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAgJiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAx
KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAg
ICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBJbml0aWFsaXphdGlvbk1vZGUgeyBaZXJv
RmlsbCwgRG9udEluaXRpYWxpemUgfTsKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIENvbnN0cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgs
IHVpbnQzMl90IGVsZW1lbnRTaXplLCBJbml0aWFsaXphdGlvbk1vZGUgPSBaZXJvRmlsbCk7Cisg
ICAgICAgIAorICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KAor
ICAgICAgICAgICAgVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsg
fQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBt
X3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1f
bGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZs
eSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0Fy
cmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYp
OworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2
b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAv
LyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlci4gQWxzbyBtb3ZlcyB0aGUgZGF0
YSBpbnRvIHRoZSBDIGhlYXAKKyAgICAvLyBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93
bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBt
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigp
OworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0
ZXIoKTsKKyAgICAKKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQXJyYXlCdWZmZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3
LCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7Cisg
ICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmll
d0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93
bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVm
dWxUeXBlZEFycmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVt
b3J5KHRoaXMpOworfQorCitpbmxpbmUgQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3Ojpi
dWZmZXIoKQoreworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAg
IHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30K
KworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6
aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRo
aXMpOworfQorCitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAg
ICBBU1NFUlQobV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgbV9sZW5ndGggPSAw
OworICAgIG1fdmVjdG9yID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJW
aWV3OjpieXRlT2Zmc2V0KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJh
eSkgeworICAgICAgICBBU1NFUlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9
PSBPdmVyc2l6ZVR5cGVkQXJyYXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgcHRyZGlmZl90IGRlbHRhID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVj
dG9yKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1
ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZl
clZpZXcuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgpAQCAtMjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lk
IEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+IEpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVh
cC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5j
bHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5o
IgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRvcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpT
QXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0ds
b2JhbE9iamVjdDsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE0OSw3ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0
dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlw
ZWRBcnJheU5vbmU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlT
dG9yYWdlVHlwZSA9IE5vdFR5cGVkQXJyYXk7CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CkBAIC0xNjcsNiArMTY4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJy
YXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTRGF0YVZpZXc6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6
SlNEYXRhVmlldyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBC
YXNlKHZtLCBjb250ZXh0KQoreworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNz
ZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4
X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVy
cm9yKAorICAgICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZz
ZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250
ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0
YVZpZXcodm0sIGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpT
RGF0YVZpZXc6OmNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAg
ICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBK
U0RhdGFWaWV3OjpzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQp
Cit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBKU0RhdGFWaWV3Ojp0eXBlZEltcGwoKQoreworICAg
IHJldHVybiBEYXRhVmlldzo6Y3JlYXRlKGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksIGxlbmd0aCgp
KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1i
ZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcq
PihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVy
KHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9
CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVy
VmlldyopCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5
QnVmZmVyVmlldyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1w
bCgpOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKwor
I2luY2x1ZGUgIkRhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZl
clZpZXcgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZWxlbWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVk
OgorICAgIEpTRGF0YVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJs
aWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
CisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhv
ZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRv
CisgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3
aGVyZS4KKyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3
KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBi
b29sIHNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPERhdGFWaWV3PiB0eXBlZEltcGwoKTsKKyAg
ICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBl
ID0gVHlwZURhdGFWaWV3OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAg
c3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwo
SlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBl
KTsKKyAgICAKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
SlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5
dGVzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1By
b3RvdHlwZTo6c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2lu
Zm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRGF0YVZpZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90
b3R5cGUubHV0LmgKK0BiZWdpbiBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBnZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQxNiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAg
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jR2V0VWludDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZs
b2F0MzIgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
c2V0SW50OCAgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBzZXRJbnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHNldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMy
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0
RmxvYXQzMiAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRh
Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQoreworfQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJv
dG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0Rh
dGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmll
d1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmll
d1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAg
ICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFW
aWV3UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywg
RXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlw
ZSo+KG9iamVjdCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNE
YXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2
ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAg
aWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAo
dGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgaWYgKHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAg
ICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9m
ZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7Cisg
ICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0
PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGF0YVZpZXct
PnZlY3RvcigpKSArIGJ5dGVPZmZzZXQpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJ
ZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2
YWx1ZSk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShBZGFwdG9yOjp0b0pTVmFs
dWUodmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1Zh
bHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3
ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFWaWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlm
ICghZGF0YVZpZXcpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFW
aWV3LiIpKTsKKyAgICAKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQg
YXQgbGVhc3QgdHdvIGFyZ3VtZW50ICh0aGUgYnl0ZU9mZnNldCBhbmQgdmFsdWUpLiIpKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBleGVjLT5hcmd1bWVudCgxKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFs
c2U7CisgICAgaWYgKHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSA+IDEgJiYgZXhlYy0+
YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoYnl0ZU9mZnNldCA+PSBkYXRhVmlldy0+bGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAi
T3V0IG9mIGJvdW5kcyBhY2Nlc3MiKSk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lm
TGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZh
bHVlKTsKKyAgICAKKyAgICAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
Kj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0
KSA9IHZhbHVlOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50
OEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gZ2V0RGF0YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4
ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1By
b3RvRnVuY0dldFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8
VWludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZ2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jR2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8Rmxv
YXQ2NEFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBzZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MzJBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8
VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBzZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
U2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQz
MkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBzZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIgorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3Rv
dHlwZV9oCisjZGVmaW5lIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwg
U3RydWN0dXJlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSog
Y3JlYXRlKFZNJiwgU3RydWN0dXJlKik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisg
ICAgICAgIEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3RvdHlwZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxv
YXQzMkFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0MzJBcnJheV9o
CisjZGVmaW5lIEpTRmxvYXQzMkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIK
KworI2VuZGlmIC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTRmxvYXQ2NEFycmF5X2gKKyNkZWZpbmUgSlNGbG9hdDY0QXJyYXlfaAor
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0SW50
OEFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdl
dEludDE2QXJyYXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5m
byogZ2V0SW50MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xh
c3NJbmZvKiBnZXRVaW50OEFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25z
dCBDbGFzc0luZm8qIGdldFVpbnQ4Q2xhbXBlZEFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRf
UFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldFVpbnQxNkFycmF5Q2xhc3NJbmZvKCk7CitKU19F
WFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldFVpbnQzMkFycmF5Q2xhc3NJbmZvKCk7
CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEZsb2F0MzJBcnJheUNsYXNz
SW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRGbG9hdDY0QXJy
YXlDbGFzc0luZm8oKTsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRh
dGlvbiBvZiBhIHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQu
IEZvciBleGFtcGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8v
IEhlcmUsICdvJyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+Lgor
Ly8KKy8vIFZpZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSog
UyAgICAgLy8gZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNP
YmplY3QKKy8vICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBU
eXBlZEFycmF5TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBm
b3VyIHBvaW50ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29y
ZHMhCisvLworLy8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0
aW9uYWwgIm92ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMg
cG9pbnRzIHRvIHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5
IHBvaW50IHRvIGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUg
QyBoZWFwOworLy8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5l
ZCBieSB0aGUgbW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmll
dyB5b3UgY2FuIGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNw
ZWNpZmllcyB0aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0
aGF0CisvLyBkZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisv
LyB0aGUgZWxlbWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5
IHRoZSBmb2xsb3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6
CisvLworLy8gc3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7Cisv
LyAgICAgdHlwZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhB
cnJheSBKU1ZpZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsK
Ky8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBp
bnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFs
dWUgdG9KU1ZhbHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4
X3QpOworLy8gfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIAor
cHJvdGVjdGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9u
Q29udGV4dCYpOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7Cisg
ICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBz
dGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2Jh
bE9iamVjdCosIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOwor
ICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAq
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpKTsgfQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVk
VmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKyAgICB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRob2Rz
IHRoYXQgSlNPYmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5k
YW5jeS4KKyAgICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRleFF1
aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7Cisg
ICAgfQorICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNO
YXRpdmVWYWx1ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0
aCk7CisgICAgICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBk
b3VibGUgZ2V0SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAg
IHJldHVybiBBZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkp
KTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5
QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5
VG9OYXRpdmVWYWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9y
KClbaV0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0Rv
dWJsZSh1bnNpZ25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1
aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6
OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5
KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAg
ICAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4
ZWMsIGpzVmFsdWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUo
aSwgdmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBj
YW5BY2Nlc3NSYW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisg
ICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAmJiBv
ZmZzZXQgKyBsZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93
CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICAvLyBMaWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYgaXQgcmV0dXJucyBmYWxzZSwg
aXQgd2lsbCB0aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBleGNlcHRpb24uCisgICAgYm9v
bCB2YWxpZGF0ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNl
IG9uIGVycm9yOyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE90aGVyVHlwZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUoRXhlY1N0YXRlKiwgT3Ro
ZXJUeXBlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJl
dHVybnMgZmFsc2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9u
LgorICAgIGJvb2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6
Vmlld1R5cGU+IHR5cGVkSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6Vmll
d1R5cGU6OmNyZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5ndGgoKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIE5vbkFycmF5KTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87IC8vIFRoaXMg
aXMgbmV2ZXIgYWNjZXNzZWQgZGlyZWN0bHksIHNpbmNlIHRoYXQgd291bGQgYnJlYWsgbGlua2Fn
ZSBvbiBzb21lIGNvbXBpbGVycy4KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvKiBp
bmZvKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAg
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICByZXR1cm4gZ2V0SW50OEFycmF5Q2xhc3NJ
bmZvKCk7CisgICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldElu
dDE2QXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0SW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50
ODoKKyAgICAgICAgICAgIHJldHVybiBnZXRVaW50OEFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgIHJldHVybiBnZXRVaW50OENsYW1w
ZWRBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0VWludDE2QXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWlu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldFVpbnQzMkFycmF5Q2xhc3NJbmZvKCk7CisgICAg
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXQzMkFycmF5
Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICByZXR1
cm4gZ2V0RmxvYXQ2NEFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBl
IFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBmcmllbmQgc3RydWN0IFR5cGVkQXJyYXlDbGFzc0luZm9zOworICAgIAorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3Im
LCBDb3B5VG9rZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZm
ZXIgYW5kIG1vdmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBO
b3RlIHRoYXQgdGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGlj
IHZvaWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJh
eUJ1ZmZlclZpZXcqKTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitpbmxpbmUg
UGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gdG9OYXRpdmVUeXBlZFZpZXco
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKiB3cmFw
cGVyID0ganNEeW5hbWljQ2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKj4odmFsdWUp
OworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBw
ZXItPnR5cGVkSW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFs
RnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9u
IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRl
KAorICAgICAgICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVj
dFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3Rh
dGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVz
X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXNfaAor
CisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIG5hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPkJZVEVTX1BFUl9FTEVNRU5ULCBqc051bWJlcihWaWV3Q2xh
c3M6OmVsZW1lbnRTaXplKSwgRG9udEVudW0gfCBSZWFkT25seSB8IERvbnREZWxldGUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZt
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90
b3R5cGUsIG5hbWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cjxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAgICAg
ICBWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKCFleGVj
LT5hcmd1bWVudENvdW50KCkpIHsKKyAgICAgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0
b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1
aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgICAgICAKKyAgICAgICAgLy8gRXZl
biB0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzYXkgc28sIGl0J3MgY29ycmVjdCB0
byBzYXkKKyAgICAgICAgLy8gIm5ldyBJbnQ4QXJyYXkoKSIuIFRoaXMgaXMgdGhlIHNhbWUgYXMg
YWxsb2NhdGluZyBhbiBhcnJheSBvZiB6ZXJvCisgICAgICAgIC8vIGxlbmd0aC4KKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUs
IDApKTsKKyAgICB9CisgICAgCisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNE
eW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFy
Z3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJh
eUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2Yg
dGhlIGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRl
TGVuZ3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0
cnVjdHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAo
Vmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0
ZWQgQXJyYXlCdWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7CisgICAgCisgICAgLy8g
Rm9yIGV2ZXJ5dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBh
bnkgb2Y6CisgICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRo
ZSBvZiB0aGF0IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3
IHR5cGVkIGFycmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAg
IAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4
ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAg
ICAgb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAg
ICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
ZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVjdCwgMCwgbGVuZ3RoKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGlu
dCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzSW50MzIoKSkKKyAgICAgICAg
bGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQzMigpOworICAgIGVsc2UgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQu
IikpOworICAgIGVsc2UgeworICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMt
PmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpOworICAgICAgICBpZiAobGVuZ3RoICE9IGV4ZWMtPmFy
Z3VtZW50KDApLmFzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQg
KGZyYWN0aW9uYWwgbGVuZ3RocyBub3QgYWxsb3dlZCkuIikpOworICAgIH0KKworICAgIGlmIChs
ZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUuIikpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5n
dGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ29uc3RydWN0VHlwZSBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJE
ZWZlckdDLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJz
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJSZWpl
Y3QuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRl
eHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVj
dGlvbkNvbnRleHQgY29udGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoCisgICAgICAgIGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAg
ICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0
cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkK
KyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZl
cjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRh
cHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKSB7CisgICAgICAgIHRocm93
RXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9m
ZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwg
c3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRl
eHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0o
KS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29u
dGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
cmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBl
bmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4
dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3Ro
KCkpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyog
cmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2
bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3Jl
YXRlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7
CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+Ojp2YWxpZGF0ZVJhbmdlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1Jhbmdl
UXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGlu
ZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRX
aXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBo
aWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSBy
ZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFw
cGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRp
bmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVy
ZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBz
byB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3
ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisg
ICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxl
bmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAo
IXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJMZW5ndGggb2YgaW5jb21p
bmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAg
ICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCArIGksIG90aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkp
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7
CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVl
KSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNweSBz
aW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAg
ICAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgbWVtY3B5KHR5cGVkVmVj
dG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3RvcigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVy
biBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCks
IG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNl
dFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9m
ZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdp
dGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNl
dCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhT
cGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRX
aXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0
KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJu
IHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3Qp
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4g
c2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCks
IG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4g
c2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmplY3Qp
LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJu
IHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0
KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5
cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBs
ZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBv
cHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0
SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0lu
ZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlz
T2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7
CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5i
eXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRl
eCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09i
amVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25v
cmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8g
RXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgo
KTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAg
IHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0
KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBh
cnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJv
cGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhl
eSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4
KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4
ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBl
ZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRU
aHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVy
biB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgICAg
ICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFt
ZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkdldEluZGV4
UXVpY2tseShwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lk
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAg
ICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+cHV0KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHko
cHJvcGVydHlOYW1lKSkgeworICAgICAgICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5z
IHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAv
LyB0aGUgYm91bmRzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHRoaXNPYmpl
Y3QtPnNldEluZGV4UXVpY2tseShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUg
PiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5KAorICAgICAgICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisg
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpCisgICAgICAgIGFy
cmF5LmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgCisgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJheSwgbW9k
ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAg
ICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlU
b2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5
OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5i
eXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdh
c3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5
QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENv
cHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlm
ICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCisgICAgICAgICYmIHZpc2l0b3Iu
Y2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQq
IG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0
b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7Cisg
ICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUo
KSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2
aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9
CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0
b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZm
ZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAg
IC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxl
IGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNT
dGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBt
ZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0
IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhl
IHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0
dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhl
IEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJk
cyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRv
cHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdh
eS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBp
cyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQg
ZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3Rl
IG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxs
IGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYg
eW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2ls
bCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQg
aXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRo
aXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisg
ICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVf
dCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVj
dC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8g
UmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAg
ICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5k
ZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVh
dGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHks
ICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxz
ZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAg
CisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFy
cmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1f
dmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25z
aWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5
CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0
aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUg
YnVmZmVyLgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlz
T2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIo
YnVmZmVyLmdldCgpKTsKKyAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgp
OworICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFw
LT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJW
aWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0
aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2Rl
ZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7
CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYs
IFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAgICBFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IFN0cnVjdHVyZSopOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lc19oCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2Fz
dDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkgdmlldy4iKSk7CisgICAgCisgICAgaWYg
KCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQu
IikpOworICAgIAorICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPihleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFzb3VyY2VBcnJheSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0
IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuIikpOworICAgIAorICAgIHVuc2lnbmVkIG9m
ZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zm
c2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgCisgICAg
dW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2Fs
bGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8
Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJl
Y2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXcuIikpOworICAgIAorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIp
KTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAg
IC8vIEdldCB0aGUgbGVuZ3RoIGhlcmU7IGxhdGVyIGFzc2VydCB0aGF0IHRoZSBsZW5ndGggZGlk
bid0IGNoYW5nZS4KKyAgICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3Ro
KCk7CisgICAgCisgICAgLy8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXM6IC14ID0+IGxlbmd0aCAt
IHgKKyAgICBpZiAoYmVnaW4gPCAwKQorICAgICAgICBiZWdpbiA9IHN0ZDo6bWF4KHN0YXRpY19j
YXN0PGludD4odGhpc0xlbmd0aCArIGJlZ2luKSwgMCk7CisgICAgaWYgKGVuZCA8IDApCisgICAg
ICAgIGVuZCA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4odGhpc0xlbmd0aCArIGVuZCksIDAp
OworICAgIAorICAgIC8vIENsYW1wIHRoZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFy
cmF5LgorICAgIEFTU0VSVChiZWdpbiA+PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAg
IGJlZ2luID0gc3RkOjptaW4oYmVnaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgp
KTsKKyAgICBlbmQgPSBzdGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5n
dGgpKTsKKyAgICAKKyAgICAvLyBDbGFtcCBlbmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjpt
YXgoYmVnaW4sIGVuZCk7CisgICAgCisgICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5z
aWduZWQgb2Zmc2V0ID0gYmVnaW47CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47
CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3Qt
PmJ1ZmZlcigpOworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXNMZW5ndGggPT0gdGhpc09iamVjdC0+
bGVuZ3RoKCkpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgY2Fs
bGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVk
QXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xh
c3M6OmNyZWF0ZSgKKyAgICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1ZmZlciwKKyAgICAg
ICAgdGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0NsYXNzOjplbGVtZW50
U2l6ZSwKKyAgICAgICAgbGVuZ3RoKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24o
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIAorICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICAKKyAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jU2V0PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKKyAgICBKU0NfTkFUSVZF
X0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnN1YmFycmF5LCBnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTdWJhcnJheTxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5CWVRFU19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmll
d0NsYXNzOjplbGVtZW50U2l6ZSksIERvbnRFbnVtIHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU8Vmlld0NsYXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PFZpZXdDbGFzcz46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4oZXhlYy0+dm0o
KS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoZXhlYy0+
dm0oKSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgorU3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxWaWV3Q2xhc3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5s
aW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE1ICs0OSwy
NiBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU0NhbGxiYWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNEYXRh
Vmlldy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2lu
Y2x1ZGUgIkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgorI2luY2x1ZGUg
IkpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2Nv
cGUuaCIKICNpbmNsdWRlICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpA
QCAtMjE0LDYgKzIyNSwzMCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHBy
b3RvCiAgICAgcHJvdG9BY2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7
CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwg
RG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSk7CisgICAgCisgICAgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5w
cm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVh
dGUoZXhlYywgdGhpcywgSlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90
eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52
bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZVVpbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1Vp
bnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnBy
b3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlw
ZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IEpTVWludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywg
dGhpcywgSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZUZsb2F0NjQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxv
YXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlw
ZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJv
dG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIAorICAgIG1fYXJyYXlC
dWZmZXJTdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0uc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0ludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSkp
OworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTSW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0uc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0ludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQo
KSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENs
YW1wZWQpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQxNildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlVWludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVVaW50MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJy
YXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRmxvYXQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9h
dDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTRmxvYXQ2NEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCkpKTsKIAog
ICAgIG1fbmFtZVNjb3BlU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05hbWVTY29w
ZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV9h
Y3RpdmF0aW9uU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwpAQCAtMzE4LDYgKzM1
MywyNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuSlNPTiwgSlNPTk9iamVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBE
b250RW51bSk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLk1hdGgsIE1hdGhPYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBN
YXRoT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOworICAgIAorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvciogYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
Y3JlYXRlKHRoaXMsIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVy
UHJvdG90eXBlLmdldCgpKTsKKyAgICBGaXhlZEFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1C
RVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsK
KyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2
QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJ
bnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQz
MildID0gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDMyQXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90
eXBlLmdldCgpLCAiSW50MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9J
bmRleChUeXBlVWludDgpXSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywg
SlNVaW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50OCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29u
c3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5n
ZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBl
LmdldCgpLCAiVWludDhDbGFtcGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3RvSW5kZXgoVHlwZVVpbnQxNildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBl
ZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMy
QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIp
XSA9IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0MzJBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlv
blByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnBy
b3RvdHlwZS5nZXQoKSwgIkZsb2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlRmxvYXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7Cisg
ICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVEYXRhVmlldyldID0gSlNEYXRh
Vmlld0NvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCksICJE
YXRhVmlldyIpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUtPnB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJheUJ1
ZmZlciwgYXJyYXlCdWZmZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgdHlwZWRBcnJheUluZGV4ID0gTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0
eXBlZEFycmF5SW5kZXgtLTspIHsKKyAgICAgICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5k
ZXhdLnByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5
cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgSWRlbnRpZmllcihleGVjLCB0eXBlZEFycmF5Q29uc3RydWN0b3Jz
W3R5cGVkQXJyYXlJbmRleF0tPm5hbWUoZXhlYykpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5
cGVkQXJyYXlJbmRleF0sIERvbnRFbnVtKTsKKyAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8gc3RhdGljR2xvYmFsc1tdID0gewogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oZXhlYy0+
cHJvcGVydHlOYW1lcygpLk5hTiwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpLApAQCAtNTQwLDYgKzU5NiwxNCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnRXhwU3Ry
dWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2ludGVybmFsRnVu
Y3Rpb25TdHJ1Y3R1cmUpOworICAgIAorICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2FycmF5QnVmZmVyUHJvdG90eXBlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9hcnJheUJ1ZmZlclN0cnVjdHVyZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gTlVN
QkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyBpLS07KSB7CisgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3R5cGVkQXJyYXlzW2ldLnByb3RvdHlwZSk7CisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3R5cGVkQXJyYXlzW2ldLnN0cnVjdHVyZSk7CisgICAg
fQogfQogCiBKU1ZhbHVlIEpTR2xvYmFsT2JqZWN0Ojp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRl
KiBleGVjLCBFQ01BTW9kZSBlY21hTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIlZN
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRl
cm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNl
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTE2Niw2ICsxNjcsMTYgQEAgcHJvdGVj
dGVkOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlOwogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKKyAgICAK
KyAgICBXcml0ZUJhcnJpZXI8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclBy
b3RvdHlwZTsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0
dXJlOworICAgIAorICAgIHN0cnVjdCBUeXBlZEFycmF5RGF0YSB7CisgICAgICAgIFdyaXRlQmFy
cmllcjxKU09iamVjdD4gcHJvdG90eXBlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmU7CisgICAgfTsKKyAgICAKKyAgICBGaXhlZEFycmF5PFR5cGVkQXJyYXlEYXRh
LCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM+IG1fdHlwZWRBcnJheXM7CiAgICAgICAgIAog
ICAgIHZvaWQqIG1fc3BlY2lhbFBvaW50ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNp
YWwgcG9pbnRlcnMgdXNlZCBieSB0aGUgTExJbnQgYW5kIEpJVC4KIApAQCAtMzMwLDYgKzM0MSwx
NCBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQog
ICAgIFN0cnVjdHVyZSogcmVnRXhwU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgCisg
ICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogYXJyYXlCdWZmZXJQcm90b3R5cGUoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpOyB9CisgICAgU3RydWN0dXJlKiBh
cnJheUJ1ZmZlclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlw
ZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgodHlwZSldLnN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CiAKICAgICB2b2lkKiBh
Y3R1YWxQb2ludGVyRm9yKFNwZWNpYWw6OlBvaW50ZXIgcG9pbnRlcikKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNJbnQ4QXJyYXlfaAorI2RlZmluZSBKU0ludDhBcnJheV9o
CisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFy
cmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDE2QXJyYXlfaAorI2RlZmlu
ZSBKU0ludDE2QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYg
Ly8gSlNJbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludDMyQXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50
MzJBcnJheV9oCisjZGVmaW5lIEpTSW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1
ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisg
ICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7IkZ1bmN0aW9uIiwgJkpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6QmFzZTo6c19pbmZvLCAw
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0Vf
U19JTkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZP
KEludDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
OENsYW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhV
aW50MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxv
YXQ2NEFycmF5KTsKK01BS0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnNfaAorCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBK
U0ludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxKU0ludDMyQXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50
OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3I8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9y
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJy
YXk+IEpTVWludDE2QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJy
YXk+IEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmll
dz4gSlNEYXRhVmlld0NvbnN0cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBlOjpzX2luZm8gPSB7
I3R5cGUgIlByb3RvdHlwZSIsICZKUyMjdHlwZSMjUHJvdG90eXBlOjpCYXNlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19J
TkZPKEludDhBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKElu
dDMyQXJyYXkpOworTUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENs
YW1wZWRBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50
MzJBcnJheSk7CitNQUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2
NEFycmF5KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheVBy
b3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQz
MkFycmF5PiBKU0ludDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFycmF5
PiBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBlOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5PiBK
U1VpbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZTxKU0Zsb2F0MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0
NjRBcnJheVByb3RvdHlwZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5
cGVkQXJyYXlQcm90b3R5cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZWRBcnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUg
IkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0Vf
U19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMj
QXJyYXk6OnNfaW5mbyA9IHsgXAorICAgICAgICAjdHlwZSAiQXJyYXkiLCAmSlMjI3R5cGUjI0Fy
cmF5OjpCYXNlOjpzX2luZm8sIDAsIDAsIFwKKyAgICAgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShK
UyMjdHlwZSMjQXJyYXkpIFwKKyAgICB9OyBcCisgICAgY29uc3QgQ2xhc3NJbmZvKiBnZXQjI3R5
cGUjI0FycmF5Q2xhc3NJbmZvKCkgeyByZXR1cm4gJkpTIyN0eXBlIyNBcnJheTo6c19pbmZvOyB9
CisKK01BS0VfU19JTkZPKEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lORk8o
SW50MzIpOworTUFLRV9TX0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsK
K01BS0VfU19JTkZPKFVpbnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8o
RmxvYXQzMik7CitNQUtFX1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJy
YXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZp
bmUgSlNUeXBlZEFycmF5c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDhBZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SW50MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNV
aW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0
b3I+IEpTRmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSlNUeXBlZEFycmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50OEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U1VpbnQ4QXJyYXlfaAorI2RlZmluZSBKU1VpbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVk
QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhDbGFtcGVkQXJyYXlf
aAorI2RlZmluZSBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50MTZBcnJheV9oCisjZGVmaW5lIEpTVWludDE2QXJy
YXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQz
MkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQzMkFycmF5
X2gKKyNkZWZpbmUgSlNVaW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgi
CisKKyNlbmRpZiAvLyBKU1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw5IEBACiAjZGVmaW5lIE9wZXJhdGlvbnNfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVs
cGVycy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNs
dWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cigpIHsgfQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZl
ciA9IG5hdGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAg
IAorICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAg
ICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBu
YXRpdmUpOworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJheUJ1ZmZlcj4o
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVk
ZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBk
ZWZhdWx0IGNvbnRyb2xsZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3
ZWVuCisvLyBhcnJheSBidWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29y
ZS4gVGhpcyBpc24ndCB3aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1
c2VzIHdoZW4gcnVubmluZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgor
Ly8KKy8vIC0gSWYgdGhlIEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZm
ZXIgc3RheXMgYWxpdmUuCisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBh
IEpTQXJyYXlCdWZmZXIgYWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBh
bmQgaXQgZGlkbid0IGRpZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xh
c3MgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xs
ZXIgeworcHVibGljOgorICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmly
dHVhbCB+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpT
QXJyYXlCdWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZl
ciopOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDEzICsyMzAsMTEgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsK
KyAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKQorICAg
ICAgICAgICAgfHwgaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxs
KikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSk7Ci0gICAgfQorICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlND
ZWxsKikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNf
aAogI2RlZmluZSBTdHJ1Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKIApAQCAtMTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpnZXRDb25jCiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVj
aWZpY1ZhbHVlSWdub3JlZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhp
bmdIZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVk
UHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIGlmICghaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpT
QXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9
CisKIGlubGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2Jh
bE9iamVjdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlB
ZGFwdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlBZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgVHlwZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKwor
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwK
KyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNW
aWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAg
dHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcg
SlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0g
dHlwZVZhbHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0
X3Q+KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFs
dWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywg
dHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+
CitzdHJ1Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5
cGU7CisgICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmll
d1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlw
ZVZhbHVlID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihl
eGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKwor
c3RydWN0IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFk
YXB0b3I7CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7
CitzdHJ1Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZs
b2F0MzJBZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBl
ZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5Owor
dHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0
QXJyYXk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4g
SlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRv
cj4gSlNJbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFk
YXB0b3I+IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpT
RmxvYXQ2NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yPGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0
cnVjdCBJbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIElu
dDE2QXJyYXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFw
dG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0lu
dDMyQXJyYXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFs
VHlwZWRBcnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBl
VWludDg+IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRh
cHRvcjx1aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsg
fTsKK3N0cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50
MzJfdCwgVWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVj
dCBGbG9hdDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJB
cnJheSwgSlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFk
YXB0b3IgOiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zs
b2F0NjRBcnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0
b3IgeworICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVk
QXJyYXkgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5
cGU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50
OENsYW1wZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAg
ICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQo
dmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZl
KHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05h
dGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIo
KSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
c3RhdGljIHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1
KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29u
dHJvbGxlcjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVy
Ojp+VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNv
bnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBl
ZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJh
eUJ1ZmZlcjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBK
U0dsb2JhbE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlC
dWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0g
MDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRy
b2xsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5
RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJh
eURlc2NyaXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQot
ZW51bSBUeXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJh
eUludDgsCi0gICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBU
eXBlZEFycmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFy
cmF5VWludDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIs
Ci0gICAgVHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciB7Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDAp
Ci0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQo
MCkKLSAgICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkK
LSAgICAgICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zm
c2V0KHN0b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0
KQotICAgIHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBz
aXplX3QgbV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0K
LWVudW0gVHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAg
VW5zaWduZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRy
dW5jYXRlUm91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5SW5saW5lc19oCisjZGVm
aW5lIFR5cGVkQXJyYXlJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlSW5saW5lcy5oIgorCisjZW5kaWYgLy8gVHlwZWRBcnJheUlubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheVR5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVk
ZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpT
SW50OEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBK
U1VpbnQ4QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAg
IHJldHVybiBKU1VpbnQ4Q2xhbXBlZEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MTY6
CisgICAgICAgIHJldHVybiBKU0ludDE2QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50
MTY6CisgICAgICAgIHJldHVybiBKU1VpbnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgICAgIHJldHVybiBKU0ludDMyQXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5
cGVVaW50MzI6CisgICAgICAgIHJldHVybiBKU1VpbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5OjppbmZvKCk7Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5OjppbmZv
KCk7CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3Ojpp
bmZvKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBO
b3RUeXBlZEFycmF5OgorICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUlu
dDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVJbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJU
eXBlVWludDhDbGFtcGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6
CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlw
ZUZsb2F0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VHlwZURhdGFWaWV3OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBU
eXBlZEFycmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRBcnJheVR5cGUgewor
ICAgIE5vdFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5
cGVVaW50OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlw
ZUludDMyLAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0
NjQsCisgICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJB
WV9UWVBFUyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0g
MTsKK30KKworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBU
eXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlw
ZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5
cGVkQXJyYXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBU
eXBlVWludDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFW
aWV3OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5
cGVVaW50MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNh
c2UgVHlwZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsK
KyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xh
bXBlZDoKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2Fz
ZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBpc0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitpbmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6Cisg
ICAgY2FzZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5
cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFR5cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAi
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4
QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZB
ZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJB
ZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhB
ZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhD
bGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAg
KzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2
ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQ4QXJyYXlfaAogI2RlZmluZSBVaW50OEFycmF5X2gKIAot
I2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFs
VHlwZWRBcnJheUJhc2U8dWludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0
ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgaW5saW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBj
b25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVk
QXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8
VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVh
dGU8VWludDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJh
eT4gVWludDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
bGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0K
LQotVWludDhBcnJheTo6VWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDhBcnJheT4gVWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBj
b25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVz
aW5nIEpTQzo6VWludDhBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJ
KHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4
Q2xhbXBlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KS4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjUgQEAKICAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwog
CiAjaWZuZGVmIFVpbnQ4Q2xhbXBlZEFycmF5X2gKICNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlf
aAogCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBV
aW50OEFycmF5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8g
SXQncyBvbmx5IG5lZWRlZCB0byBwb3RlbnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBh
cnJheQotICAgIC8vIHdhcyBjcmVhdGVkIHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5p
dGlhbGl6YXRpb24gcGF0aHMKLSAgICAvLyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAg
IGlubGluZSB2b2lkIHplcm9GaWxsKCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6c2V0OwotICAgIGlubGluZSB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZh
bHVlKTsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBW
aWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhD
bGFtcGVkOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWlu
dDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0
ZTxVaW50OENsYW1wZWRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVk
QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3Jl
YXRlVW5pbml0aWFsaXplZDxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBV
aW50OENsYW1wZWRBcnJheTo6emVyb0ZpbGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgo
KSk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIHZhbHVlKQotewotICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVl
ID0gMDsKLSAgICBlbHNlIGlmICh2YWx1ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0g
ICAgZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19
Ci0KLVVpbnQ4Q2xhbXBlZEFycmF5OjpVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTog
VWludDhBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQot
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVp
bnQ4Q2xhbXBlZEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisj
aW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsK
IAogI2VuZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsx
MCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
ICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiAr
MjYsOSBAQAogI2lmbmRlZiBVaW50MTZBcnJheV9oCiAjZGVmaW5lIFVpbnQxNkFycmF5X2gKIAot
I2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAv
LyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0
IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBl
ZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50
MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQg
Y2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZB
cnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVp
bnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFy
cmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2
QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxp
emVkPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
VWludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Vi
YXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWlu
dDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXlJbXBsPFVpbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MTZB
cnJheTsKIAogI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsx
MCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
ICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiAr
MjYsOSBAQAogI2lmbmRlZiBVaW50MzJBcnJheV9oCiAjZGVmaW5lIFVpbnQzMkFycmF5X2gKIAot
I2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAv
LyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0
IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5
PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVpbnQzMl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMy
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50
MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQg
Y2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJB
cnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVp
bnQzMl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFy
cmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMy
QXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxp
emVkPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXko
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
VWludDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Vi
YXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWlu
dDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXlJbXBsPFVpbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MzJB
cnJheTsKIAogI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5j
bHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUg
IlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxB
Y3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtODcsNiArODgsNyBA
QCBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5Q29uc3RydWN0b3JUCiBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIGFycmF5UHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJv
b2xlYW5Qcm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOwor
ZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRhVmlld1RhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBkYXRlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRh
YmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMTQ1
LDYgKzE0Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIGFycmF5Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNv
bnN0cnVjdG9yVGFibGUpKQogICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hU
YWJsZT4oSlNDOjphcnJheVByb3RvdHlwZVRhYmxlKSkKICAgICAsIGJvb2xlYW5Qcm90b3R5cGVU
YWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAg
ICwgZGF0YVZpZXdUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRhVmlld1RhYmxlKSkK
ICAgICAsIGRhdGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQogICAg
ICwgZGF0ZUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0
cnVjdG9yVGFibGUpKQogICAgICwgZXJyb3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJs
ZT4oSlNDOjplcnJvclByb3RvdHlwZVRhYmxlKSkKQEAgLTI1OCw2ICsyNjEsMTAgQEAgVk06OlZN
KFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkK
ICAgICAgICAgZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsK
ICNlbmRpZgorICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5
IG9mIGFzc2VydGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0
IHVzZSB0aGlzLgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtMjg5LDYgKzI5
Niw3IEBAIFZNOjp+Vk0oKQogICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7
CiAgICAgYXJyYXlDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGJvb2xlYW5Q
cm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRhVmlld1RhYmxlLT5kZWxldGVU
YWJsZSgpOwogICAgIGRhdGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlQ29uc3RydWN0
b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVU
YWJsZSgpOwpAQCAtMzA2LDYgKzMxNCw3IEBAIFZNOjp+Vk0oKQogICAgIGZhc3REZWxldGUoY29u
c3RfY2FzdDxIYXNoVGFibGUqPihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwogICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsK
KyAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0YVZpZXdUYWJsZSkpOwog
ICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKICAgICBm
YXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsK
ICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJs
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTQwMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ry
b25nLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJh
eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9C
dW1wUG9pbnRlckFsbG9jYXRvci5oPgpAQCAtNjksMTMgKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgQ29kZUNhY2hlOwogICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogICAg
IGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBGbG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgRmxv
YXQ2NEFycmF5OwogICAgIGNsYXNzIEhhbmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXJU
YWJsZTsKLSAgICBjbGFzcyBJbnQ4QXJyYXk7Ci0gICAgY2xhc3MgSW50MTZBcnJheTsKLSAgICBj
bGFzcyBJbnQzMkFycmF5OwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwpAQCAtOTMsMTAgKzg4LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsK
ICNlbmRpZgotICAgIGNsYXNzIFVpbnQ4QXJyYXk7Ci0gICAgY2xhc3MgVWludDhDbGFtcGVkQXJy
YXk7Ci0gICAgY2xhc3MgVWludDE2QXJyYXk7Ci0gICAgY2xhc3MgVWludDMyQXJyYXk7CiAgICAg
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2Nr
OwogICAgIGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMjMwLDYgKzIyMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3Ry
dWN0b3JUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxl
OwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFi
bGUqIGRhdGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JU
YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAt
MzkwLDYgKzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVy
KiBtX2VuYWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4g
bV9wZXJCeXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xs
ZXI+IG1fdHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4
cENhY2hlOwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsK
IApAQCAtNDI4LDU1ICs0MjEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXZl
RW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxh
c3RIYXNoQ29ucyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQogICAgICAg
ICB2b2lkIHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NT
aW5jZUxhc3RIYXNoQ29ucyA9IDA7IH0KIAotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbih0eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5cGVk
QXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAgICAg
IEFTU0VSVCghbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlw
ZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8p
OyBcCi0gICAgICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsg
XAotICAgICAgICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0lu
Zm8pOyBcCi0gICAgICAgIH0gXAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
dHlwZSMjQXJyYXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVz
Y3JpcHRvci5tX2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9
Ci0KLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0gICAg
ICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAgIHJl
Z2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVnaXN0
ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3RlclR5
cGVkQXJyYXlGdW5jdGlvbih1aW50MzIsIFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlG
dW5jdGlvbgotICAgICAgICAKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5
cGVkQXJyYXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5
Tm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheUludDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJmludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJ
bnQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0g
ICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4g
JnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50
OENsYW1wZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5VWludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAg
ICAgICAgIHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJh
eURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCiAgICAgICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSBjb25zdAog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nTG9jaygpIHx8IGV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CkBAIC01
MTAsMTYgKzQ1NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faW5EZWZpbmVP
d25Qcm9wZXJ0eTsKICAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAg
ICAgIFJlZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwotCi0gICAg
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAg
VHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlw
ZWRBcnJheURlc2NyaXB0b3IgbV9pbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV91aW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IgbV91aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1fdWludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFy
cmF5RGVzY3JpcHRvciBtX3VpbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IgbV9mbG9hdDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBtX2Zsb2F0NjRBcnJheURlc2NyaXB0b3I7CiAgICAgfTsKIAogI2lmIEVOQUJM
RShHQ19WQUxJREFUSU9OKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTMtMDgtMTAgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hv
dWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICAtIEFkZGVkIHRoZSBub3Rpb24gb2YgYSByZWZlcmVuY2UgY291bnRl
ZCBvYmplY3QgdGhhdCBjYW4gYmUgbWFya2VkIERlZmVycmVkLAorICAgICAgICAgIHdoaWNoIGlz
IGxpa2UgYSBzcGVjaWFsLXB1cnBvc2UgdXByZWYuCisgICAgICAgIAorICAgICAgICAtIEFkZGVk
IGEgY29tbW9uIGJ5dGUgZmxpcHBlci4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpyZWYpOgorICAgICAgICAo
V1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6Omhhc09uZVJlZik6CisgICAgICAgIChXVEY6
OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6cmVmQ291bnQpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2U6OmlzRGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJh
YmxlUmVmQ291bnRlZEJhc2U6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSk6CisgICAgICAgIChX
VEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6fkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSk6
CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6ZGVyZWZCYXNlKToKKyAg
ICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpzZXRJc0RlZmVycmVkQmFzZSk6
CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjpkZXJlZik6CisgICAgICAgIChX
VEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjpzZXRJc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6
RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OkRlZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKFdU
Rjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6On5EZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAg
ICogd3RmL0ZsaXBCeXRlcy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bmVlZFRvRmxpcEJ5dGVz
SWZMaXR0bGVFbmRpYW4pOgorICAgICAgICAoV1RGOjpmbGlwQnl0ZXMpOgorCiAyMDEzLTA4LTEz
ICBBcnVucHJhc2FkIFJhamt1bWFyICA8YXJ1cmFqa3VAY2lzY28uY29tPgogCiAgICAgICAgIFtX
VEZdIFtKU0NdIFJlcGxhY2UgY3VycmVudFRpbWUoKSB3aXRoIG1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpIGluIGFsbCBwb3NzaWJsZSBwbGFjZXMKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
OCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0
Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07
CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2
QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CisJCTBGMkI2NkE3
MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0
ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2
NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMw
MDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0
aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAxMDMwMDdEQkRBNSAvKiBDb21waWxh
dGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICov
OyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBNDE3
QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlw
Qnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAw
OTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUw
MEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhG
MkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYz
MCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFsTnVt
YmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51bWJl
ci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNvZGVyLmggKi8sCisJ
CQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8s
CiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERlcXVlLmggKi8sCiAJCQkJQThBNDcy
N0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKIAkJCQlBOEE0NzI4MDE1
MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oICovLApAQCAtNjQ4LDYgKzY1Myw3
IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAg
Ki8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICov
LAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBGaXhlZEFycmF5LmggKi8sCisJCQkJ
MEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovLAogCQkJCUE4QTQ3MkE2
MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJCQkJQThBNDcyQTcxNTFBODI1QTAw
NDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFEOEI5RDE3MzE4Nzk4MDAxNDFEQTQg
LyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5NCw2ICsxMDAwLDcgQEAKIAkJCQlB
OEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1JhbmRvbVNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZGIC8qIE93bkFycmF5UHRyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZDMTUxQTgyNUIwMDQxMjNGRiAv
KiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZEMTUxQTgyNUIwMDQxMjNGRiAv
KiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZFMTUxQTgyNUIwMDQx
MjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1Nyw2ICsxMDY0
LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNzE3QjZC
NEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0OTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1p
dGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291
bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9o
CisjZGVmaW5lIERlZmVycmFibGVSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3Vu
dGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5jZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFu
ZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBoYXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBk
ZWZlcnJhbCBhcworLy8ganVzdCBiZWluZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhh
dCB5b3UgY2FuIGRldGVjdCBpZiBpdCBoYXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRo
aXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIgZm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBl
dmVuIGZvciBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFn
ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9ybWFsSW5jcmVtZW50ID0gMjsKKyAg
ICAKK3B1YmxpYzoKKyAgICB2b2lkIHJlZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ICs9
IG5vcm1hbEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkgPT0gMTsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVm
Q291bnQgLyBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWZlcnJl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEobV9yZWZDb3VudCAmIGRlZmVycmVk
RmxhZyk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVk
QmFzZSgpCisgICAgICAgIDogbV9yZWZDb3VudChub3JtYWxJbmNyZW1lbnQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgZGVyZWZCYXNlKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgLT0g
bm9ybWFsSW5jcmVtZW50OworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorCisg
ICAgYm9vbCBzZXRJc0RlZmVycmVkQmFzZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICBtX3JlZkNvdW50IHw9IGRlZmVycmVkRmxhZzsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ICY9IH5k
ZWZlcnJlZEZsYWc7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVmQ291bnRl
ZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQor
ICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFQqPih0aGlzKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVycmVkKGJv
b2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXNldElzRGVmZXJyZWRCYXNlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQq
Pih0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgor
ICAgIERlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVk
KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxl
UmVmQ291bnRlZDsKKworI2VuZGlmIC8vIERlZmVycmFibGVSZWZDb3VudGVkX2gKKwpJbmRleDog
U291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
RmxpcEJ5dGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlwQnl0
ZXNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitp
bmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVuZGlh
bikKK3sKKyNpZiBDUFUoQklHX0VORElBTikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOworI2Vs
c2UKKyAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWludDE2
X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgw
MGZmKSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitpbmxp
bmUgdWludDMyX3QgZmxpcEJ5dGVzKHVpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZh
bHVlICYgMHgwMDAwMDBmZikgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZmMDAp
IDw8IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZsaXBC
eXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwMDAw
MDAwMDBmZmxsdSkgPDwgNTYpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwZmYw
MGxsdSkgPDwgNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxsdSkg
PDwgMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwgOCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAgICAg
ICB8ICgodmFsdWUgJiAweDAwMDBmZjAwMDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8ICgo
dmFsdWUgJiAweDAwZmYwMDAwMDAwMDAwMDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFsdWUg
JiAweGZmMDAwMDAwMDAwMDAwMDBsbHUpID4+IDU2KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSBUIGZsaXBCeXRlcyhUIHZhbHVlKQoreworICAgIGlmIChzaXplb2YodmFsdWUp
ID09IDEpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSAy
KSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAg
ICB1aW50MTZfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1
ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1
Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KSB7CisgICAgICAg
IHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MzJfdCB3
b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAg
dS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOwor
ICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSA4KSB7CisgICAgICAgIHVuaW9uIHsKKyAg
ICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50NjRfdCB3b3JkOworICAgICAg
ICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxp
cEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihUIHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbikKK3sKKyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAgICAgcmV0dXJuIGZsaXBCeXRlcyh2YWx1ZSk7Cisg
ICAgcmV0dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpu
ZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbjsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzOwordXNp
bmcgV1RGOjpmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbjsKKworI2VuZGlmIC8vIEZsaXBCeXRlc19o
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBAQAorMjAxMy0wOC0xMiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91
bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUeXBlZCBhcnJheXMgYXJlIG5vdyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0Q29y
ZSwgYW5kIFdlYkNvcmUgaXMgbWVyZWx5IGEKKyAgICAgICAgY2xpZW50IG9mIHRoZW0uIFRoZXJl
IGlzIG9ubHkgb25lIGxheWVyaW5nIHZpb2xhdGlvbjogV2ViQ29yZSBpbnN0YWxscyBhCisgICAg
ICAgIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlciBvbiBWTSwgd2hpY2ggbWFrZXMgdGhlCisg
ICAgICAgIEFycmF5QnVmZmVyPC0+SlNBcnJheUJ1ZmZlciByZWxhdGlvbnNoaXAgcmVzZW1ibGUg
RE9NIHdyYXBwZXJzLiBCeSBkZWZhdWx0LAorICAgICAgICBKU0MgbWFrZXMgdGhlIG93bmVyc2hp
cCBnbyBvbmUgd2F5OyB0aGUgSlNBcnJheUJ1ZmZlciBrZWVwcyB0aGUgQXJyYXlCdWZmZXIKKyAg
ICAgICAgYWxpdmUgYnV0IGlmIEFycmF5QnVmZmVyIGlzIGtlcHQgYWxpdmUgZnJvbSBuYXRpdmUg
Y29kZSB0aGVuIHRoZQorICAgICAgICBKU0FycmF5QnlmZmVyIG1heSBkaWUuIFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlciB3aWxsIGtlZXAgdGhlCisgICAgICAgIEpTQXJyYXlCdWZmZXIgYWxp
dmUgaWYgdGhlIEFycmF5QnVmZmVyIGlzIGluIHRoZSBvcGFxdWUgcm9vdCBzZXQuCisgICAgICAg
IAorICAgICAgICBUbyBtYWtlIG5vbi1KU0RPTVdyYXBwZXJzIGJlaGF2ZSBsaWtlIERPTSB3cmFw
cGVycywgYSBidW5jaCBvZiBjb2RlIGlzCisgICAgICAgIGNoYW5nZWQgdG8gbWFrZSBtb3N0IHJl
ZmVyZW5jZXMgdG8gd3JhcHBlcnMgcmVmZXIgdG8gSlNPYmplY3QqIHJhdGhlciB0aGFuCisgICAg
ICAgIEpTRE9NV3JhcHBlciouCisgICAgICAgIAorICAgICAgICBBcnJheSBidWZmZXIgdmlld3Mg
YXJlIG5vdyB0cmFuc2llbnQ7IHRoZSBKUyBhcnJheSBidWZmZXIgdmlldyB3cmFwcGVycworICAg
ICAgICBkb24ndCBvd24gdGhlbSBvciBrZWVwIHRoZW0gYWxpdmUuIFRoaXMgcmVxdWlyZWQgYSBi
dW5jaCBvZiBjaGFuZ2VzIHRvIG1ha2UKKyAgICAgICAgYmluZGluZ3MgY29kZSB1c2UgUmVmUHRy
PEFycmF5QnVmZmVyVmlldz4gdG8gaG9sZCBvbnRvIHRoZWlyIHZpZXdzLgorICAgICAgICAKKyAg
ICAgICAgQWxzbyB0aGVyZSBpcyBhIGJ1bmNoIG9mIG5ldyBjb2RlIHRvIG1ha2UgSlNDLXByb3Zp
ZGVkIGFycmF5IGJ1ZmZlcnMgYW5kCisgICAgICAgIHZpZXdzIG9iZXkgdGhlIHRvSlMvdG88Q2xh
c3NOYW1lPiBpZGlvbSBmb3Igd3JhcHBpbmcgYW5kIHVud3JhcHBpbmcuCisgICAgICAgIAorICAg
ICAgICBGaW5hbGx5LCB0aGUgRGF0YVZpZXcgQVBJIGlzIG5vdyBjb21wbGV0ZWx5IGRpZmZlcmVu
dDogdGhlIEpTRGF0YVZpZXcKKyAgICAgICAgcHJvdmlkZXMgdGhlIHNhbWUgdXNlci12aXNpYmxl
IEpTIEFQSSBidXQgdXNpbmcgaXRzIG93biBpbnRlcm5hbCBtYWdpYzsgdGhlCisgICAgICAgIEMr
KyBjb2RlIHRoYXQgdXNlcyBEYXRhVmlldyBub3cgdXNlcyBhIHJhdGhlciBkaWZmZXJlbnQgQVBJ
IHRoYXQgaXMgbm90CisgICAgICAgIGF3YXJlIG9mIHVzdWFsIERPTSBzZW1hbnRpY3MsIHNpbmNl
IGl0J3MgaW4gSlNDIGFuZCBub3QgV2ViQ29yZS4gSXQncworICAgICAgICBlcXVhbGx5IHVzZWZ1
bCBmb3IgYWxsIG9mIFdlYkNvcmUncyBwdXJwb3NlcywgYnV0IHNvbWUgY29kZSBoYWQgdG8gY2hh
bmdlCisgICAgICAgIHRvIGFkYXB0IHRoZSBuZXcgY29udmVudGlvbnMuCisgICAgICAgIAorICAg
ICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3
YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAg
ICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaDoKKyAg
ICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NTU1J1bGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NyeXB0bzo6Z2V0UmFuZG9tVmFsdWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJPd25lcik6CisgICAg
ICAgIChXZWJDb3JlOjp3cmFwcGVyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldElubGluZUNhY2hlZFdyYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldENhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVX
cmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnVuY2FjaGVXcmFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0FycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjp0b0ludDhBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0ludDE2QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQz
MkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVWludDhBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1VpbnQ4Q2xhbXBlZEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVWludDE2QXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50MzJBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0Zsb2F0MzJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b0Zsb2F0NjRBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0RhdGFWaWV3KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rh
dGFWaWV3Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNEb2N1bWVudDo6bG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1dlYkNvcmVKU0NsaWVudERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXROb3JtYWxXb3Js
ZENsaWVudERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9K
Uyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJy
YXlCdWZmZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmZp
bmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OndyYXBwZXJPd25lcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtOgorICAgICAgICAoRm9yQWxsUGFyZW50cyk6CisgICAgICAgIChQYXJzZUludGVyZmFj
ZSk6CisgICAgICAgIChTa2lwSW5jbHVkZUhlYWRlcik6CisgICAgICAgIChJc1R5cGVkQXJyYXlU
eXBlKToKKyAgICAgICAgKElzV3JhcHBlclR5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlKToKKyAg
ICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24p
OgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAoR2V0TmF0aXZl
VHlwZSk6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoTmF0aXZlVG9KU1Zh
bHVlKToKKyAgICAgICAgKEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAg
KEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzKToKKyAgICAgICAgKiBmaWxlYXBpL1dl
YktpdEJsb2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBl
bmQpOgorICAgICAgICAqIGZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52
YXMvQXJyYXlCdWZmZXJWaWV3LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9E
YXRhVmlldy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9EYXRhVmlldy5pZGw6IFJlbW92ZWQuCisg
ICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0ludDE2QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lu
dDMyQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0ludDhBcnJheS5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsOiBSZW1v
dmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0RhdGEpOgorICAgICAgICAqIHBhZ2Uv
Q3J5cHRvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2hvdWxkV2FpdEZvckxvYWRp
bmdPZlJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmV4dHJhY3RLZXlVUklLZXlJREFuZENlcnRpZmljYXRlRnJvbUluaXREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgor
ICAgICAgICAqIHRlc3RpbmcvTW9ja0NETS5jcHA6CisKIDIwMTMtMDgtMTMgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGb286OnNfaW5mbyBzaG91bGQgYmUgRm9v
OjppbmZvKCksIHNvIHRoYXQgeW91IGNhbiBjaGFuZ2UgaG93IHRoZSBzX2luZm8gaXMgYWN0dWFs
bHkgbGlua2VkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1
NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MiwzMSArMzgyLDE5IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUp
L2h0bWwvVGltZVJhbmdlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9WYWxpZGl0eVN0YXRl
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzR3JhZGllbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1Bh
dHRlcm4uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1Byb3h5LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9ET01QYXRoLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9FWFREcmF3QnVmZmVycy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9G
bG9hdDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwgXAotICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvSW50OEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9P
RVNFbGVtZW50SW5kZXhVaW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNT
dGFuZGFyZERlcml2YXRpdmVzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlRmxvYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVI
YWxmRmxvYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwg
XAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9XZWJHTEFjdGl2ZUluZm8uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0MDM4
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIz
NSw3ICsyMzUsNiBAQCBfX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQCiBf
X1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tpZUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJL
TlNfNEtVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBf
X1pON1dlYkNvcmUxMmljb25EYXRhYmFzZUV2Ci1fX1pON1dlYkNvcmUxMnRvVWludDhBcnJheUVO
M0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYK
IF9fWk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTE4cm9vdE9iamVjdEZvckZyYW1lRVBOU181RnJh
bWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUyMWdBY2Nlc3NpYmlsaXR5RW5hYmxlZEUK
QEAgLTI4OCw3ICsyODcsNiBAQCBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4
ZWNTCiBfX1pON1dlYkNvcmUxM2RpcmVjdG9yeU5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dl
YkNvcmUxM2xpc3REaXJlY3RvcnlFUktOM1dURjZTdHJpbmdFUzNfCiBfX1pON1dlYkNvcmUxM3Bv
aW50ZXJDdXJzb3JFdgotX19aTjdXZWJDb3JlMTN0b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50
RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNv
cmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGll
bnRFCkBAIC05MDcsNyArOTA1LDYgQEAgX19aTjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNv
cmU0UGF0aEQxRXYKIF9fWk43V2ViQ29yZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCiBf
X1pON1dlYkNvcmU0Y29yZUVQMjhOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi1fX1pON1dl
YkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOUzBf
MTFBcnJheUJ1ZmZlckUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFUE5TXzEwQ2xpZW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBO
M0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEzRE9NU3RyaW5nTGlz
dEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxP
YmplY3RFUE5TXzE0Q2xpZW50UmVjdExpc3RFCkBAIC0yNzQzLDcgKzI3NDAsNiBAQCBfX1pON1dl
YkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxNnJldHVyblRvCiBfX1pOSzdXZWJDb3JlMTZIVE1MTWVk
aWFFbGVtZW50MTJpc0Z1bGxzY3JlZW5FdgogX19aTjdXZWJDb3JlMTBUaW1lUmFuZ2VzM2FkZEVk
ZAogX19aTjdXZWJDb3JlMTJ0b1RpbWVSYW5nZXNFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29y
ZTE0dG9GbG9hdDMyQXJyYXlFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pT
QzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0UKIF9f
Wk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM3bmVhcmVzdEVkCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0Rh
dGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZX
RF9EYXRhVmlld19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2Vi
Q29yZV9GV0RfSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZm
ZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZmZXIuaD4KKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJW
aWV3X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdfaAorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmll
dy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNEYXRhVmlld19o
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEYXRhVmlldy5oPgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
VHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0pTVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJh
eXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRB
cnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdl
YkNvcmVfRldEX1R5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlD
b250cm9sbGVyLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVk
QXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJD
b3JlX0ZXRF9UeXBlZEFycmF5SW5saW5lc3NfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFy
cmF5SW5saW5lc3NfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19oCisjZGVm
aW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9U
eXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDE1ICsyNiwxMiBAQAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gKIAog
I2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEZsb2F0MzJBcnJheTsKLWNsYXNzIFVpbnQ4QXJy
YXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9CdXM7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsOCBAQAogCQkwQzQ1MzQy
NzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNTEwQ0RCQkZBMDA4
NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07CiAJCTBDNDUzNDI4MTBD
REJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcg
LyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OwogCQkwRjA5MDg3RjE0NDRGREIyMDAw
Mjg5MTcgLyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAwREIzM0JBIC8qIFNjcm9sbGJhclRo
ZW1lLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjExQTU0
RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovOyB9OwogCQkwRjEz
MTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0Mw
NCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyB9OwogCQkwRjEzMTY0MDE2RUQwQ0RFMDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1D
QUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04MjgsMTEgKzgzMCw2IEBACiAJCTJFNzU4NDFGMTI3
NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIg
LyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovOyB9OwogCQkyRTk0RjQzQjExOTIwN0RBMDBC
N0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
Y3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzQTEx
OTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07Ci0JCTJFOTdDQ0VBMTI5MzlD
QjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3Bw
ICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U4MTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9OwotCQkyRTk3Q0NGNzEyOTNBNDNBMDBDNUM4RkYg
LyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3Rv
bS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZE
MTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKLQkJMkU5N0NFNzAxMjkz
QUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3
LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCAq
LzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNE
MDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCAqLzsgfTsKIAkJMkVC
NEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJDRDExMjFGMDNFMzAwRUM0
ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OwpAQCAtMTI4OCw4ICsxMjg1LDYgQEAK
IAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjM3NjBCMTVDNkM2ODQwMDU5MTMx
RCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLzsg
fTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07Ci0JCTQ5QzdCOTk1MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3Bw
ICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgzMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovOyB9OwogCQk0OUM3Qjk5NzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
RnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmgg
Ki87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4ODEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovOyB9OwpAQCAtMTM1MCwyMiAr
MTM0NSw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY0
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVDRUI2RjE0OTk3OTBEMDBDREQzQTQg
LyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9u
cy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRp
b25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVD
RUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVDRjAwMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYz
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi87IH07Ci0JCTQ5RUVDRjAyMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNG
bG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNG
bG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyB9Owot
CQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY2MTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNTEwNTA3MEM0MDAwOTlG
QUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggKi87
IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjgxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjA3MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXku
aCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQTEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDkxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZDMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMEIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5Lmgg
Ki87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZFMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMEQxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQx
NkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVm
ZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovOyB9
OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFBMTA1MDcy
RjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBAIC0xODI3LDggKzE4MDYsNiBAQAogCQk2RTY3RDJB
NjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE0MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovOyB9OwogCQk2RTY3RDJBNzEyODBFOEE0MDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9u
czNET3BlbkdMLmggKi87IH07CiAJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
NjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKLQkJNkVCQzVF
QUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAv
KiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07Ci0JCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAv
KiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87
IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4
OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CiAJCTZFQkYwRTQ5MTJB
ODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ2MTJBODkyNjEwMERCMTcwOSAvKiBPRVNU
ZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNTQxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdM
RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkYwRTUyMTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAgKi87IH07
CkBAIC0yNTg5LDcgKzI1NjYsNiBAQAogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9N
S2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICov
OyB9OwogCQk4NjFDMkVBNDEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUEz
MTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICovOyB9OwogCQk4NjFD
MkVBNjEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUE1MTNGQjRGRkYwMDA2
MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovOyB9OwotCQk4NjI0M0QwMTExQkMzMUY3
MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBK
U0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovOyB9OwogCQk4NjUxMkVERTE1NEEyQUVGMDBBOTA0
MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYgLyogUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgKi87IH07CiAJCTg2NTEyRURGMTU0QTJBRUYwMEE5
MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovOyB9OwogCQk4NkJBNzY2RTE2NjQyN0E4MDA1QkU1
RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkJBNzY2RDE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVx
dWVzdC5jcHAgKi87IH07CkBAIC0yNzAzLDggKzI2NzksNiBAQAogCQk5MDAxNzc0MTEyRTAzNDc4
MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKIAkJOTAwMTc4ODAxMkUwMzcwNzAwNjQ4NDYy
IC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNT
dGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLzsgfTsKIAkJOTAwMTc4ODExMkUwMzcwNzAwNjQ4NDYy
IC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwotCQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZDNDkgLyog
SlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCAqLzsgfTsKLQkJOTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVk
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovOyB9
OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMg
LyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAw
QzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDY1NSw3ICs0NjI5LDYgQEAK
IAkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzRCMkUx
NDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovOyB9OwogCQlC
QzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0QjMwMTQw
RUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovOyB9OwogCQlC
QzI3NUI3OTExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NUI3ODExQzVEMUMz
MDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi87IH07Ci0JCUJDMjc1Q0IzMTFD
NUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAv
KiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyOTkzNUQxN0ExREQ1ODAwQkNF
ODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlw
ZS5jcHAgKi87IH07CiAJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovOyB9Owog
CQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3QTE0MEYx
RDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi87IH07CkBAIC02NDgwLDYg
KzY0NTMsOCBAQAogCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9j
YXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlk
bDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1
MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
MUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1D
QUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUZp
bHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
c01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBsYXRmb3Jt
Q0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzEzNCwxMiArNzEwOSw2IEBACiAJCTJFNzU4
NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgcGF0aCA9
IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVJlYWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0Zp
bGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlUmVhZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhG
RiAvKiBEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
YXRhVmlldy5jcHA7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YVZpZXcuaDsgcGF0aCA9IGNhbnZhcy9E
YXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFOTEyOTM5Q0I4
MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERhdGFWaWV3
LmlkbDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXdDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYg
LyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NFNkUxMjkz
QUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUE3Njgw
MzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRo
ID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iUmVzb3VyY2VI
YW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMTEyMUYwM0Uz
MDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzY1NCw4ICs3NjIzLDYgQEAKIAkJNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFy
cmF5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5
ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQ4QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFBy
b2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFBy
b2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY2OSw3ICs3NjM2LDYg
QEAKIAkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQnVmZmVyLmNwcDsgcGF0aCA9IGNh
bnZhcy9XZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdC
OUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJHTEJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAv
KiBXZWJHTEJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xCdWZmZXIuaWRs
OyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gSW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQ4QXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcg
LyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUYxMDQyRDMyRTAwMDlE
NDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QjAxMDQyRDMyRTAwMDlENDQ3IC8q
IFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMRnJhbWVi
dWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzcyNSwzMCArNzY5MSw2IEBACiAJCTQ5RUNFQjY0MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNFQjY2MTQ5OTc5MEQw
MENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDOTEwNTAzQzIzMDAwOTlG
QUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBBcnJheUJ1
ZmZlclZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1
ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXIuaWRsOyBwYXRoID0g
Y2FudmFzL0FycmF5QnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlF
RUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gRmxvYXQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDMyQXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REMjEwNTAzQzIzMDAwOTlGQUIg
LyogSW50MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MzJBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvSW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQxNkFycmF5LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQxNkFycmF5Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFC
IC8qIFVpbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4QXJyYXkuaWRs
OyBwYXRoID0gY2FudmFzL1VpbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWludDMyQXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFVpbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50MzJBcnJh
eS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERFMTA1MDNDMjQwMDA5
OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDE2QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJy
YXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjQxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQzMkFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjgxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0ludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDhBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50
OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZDMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTVWludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDE2QXJyYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIg
LyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Vp
bnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjE5MTA1MDcy
RjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNF
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjM4LDkgKzgxODAsNiBAQAog
CQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAv
KiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdE
MkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUQxMzhCNTBGMjAw
QTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxv
YXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZs
b2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZs
b2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5o
OyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuaWRsOyBwYXRoID0gY2FudmFz
L09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTc4
LDcgKzg5MTcsNiBAQAogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRF
dmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01LZXli
b2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFDMkVBMzEzRkI0
RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZFRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VM
b2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyNDNEMDAxMUJD
MzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRUREMTU0QTJBRUYw
MEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkxMTMsOSArOTA1MSw2IEBACiAJCTkwMDE3NzNGMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNTdGFuZGFyZERlcml2
YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0UxMkUwMzcw
NzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIgLyogSlNP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5
IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFtcGVkQXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVp
bnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAv
KiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM0Miw3ICsxMTI3Nyw2
IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjc0QjMwMTQwRUJFRDgw
MEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2Vi
S2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
Mjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyog
Q29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY0
QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xD
b250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwMjUsOCAr
MTM5NTksNiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVFQ0RDQzEwNTAzQzIz
MDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLAotCQkJCTQ5RUVDREM5MTA1MDNDMjMwMDA5
OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovLAogCQkJCTZFNEU5MUE3MTBGN0ZCMzEwMEEy
Nzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJNkU0RTkxQTgxMEY3
RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJNDk0ODRG
QjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKQEAgLTE0MDQ3LDkg
KzEzOTc5LDYgQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNT
dHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAg
Ki8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8sCi0JCQkJ
MkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLywKIAkJCQlGQjkxMzky
MDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovLAogCQkJCUZCOTEzOTIxMTZBRTRCMEIw
MDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywKIAkJCQlBMDI0NTc0RTE2Q0VBQTI3MDAwRTU2NzEg
LyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApAQCAtMTQwNTgsMTEgKzEzOTg3LDYgQEAKIAkJCQk3
NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNw
cCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5NEQxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8sCi0JCQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFC
IC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0JCQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8q
IEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIElu
dDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQzMkFy
cmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFycmF5Lmlk
bCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWlu
dC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRl
eFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA3NywxMCArMTQwMDEsNiBAQAogCQkJCTc3QTE3QTZF
MTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi8sCiAJCQkJNzdB
MTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmggKi8sCiAJCQkJ
NzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmlkbCAqLywK
LQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICovLAotCQkJ
CTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJBcnJheS5pZGwgKi8sCi0JCQkJNDlF
RUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovLAotCQkJCTkxQTM5MDU4
MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJheS5pZGwgKi8sCiAJCQkJQTdEMjBG
NkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5oICovLAogCQkJCUE3RDIwRjNC
MTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8uaWRsICovLAogCQkJCTQ5QzdCOUE4
MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8sCkBAIC0xNjY0NSwxMCArMTY1
NjUsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAwQjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAotCQkJCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0JCQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKLQkJCQk0OUVFQ0YxQTEwNTA3MkYzMDAwOTlGQUIg
LyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQlCRThFRjAzRTE3MUM4RkY5MDA5QjQ4QzMg
LyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJCQlCRThFRjAzRjE3MUM4RkY5MDA5QjQ4QzMgLyog
SlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4RUYwNDAxNzFDOEZGOTAwOUI0OEMzIC8qIEpTQXVk
aW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2NjIsOCArMTY1NzgsNiBAQAogCQkJCTQ5RUVEMTNE
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0
OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
ICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3
LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICov
LAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNwcCAqLywK
IAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oICovLAogCQkJ
CUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovLApAQCAtMTY2Nzgs
MTAgKzE2NTkyLDYgQEAKIAkJCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3
QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgxMTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5ODIxNEZEOUFEQTAwRjQ4NERD
IC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCi0JCQkJNDlFRUNFRjQxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGNTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLywKLQkJCQk2RUJDNUVBRDEzOEI1MEYy
MDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovLAotCQkJCTZFQkM1RUFFMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAogCQkJCUJDOTdFNDEwMTA5MTU0RkEwMDEw
RDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQlCQzk3RTQxMTEwOTE1NEZB
MDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oICovLAogCQkJCTFBNEEyREVCMEExQjg1
MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNwcCAqLywKQEAgLTE2ODM1LDEyICsx
Njc0NSw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTSFRNTFZpZGVvRWxl
bWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5j
cHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi8s
Ci0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8sCi0J
CQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovLAotCQkJCTQ5
RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVD
RUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQk0OUM3Qjk4MjEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovLAotCQkJCTQ5QzdCOTgzMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUNEMjdGNkUyMTQ1NzY3NTgwMDc4
MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQ0QyN0Y2RTMxNDU3Njc1ODAw
NzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmggKi8sCiAJCQkJRTQ0NjE0MTAwQ0Q2ODI2OTAw
RkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAgKi8sCkBAIC0xNjg3MywxNCArMTY3NzcsNiBAQAog
CQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLywKIAkJCQkw
Nzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmNwcCAqLywKIAkJCQkwNzg0
NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmggKi8sCi0JCQkJNDlFRUNFRkUx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZGMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkMxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZEMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBK
U1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywKLQkJCQk5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkg
LyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTE1Qzc3MDkyMTAwRDNDQTgwMDVCQTI2
NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovLAogCQkJCTE1Qzc3MDkxMTAwRDNDQTgwMDVCQTI2
NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywKIAkJCQlCRThFRjA0NjE3MUM5MDE0MDA5QjQ4QzMg
LyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAgLTE4NzgwLDYgKzE4Njc2LDggQEAKIAkJCQlBNzVF
NDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLywKIAkJ
CQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8s
CiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuaCAq
LywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8q
IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJCUUxQTY0M0YxMEVDMDk3MjUwMDc3
OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8sCiAJCQkJRjM0NzQyRTYxMzQzNjM1
MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcCAqLywKQEAgLTE4ODM1LDgg
KzE4NzMzLDYgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMyNzVDQjIxMUM1RTg1
QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovLAotCQkJCTg2MjQzRDAwMTFC
QzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovLAogCQkJCUJDMkVE
NkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAogCQkJCUNEREU2OTFE
MTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcCAqLywKIAkJCQlGREVB
QUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3Bw
ICovLApAQCAtMTg4NjIsNyArMTg3NTgsNiBAQAogCQkJCUFENzI2RkVBMTZEOUY0MEIwMDNBNEU2
RCAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCAqLywKIAkJCQlFMUFEMTRFNzEyOTcz
Nzc0MDBBQ0E5ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwICovLAogCQkJCUJDMjBGQjdF
MEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKLQkJCQkyRTk3Q0NG
NjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8sCiAJCQkJNDE2MkE0
NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwICovLAogCQkJCTMxRkIxQTZCMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2
ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk1OTBFMUI0QTExRTRFRjcwMDA2OUY3ODQgLyogSlNEZXZp
Y2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKQEAgLTIxMzIxLDcgKzIxMjE2LDYgQEAK
IAkJCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OTkxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zl
ckl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTlBMTMxNjM2RTYwMDA5QTdFMCAvKiBE
YXRhVHJhbnNmZXJJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NDRUIxMjkzOUNC
ODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTczMkIwQjEzNkEx
NjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
REI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjE4MzAsNiArMjE3MjQsNyBAQAogCQkJCTg5M0M0ODBGMTI0OEJEM0EwMDJCM0Q4
NiAvKiBGaWxlRW50cnlTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4MzEyMkI4QTNE
MDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURGMzY5RjEyMkM5
NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwOTlE
MDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3NEY5IC8qIEZpbGVJY29uTG9hZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyogRmlsZUlu
cHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjM5LDkgKzIyMTM0LDYgQEAKIAkJCQkx
QzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNBMTJCMDNGNTAwMDNBNTgzQSAvKiBKU0FuYWx5
c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjFDMTA1MDcyRjMwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYyNDNEMDEx
MUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMwMiw3ICsyMjE5NCw2IEBACiAJCQkJMUFF
ODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI1OURENjk5MTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDU4MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVEMjEy
QjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRkIx
QTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTIyMzc1LDggKzIyMjY2LDYgQEAKIAkJCQk4OTg3ODVCMzEyMkNBMkE3MDAzQUFCREEg
LyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2REE4NDRFMTIy
NEEwNzEwMDYwRDAwNiAvKiBKU0ZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg5M0M0
N0JDMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggaW4g
SGVhZGVycyAqLywKLQkJCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjdCMTRFQUMwODYwMDkwRDc1RSAvKiBKU0Zv
Y3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREMwMTZCN0YzOEUwMENCQTNGQyAv
KiBKU0ZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUFDMTJCMDNFRTEwMDNB
NTgzQSAvKiBKU0dhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDc3LDkgKzIyMzY2LDYg
QEAKIAkJCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdBMEU3NkRCMTBCRjA1OTgwMEEwMjc2RSAvKiBKU0luamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MUYxMEMwMERCMTAwQTAyNzZFIC8qIEpT
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwNzEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
NTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDNUZBRUQyMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJk
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFGQiAvKiBK
U0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzI5LDEwICsyMjYxNSw2
IEBACiAJCQkJRTE3QjQ5MjExNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ1RDBBOTBERUUxMDAwRkYyMTUgLyogSlNUcmVlV2Fs
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlDRjA5REEyQjQ3MDA5NjMzQTUgLyogSlNV
SUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlGQUIgLyog
SlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMEIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA5MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTkxMDg5RDMy
MTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQUE0RkFEMjE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVlc3RFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlk
ZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDczMiw3ICsyNDYxNCw2IEBACiAJCQkJOTdC
QzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01T
dHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZG
IC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzMyQjBBMTM2QTE2MUQwMDVD
OEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCNTEy
NTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNTM4OCw5ICsyNTI2OSw2IEBACiAJCQkJMUM4MUJBMDkwRTk3MzQ4MzAwMjY2
RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE4Rjg4
MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0Fy
cmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjFCMTA1MDcyRjMw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURG
MzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFOUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNTQ3MCw4ICsyNTM0OCw2IEBACiAJCQkJMUFFODJGOEYwQ0FBRkE5RDAw
MjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2OUExMTkw
MjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0NTcxMDExNDY0NzAwREZGM0VEIC8q
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2
MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNBIC8qIEpT
RGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1NDMsOCArMjU0MTksNiBAQAogCQkJ
CTg5ODc4NUY0MTIyRTFFQUMwMDNBQUJEQSAvKiBKU0ZpbGVSZWFkZXJTeW5jLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5ODc4NUIyMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0ZW1DYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdCQjEyMzhBMEE5MDAyQjNEODYgLyog
SlNGaWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDIxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZF
QkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNkQ5RDI3QzE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZEQTE1RUFCMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0dhaW5Ob2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xv
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2MDMsNiArMjU0NzcsNyBAQAogCQkJCUE2
MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMwQTFDRTYzQjAwQjQyQjI1IC8qIEpT
SFRNTExlZ2VuZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwOTlEMDgxN0I5NjhB
MTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxMaW5r
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFEMTM5QjEyOTVEOTI2MDBBQ0E5ODkg
LyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTY1Nyw5
ICsyNTUzMiw2IEBACiAJCQkJRjMxNjM5NkUxMzI5NDg3NjAwQTY0OUNCIC8qIEpTSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEw
Mjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOTk1MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBE
Q0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8q
IEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTQxLDEwICsyNTgxMyw2
IEBACiAJCQkJMUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2Vy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQwMDlEQTJCNDgwMDk2MzNBNSAv
KiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEExMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlF
RUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBQUE0RkFEMzE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVl
c3RFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3NzA5NDEwMEQzQ0E4MDA1QkEyNjcg
LyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOEVGMDRBMTcxQzkw
MTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNpb24gMTU0
MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBKU0RP
TVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogCi10eXBlZGVmIEhhc2hNYXA8dm9p
ZCosIEpTQzo6V2VhazxKU0RPTVdyYXBwZXI+ID4gRE9NT2JqZWN0V3JhcHBlck1hcDsKK3R5cGVk
ZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+ID4gRE9NT2JqZWN0V3Jh
cHBlck1hcDsKIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzo6SlNTdHJp
bmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+ID4gSlNTdHJpbmdDYWNoZTsKIAogY2xhc3MgRE9NV3Jh
cHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJh
eUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0KLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganND
YXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLQotICAgIGlu
dCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQotICAgICAg
ICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOyAvLyBOYU4vK2luZi8t
aW5mIHJldHVybnMgMCwgdGhpcyBpcyBpbnRlbmRlZCBieSBXZWJJREwKLSAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAgIGJ1ZmZlciA9
IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIDEpOwot
ICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwg
ZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYnVmZmVy
LmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgJKHJl
dmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBK
U0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0jZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVy
X2gKLQotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlCYXNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIHRvb0xhcmdlU2l6ZSA9ICJTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRpdmUpLiI7
Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1ib29sIGNvcHlUeXBlZEFycmF5QnVm
ZmVyKEMqIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZUxl
bmd0aCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUg
c291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChzb3VyY2VUeXBlICE9
IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KTsKLQotICAgIGlmICh0YXJnZXQtPmdldFR5
cGUoKSA9PSBzb3VyY2VUeXBlKSB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5zZXQoc3RhdGljX2Nh
c3Q8Qyo+KHNvdXJjZSksIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghdGFyZ2V0LT5jaGVja0luYm91bmRE
YXRhKG9mZnNldCwgc291cmNlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c3dpdGNoIChzb3VyY2VUeXBlKSB7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4
OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRB
cnJheUJhc2U8c2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50ODoKLSAgICBjYXNlIEFycmF5
QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9m
ZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+ICo+KHNv
dXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVJbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRp
Y19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRlbShpKSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQxNjoK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJy
YXlCYXNlPHVuc2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzI6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdl
dC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxpbnQ+ICo+
KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3Vy
Y2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShz
dGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+ICo+KHNvdXJjZSktPml0ZW0o
aSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9h
dDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDY0OgotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQt
PnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8ZG91YmxlPiAq
Pihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5QXJndW1l
bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlCdWZmZXJW
aWV3OjpWaWV3VHlwZSBhcnJheVR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAgIGlmIChhcnJh
eVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAyKQotICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQo
MCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMy
KGV4ZWMpOwotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oaW1wbCwgYXJy
YXkuZ2V0KCksIGxlbmd0aCwgb2Zmc2V0KSkpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotSlNDOjpKU1Zh
bHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU0M6
OnRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
Ci0gICAgaWYgKHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+KGV4ZWMs
IGltcGwpKQotICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTDw+QXJyYXkgYXJyYXksIFtPcHRp
b25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICByZXR1cm4gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0gaW4g
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJheSA9IEpT
Qzo6YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBvZmZzZXQg
PSAwOwotICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAgICAgICAg
ICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAgICB1aW50
MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoIWltcGwtPmNoZWNrSW5ib3VuZERh
dGEob2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UuIikpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJyYXktPmdldChleGVjLCBpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgaW1wbC0+c2V0
KGkgKyBvZmZzZXQsIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcmd1bWVudCIpOwotfQotCi0v
LyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgotLy8gSWYg
dGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFTY3JpcHQg
ZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4g
Y29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzb3VyY2UgPSB0b0Fy
cmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBzb3VyY2VUeXBl
ID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHNvdXJjZVR5cGUgPT0gQXJyYXlCdWZmZXJW
aWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDMyX3QgbGVu
Z3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIFJlZlB0cjxDPiBhcnJh
eSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5KSB7Ci0g
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIGlmICghKGNvcHlUeXBl
ZEFycmF5QnVmZmVyPEMsIFQ+KGFycmF5LmdldCgpLCBzb3VyY2UuZ2V0KCksIGxlbmd0aCwgMCkp
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIHJldHVybiBh
cnJheTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNvbnN0cnVj
dG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0aHJvd24g
YSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1Q
YXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3Vt
ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOwot
ICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPiAyKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQzMihleGVj
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNl
dCkgJSBzaXplb2YoVCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlz
IG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IC0gb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICB9Ci0gICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6
Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmICghYXJyYXkpCi0gICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsK
LSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1Q
YXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3RvcnM6Ci0gICAgLy8KLSAgICAvLyAg
MSkgKGluIGludCBzaXplKQotICAgIC8vICAyKSAoaW4gQXJyYXlCdWZmZXIgYnVmZmVyLCBbT3B0
aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgaW50IGxlbmd0aCkK
LSAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMgZW5kcyB1cCBiZWluZyBhIEpTICJh
cnJheS1saWtlIiBvYmplY3QKLSAgICAvLyAgICAKLSAgICAvLyBGb3IgdGhlIDAgYXJncyBjYXNl
LCBqdXN0IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIHZpZXcuIFdlIGNvdWxkCi0gICAgLy8gY29uc2lk
ZXIgcmFpc2luZyBhIFN5bnRheEVycm9yIGZvciB0aGlzIGNhc2UsIGJ1dCBub3QgYWxsCi0gICAg
Ly8gSmF2YVNjcmlwdCBET00gYmluZGluZ3MgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5ldwot
ICAgIC8vIDxUeXBlPkFycmF5KCkiIGFuZCB3aGF0IG9jY3VycyB3aGVuIGEgcHJldmlvdXNseS1j
b25zdHJ1Y3RlZAotICAgIC8vIEFycmF5QnVmZmVyVmlldyBpcyByZXR1cm5lZCB0byBKYXZhU2Ny
aXB0OyBlLmcuLCBmcm9tCi0gICAgLy8gImFycmF5LnN1YnNldCgpIi4KLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEM6OmNyZWF0ZSgwKTsKLSAgICAK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gSW52YWxp
ZCBmaXJzdCBhcmd1bWVudAotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgUmVmUHRyPEM+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRo
QXJyYXlCdWZmZXJBcmd1bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAg
ICAgICAgICByZXR1cm4gdmlldzsKLSAgICAKLSAgICAgICAgdmlldyA9IGNvbnN0cnVjdEFycmF5
QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAgICAgIGlm
ICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0KLSAgICAgICAgSlNDOjpKU09iamVj
dCogc3JjQXJyYXkgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIHVpbnQz
Ml90IGxlbmd0aCA9IHNyY0FycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgICAgIGlmICghYXJyYXkpIHsKLSAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNDOjpK
U1ZhbHVlIHYgPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgYXJyYXktPnNl
dChpLCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJyYXk7
Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgUmVmUHRyPEM+IHJlc3VsdDsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAg
IHJlc3VsdCA9IEM6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgSlNUeXBlLCB0eXBlbmFtZSBXZWJDb3JlVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFs
dWUgdG9KU0FycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQ29yZVR5cGUqIG9iamVjdCkKLXsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0KLSAgICBpZiAoSlNET01XcmFw
cGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVj
dCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeUNvc3Qob2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwotICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPEpTVHlwZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwx
MyBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQXVkaW9CdWZmZXIu
aCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0J1ZmZlci5o
IgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNPZmZsaW5lQXVkaW9D
b250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1
bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE0IEBACiAjaW5jbHVkZSAiQmxvYi5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vo
b2xkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJXZWJLaXRCbG9iQnVpbGRl
ci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJy
YXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAg
aWYgKCFydWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgcnVsZSk7Cisg
ICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVj
KSwgcnVsZSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NW
YWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghdmFsdWUtPmlzQ1NTT01T
YWZlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB2YWx1ZSk7CisgICAg
SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
dmFsdWUpOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJKU0Ny
eXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTQxLDEyICs0MSwxMiBAQCBKU1Zh
bHVlIEpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0CiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIAogICAg
IEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgQXJyYXlCdWZmZXJWaWV3
KiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOworICAgIFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KGJ1
ZmZlcik7CiAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcpCiAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS0+
Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldywgZWMpOworICAgIGltcGwoKS0+Z2V0UmFu
ZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldy5nZXQoKSwgZWMpOwogCiAgICAgaWYgKGVjKSB7CiAg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1
ICszMSwyMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBh
YmxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIldl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3Iu
aD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRGF0YVZpZXcuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1
cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9OdWxsUHRy
Lmg+CkBAIC0xMjgsNiArMTM0LDE2IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJl
dHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJl
PFdyYXBwZXJDbGFzcz4oZXhlYywgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKICAgICB9CiAKKyAgICBpbmxpbmUgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBK
U0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC0+dm0oKS0+bV90eXBlZEFycmF5Q29udHJv
bGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUgdm9p
ZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciopCisgICAgeworICAgICAgICByZXR1cm4gd29ybGQ7CisgICAgfQorCiAgICAgaW5saW5lIEpT
RE9NV3JhcHBlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lk
KikgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciosIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiwgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBwZXIqKSB7
IHJldHVybiBmYWxzZTsgfQpAQCAtMTM5LDYgKzE1NSwxMyBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgICAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7CiAgICAgfQogCisgICAgaW5s
aW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisgICAgeworICAgICAgICBp
ZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFNjcmlwdFdyYXBw
YWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAoIXdv
cmxkLT5pc05vcm1hbCgpKQpAQCAtMTQ3LDYgKzE3MCwxNCBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIq
IGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCF3
b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZG9t
T2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIpCiAgICAgewogICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTU1LDI0
ICsxODYsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNET01XcmFw
cGVyKiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBk
b21PYmplY3QpCisgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3Jh
cHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkpCisgICAgICAg
IGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHdlYWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5s
aW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3Js
ZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChKU0M6OkpTT2JqZWN0
KiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0KSkKICAg
ICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gd29ybGQtPm1fd3JhcHBl
cnMuZ2V0KGRvbU9iamVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNs
YXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9N
Q2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNo
ZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3Jh
cHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwogICAgICAgICB2b2lkKiBj
b250ZXh0ID0gd3JhcHBlckNvbnRleHQod29ybGQsIGRvbU9iamVjdCk7CiAgICAgICAgIGlmIChz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyLCBj
b250ZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNDOjpQYXNzV2VhazxKU0RP
TVdyYXBwZXI+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgSlND
OjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0PiBwYXNzV2Vhayh3cmFwcGVyLCBvd25lciwgY29udGV4
dCk7CiAgICAgICAgIHdlYWtBZGQod29ybGQtPm1fd3JhcHBlcnMsICh2b2lkKilkb21PYmplY3Qs
IHBhc3NXZWFrKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlu
bGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNz
KiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBl
ckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE5NSw3ICsyMzQsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgIHsKICAgICAgICAgaWYg
KCFkb21PYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAg
aWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxk
KGV4ZWMpLCBkb21PYmplY3QpKQorICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQogICAgICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFdyYXBw
ZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBkb21PYmplY3QpOwogICAgIH0KQEAgLTMyMyw2
ICszNjIsMjUgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZ2V0RXhpc3Rp
bmdXcmFwcGVyPEpTQzo6SlNBcnJheUJ1ZmZlcj4oZXhlYywgYnVmZmVyKSkKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIGJ1ZmZlci0+cmVmKCk7CisgICAgICAgIEpTQzo6SlNB
cnJheUJ1ZmZlciogd3JhcHBlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAg
ICAgY2FjaGVXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgYnVmZmVyLCB3cmFwcGVyKTsKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKKyAgICB7CisgICAgICAgIGlmICghdmlldykK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gdmlldy0+
d3JhcChleGVjLCBnbG9iYWxPYmplY3QpOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUPiBwdHIpCiAgICAg
ewpAQCAtMzc2LDYgKzQzNCwzMiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogCiAgICAgSlNDOjpK
U1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogCisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvQXJyYXlCdWZmZXJWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqIHdyYXBwZXIgPSBKU0M6OmpzRHluYW1p
Y0Nhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZhbHVlKTsKKyAgICAgICAgaWYgKCF3cmFw
cGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiB3cmFwcGVyLT5pbXBs
KCk7CisgICAgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0
b0ludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8
SlNDOjpJbnQxNkFycmF5PiB0b0ludDE2QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2YWx1ZSk7IH0KKyAg
ICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvSW50MzJBcnJheShKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFk
YXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDhBcnJheT4g
dG9VaW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQ
dHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VaW50OENsYW1wZWRBcnJheShKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1w
ZWRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQxNkFy
cmF5PiB0b1VpbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQ
YXNzUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4o
dmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvRmxv
YXQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVk
VmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0
cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZhbHVl
KTsgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RGF0YVZpZXc+IHRvRGF0YVZp
ZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0RhdGFWaWV3KiB3
cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNEYXRhVmlldyo+KHZhbHVlKTsKKyAg
ICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biB3cmFwcGVyLT50eXBlZEltcGwoKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBz
dHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM7CiAKICAgICB0ZW1wbGF0ZTw+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdI
ZWxwZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
SlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRGF0YVZpZXdBY2Nlc3NUeXBlIHsK
LSAgICBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMiwKLSAgICBBY2Nlc3NEYXRhVmlld01l
bWJlckFzRmxvYXQ2NAotfTsKLQotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRGF0YVZpZXcqIG9iamVjdCkKLXsKLSAgICByZXR1
cm4gd3JhcDxKU0RhdGFWaWV3PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci19Ci0KLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU0RhdGFWaWV3KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQo
MCkuaXNOdWxsKCkgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotCi0gICAgUmVmUHRyPERhdGFWaWV3PiB2aWV3
ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5QnVmZmVyQXJndW1lbnQ8RGF0YVZp
ZXcsIGNoYXI+KGV4ZWMpOwotICAgIGlmICghdmlldy5nZXQoKSkgewotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIEpTRGF0YVZpZXdDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RhdGFWaWV3Q29uc3RydWN0b3IqPihleGVjLT5j
YWxsZWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMs
IGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCB2aWV3LmdldCgpKSkpOwotfQotCi1zdGF0
aWMgSlNWYWx1ZSBnZXREYXRhVmlld01lbWJlcihFeGVjU3RhdGUqIGV4ZWMsIERhdGFWaWV3KiBp
bXAsIERhdGFWaWV3QWNjZXNzVHlwZSB0eXBlKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
dW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0KLSAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPiAxICYmICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMy
IHx8IHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQpKSB7Ci0gICAgICAgIGxp
dHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdDsKLSAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyOgotICAgIGNhc2UgQWNj
ZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQ6IHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gKHR5
cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpID8gaW1wLT5nZXRGbG9hdDMyKGJ5
dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpIDogaW1wLT5nZXRGbG9hdDY0KGJ5dGVPZmZzZXQs
IGxpdHRsZUVuZGlhbiwgZWMpOwotICAgICAgICByZXN1bHQgPSBzdGQ6OmlzbmFuKHZhbHVlKSA/
IGpzTmFOKCkgOiBqc051bWJlcih2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0gZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PERhdGFWaWV3Kj4oaW1w
bCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpOwotfQotCi1KU1ZhbHVlIEpTRGF0
YVZpZXc6OmdldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXREYXRh
Vmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+KGltcGwoKSksIEFjY2Vzc0Rh
dGFWaWV3TWVtYmVyQXNGbG9hdDY0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lv
biAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlICJKU05vZGUuaCIK
ICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNpbmNsdWRlICJKU1RyYWNrQ3VzdG9tLmgiCi0jaW5j
bHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNWb2lkQ2FsbGJhY2suaCIKICNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5oCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rp
Y3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGhl
YXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBKU1ZhbHVl
IEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAogICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5k
b3coKS0+bG9jYXRpb24oKTsKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxvY2F0aW9uKSkKKyAgICBpZiAoSlNPYmpl
Y3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgbG9jYXRp
b24pKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAogICAgIEpTTG9jYXRpb24qIGpzTG9jYXRp
b24gPSBKU0xvY2F0aW9uOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTTG9jYXRpb24+KGV4ZWMs
IGdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCksIGxvY2F0aW9uKTsKQEAgLTgzLDcgKzgz
LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciog
d3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb2N1bWVudCk7
CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWV2ZW50KQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZXZlbnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2ZW50KTsKICAgICBpZiAo
d3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0
MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgIkpTRmlsZVJlYWRl
ci5oIgogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFjb2xsZWN0aW9u
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIg
PSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29sbGVjdGlvbik7CisgICAg
SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
Y29sbGVjdGlvbik7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SlNVaW50OENsYW1wZWRBcnJheS5oIgogCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNDAsNyArMzksNyBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJl
dHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNo
ZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VEYXRhKTsKKyAgICBKU09iamVjdCog
d3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBpbWFnZURhdGEp
OwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2Ny
aXB0SG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsMTkgKzQ2LDExIEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5o
IgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNGbG9hdDY0QXJyYXku
aCIKICNpbmNsdWRlICJKU0hUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSlNIVE1MQ29s
bGVjdGlvbi5oIgotI2luY2x1ZGUgIkpTSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAj
aW5jbHVkZSAiSlNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgotI2luY2x1ZGUg
IkpTVWludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAi
SlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTdG9y
YWdlLmgiCiAjaW5jbHVkZSA8cGFyc2VyL1NvdXJjZUNvZGUuaD4KQEAgLTY3LDggKzU5LDExIEBA
CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
VHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBP
YmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
TWVzc2FnZUV2ZW50LmgiCiAKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAi
SlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01XaW5k
b3cuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMg
KzMwLDEzIEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVk
ZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAi
SlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogCi0gICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3Vy
cmVudFdvcmxkKGV4ZWMpLCBvYmplY3QpKQorICAgIGlmIChKU09iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBvYmplY3QpKQogICAgICAgICByZXR1
cm4gd3JhcHBlcjsKIAogICAgIHN3aXRjaCAob2JqZWN0LT5wYXRoU2VnVHlwZSgpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5j
cHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5
bGVTaGVldEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghc3R5bGVTaGVldCkK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHN0eWxlU2hlZXQpOworICAgIEpT
T2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHN0
eWxlU2hlZXQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCAKICAgICBpZiAoIXRyYWNrKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3Jh
cHBlcihjdXJyZW50V29ybGQoZXhlYyksIHRyYWNrKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB0cmFjayk7CiAgICAgaWYgKHdy
YXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxOCArMzYsMTQgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SlNFWFREcmF3QnVmZmVycy5oIgogI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmgiCi0jaW5jbHVkZSAiSlNGbG9hdDMyQXJyYXkuaCIKICNpbmNsdWRlICJKU0hUTUxDYW52
YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SlNJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKICNpbmNsdWRlICJKU09F
U0VsZW1lbnRJbmRleFVpbnQuaCIKICNpbmNsdWRlICJKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCIKICNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdC5oIgogI2luY2x1ZGUgIkpTT0VTVGV4dHVy
ZUhhbGZGbG9hdC5oIgogI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNs
dWRlICJKU1VpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVk
ZSAiSlNXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5oIgogI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCkBAIC04NSwx
MCArODEsOSBAQAogI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0lu
dDMyQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1VpbnQzMkFycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiAjaWYgRU5BQkxF
KFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNY
TUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw4ICszOCw2IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJI
VE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNp
bmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIK
ICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUZvcm1EYXRhLmgiCiAjaW5jbHVk
ZSAiSlNET01XaW5kb3dDdXN0b20uaCIKQEAgLTUwLDYgKzQ4LDggQEAKICNpbmNsdWRlIDxpbnRl
cnByZXRlci9TdGFja0l0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKQEAgLTEyNyw5ICsxMjcsMTAgQEAgSlNWYWx1ZSBKU1hNTEh0dHBS
ZXF1ZXN0OjpzZW5kKEV4ZWNTdGF0ZQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvRE9NRm9y
bURhdGEodmFsKSwgZWMpOwogICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNBcnJheUJ1
ZmZlcjo6aW5mbygpKSkKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0FycmF5QnVmZmVyKHZh
bCksIGVjKTsKLSAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXJWaWV3
OjppbmZvKCkpKQotICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXJWaWV3KHZh
bCksIGVjKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNB
cnJheUJ1ZmZlclZpZXc6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IHZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyh2YWwpOworICAgICAgICAgICAgaW1wbCgp
LT5zZW5kKHZpZXcuZ2V0KCksIGVjKTsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpbXBs
KCktPnNlbmQodmFsLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgZWMpOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNSAr
MzIsMTMgQEAKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNs
dWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKLSNpbmNsdWRlICJKU0Rh
dGFWaWV3LmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0Zp
bGUuaCIKICNpbmNsdWRlICJKU0ZpbGVMaXN0LmgiCi0jaW5jbHVkZSAiSlNGbG9hdDMyQXJyYXku
aCIKLSNpbmNsdWRlICJKU0Zsb2F0NjRBcnJheS5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSlNJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNJbnQzMkFycmF5LmgiCi0j
aW5jbHVkZSAiSlNJbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCiAjaW5j
bHVkZSAiSlNOYXZpZ2F0b3IuaCIKLSNpbmNsdWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVk
ZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgotI2luY2x1ZGUg
IkpTVWludDhDbGFtcGVkQXJyYXkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC02Mywx
MiArNTEsMTcgQEAKICNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0RhdGFWaWV3Lmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cC5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9V
aW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTE3MjIsNDcgKzE3MTUsNiBA
QCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWCiAgICAgbV9ibG9iVVJM
cy5zd2FwKGJsb2JVUkxzKTsKIH0KIAotc3RhdGljIHZvaWQgbmV1dGVyVmlldyhKU0NlbGwqIGpz
VmlldykKLXsKLSAgICBpZiAoIWpzVmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHN3
aXRjaCAoanNWaWV3LT5jbGFzc0luZm8oKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAg
Y2FzZSBUeXBlZEFycmF5Tm9uZToKLSAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBhIERhdGFWaWV3
LCBmb3IgZXhhbXBsZS4gQXNzdW1lIHRoYXQgdGhlcmUgYXJlIHZpZXdzIHRoYXQgdGhlCi0gICAg
ICAgIC8vIERGRyBkb2Vzbid0IGNhcmUgYWJvdXQuCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICBqc0Nhc3Q8SlNJbnQ4QXJyYXkqPihqc1ZpZXcpLT5t
X3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5
SW50MTY6Ci0gICAgICAgIGpzQ2FzdDxKU0ludDE2QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VM
ZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0g
ICAgICAgIGpzQ2FzdDxKU0ludDMyQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDg6Ci0gICAgICAgIGpz
Q2FzdDxKU1VpbnQ4QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICBqc0Nh
c3Q8SlNVaW50OENsYW1wZWRBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgIGpzQ2Fz
dDxKU1VpbnQxNkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAgICAgICAganNDYXN0PEpTVWlu
dDMyQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAganNDYXN0PEpTRmxvYXQzMkFy
cmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgIGpzQ2FzdDxKU0Zsb2F0NjRBcnJheSo+
KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogUGFzc093blB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OkFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjp0cmFuc2ZlckFycmF5QnVmZmVycygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEFycmF5
QnVmZmVyQXJyYXkmIGFycmF5QnVmZmVycywgU2VyaWFsaXphdGlvblJldHVybkNvZGUmIGNvZGUp
CiB7CkBAIC0xNzc5LDI2ICsxNzMxLDE1IEBAIFBhc3NPd25QdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpBcnJheUIKIAogICAgIEhhc2hTZXQ8SlNDOjpBcnJheUJ1ZmZlcio+IHZpc2l0ZWQ7CiAg
ICAgZm9yIChzaXplX3QgYXJyYXlCdWZmZXJJbmRleCA9IDA7IGFycmF5QnVmZmVySW5kZXggPCBh
cnJheUJ1ZmZlcnMuc2l6ZSgpOyBhcnJheUJ1ZmZlckluZGV4KyspIHsKLSAgICAgICAgVmVjdG9y
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4gbmV1dGVyZWRWaWV3czsKLQogICAgICAgICBpZiAo
dmlzaXRlZC5jb250YWlucyhhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0KCkpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHZpc2l0ZWQuYWRkKGFycmF5QnVmZmVyc1th
cnJheUJ1ZmZlckluZGV4XS5nZXQoKSk7CiAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBhcnJheUJ1
ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0tPnRyYW5zZmVyKGNvbnRlbnRzLT5hdChhcnJheUJ1ZmZl
ckluZGV4KSwgbmV1dGVyZWRWaWV3cyk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gYXJyYXlCdWZm
ZXJzW2FycmF5QnVmZmVySW5kZXhdLT50cmFuc2Zlcihjb250ZW50cy0+YXQoYXJyYXlCdWZmZXJJ
bmRleCkpOwogICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgY29kZSA9IFZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyBUaGUgdmlld3MgbWF5IGhhdmUgYmVlbiBuZXV0ZXJlZCwgYnV0IHRo
ZWlyIHdyYXBwZXJzIGFsc28gbmVlZCB0byBiZSBuZXV0ZXJlZCwgdG9vLgotICAgICAgICBmb3Ig
KHNpemVfdCB2aWV3SW5kZXggPSBuZXV0ZXJlZFZpZXdzLnNpemUoKTsgdmlld0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBuZXV0ZXJlZFZpZXdzW3ZpZXdJ
bmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCB3b3JsZEluZGV4ID0gd29ybGRz
LnNpemUoKTsgd29ybGRJbmRleC0tOykgewotICAgICAgICAgICAgICAgIERPTVdyYXBwZXJXb3Js
ZCogd29ybGQgPSB3b3JsZHNbd29ybGRJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgbmV1
dGVyVmlldyhnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCB2aWV3KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGNvbnRlbnRzLnJlbGVhc2UoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJ
KHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVK
U0NsaWVudERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVk
ZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmgi
CisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTc1LDYgKzc2LDcgQEAg
aW5saW5lIHZvaWQgaW5pdE5vcm1hbFdvcmxkQ2xpZW50RGF0YShKUwogICAgIFdlYkNvcmVKU0Ns
aWVudERhdGEqIHdlYkNvcmVKU0NsaWVudERhdGEgPSBuZXcgV2ViQ29yZUpTQ2xpZW50RGF0YTsK
ICAgICB2bS0+Y2xpZW50RGF0YSA9IHdlYkNvcmVKU0NsaWVudERhdGE7IC8vIH5WTSBkZWxldGVz
IHRoaXMgcG9pbnRlci4KICAgICB3ZWJDb3JlSlNDbGllbnREYXRhLT5tX25vcm1hbFdvcmxkID0g
RE9NV3JhcHBlcldvcmxkOjpjcmVhdGUodm0sIHRydWUpOworICAgIHZtLT5tX3R5cGVkQXJyYXlD
b250cm9sbGVyID0gYWRvcHRSZWYobmV3IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
PGhlYXAvUGFzc1dlYWsuaD4KKyNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRp
b25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIo
KQorICAgIDogbV9vd25lcigpCit7Cit9CitXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5X
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNBcnJheUJ1ZmZlciogV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICByZXR1
cm4ganNDYXN0PEpTQXJyYXlCdWZmZXIqPigKKyAgICAgICAgV2ViQ29yZTo6dG9KUyhleGVjLCBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpLCBuYXRpdmUpKTsKK30KKwor
Ym9vbCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoCisgICAgSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9p
ZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlC
dWZmZXIgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Cisg
ICAgaWYgKCFqc0FycmF5QnVmZmVyLT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBBcnJheUJ1ZmZlciogcm9vdCA9IGpzQXJyYXlCdWZmZXItPmltcGwo
KTsKKyAgICByZXR1cm4gdmlzaXRvci5jb250YWluc09wYXF1ZVJvb3Qocm9vdCk7Cit9CisKK3Zv
aWQgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmZpbmFs
aXplKAorICAgIEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAg
SlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGlj
X2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29y
bGQsIGpzQXJyYXlCdWZmZXItPmltcGwoKSwganNBcnJheUJ1ZmZlcik7CisgICAganNBcnJheUJ1
ZmZlci0+aW1wbCgpLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUNv
bnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgSlNDOjpUeXBlZEFycmF5Q29udHJvbGxlciB7CitwdWJs
aWM6CisgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+V2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0M6OkpTQXJy
YXlCdWZmZXIqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpBcnJheUJ1ZmZlciopOworICAgIAorICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVy
T3duZXIoKSB7IHJldHVybiAmbV9vd25lcjsgfQorCitwcml2YXRlOgorICAgIGNsYXNzIEpTQXJy
YXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CisgICAgcHVibGlj
OgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCk7CisgICAgfTsKKworICAgIEpTQXJyYXlCdWZmZXJPd25lciBtX293bmVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsMjEgKzE4MCwyMiBAQCBzdWIgRm9yQWxsUGFyZW50cwogCiAgICAgbXkgJHJlY3Vyc2U7
CiAgICAgJHJlY3Vyc2UgPSBzdWIgeworICAgICAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlm
dDsKICAgICAgICAgbXkgJGN1cnJlbnRJbnRlcmZhY2UgPSBzaGlmdDsKIAogICAgICAgICBmb3Ig
KEB7JGN1cnJlbnRJbnRlcmZhY2UtPnBhcmVudHN9KSB7CiAgICAgICAgICAgICBteSAkaW50ZXJm
YWNlTmFtZSA9ICRfOwotICAgICAgICAgICAgbXkgJHBhcmVudEludGVyZmFjZSA9ICRvYmplY3Qt
PlBhcnNlSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgICAgIG15ICRwYXJlbnRJ
bnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkb3V0ZXJJbnRlcmZhY2UsICRpbnRl
cmZhY2VOYW1lKTsKIAogICAgICAgICAgICAgaWYgKCRiZWZvcmVSZWN1cnNpb24pIHsKICAgICAg
ICAgICAgICAgICAmJGJlZm9yZVJlY3Vyc2lvbigkcGFyZW50SW50ZXJmYWNlKSBlcSAncHJ1bmUn
IGFuZCBuZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgJiRyZWN1cnNlKCRwYXJlbnRJ
bnRlcmZhY2UpOworICAgICAgICAgICAgJiRyZWN1cnNlKCRvdXRlckludGVyZmFjZSwgJHBhcmVu
dEludGVyZmFjZSk7CiAgICAgICAgICAgICAmJGFmdGVyUmVjdXJzaW9uKCRwYXJlbnRJbnRlcmZh
Y2UpIGlmICRhZnRlclJlY3Vyc2lvbjsKICAgICAgICAgfQogICAgIH07CiAKLSAgICAmJHJlY3Vy
c2UoJGludGVyZmFjZSk7CisgICAgJiRyZWN1cnNlKCRpbnRlcmZhY2UsICRpbnRlcmZhY2UpOwog
fQogCiBzdWIgRmluZFN1cGVyTWV0aG9kCkBAIC0yMzgsNiArMjM5LDcgQEAgc3ViIElETEZpbGVG
b3JJbnRlcmZhY2UKIHN1YiBQYXJzZUludGVyZmFjZQogewogICAgIG15ICRvYmplY3QgPSBzaGlm
dDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFt
ZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIHVuZGVmIGlmICRpbnRlcmZhY2VOYW1lIGVxICdPYmpl
Y3QnOwpAQCAtMjQ4LDcgKzI1MCw3IEBAIHN1YiBQYXJzZUludGVyZmFjZQogCiAgICAgIyBTdGVw
ICMxOiBGaW5kIHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdpdGggJ2ludGVyZmFjZScKICAgICBt
eSAkZmlsZW5hbWUgPSAkb2JqZWN0LT5JRExGaWxlRm9ySW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1l
KQotICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBmaWxlIGZvciBpbnRlcmZhY2Ug
XCIkaW50ZXJmYWNlTmFtZVwiIVxuIik7CisgICAgICAgIG9yIGRpZSgiQ291bGQgTk9UIGZpbmQg
SURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCIsIHJlYWNoYWJsZSBmcm9t
IFwiIiAuICRvdXRlckludGVyZmFjZS0+bmFtZSAuICJcIiFcbiIpOwogCiAgICAgcHJpbnQgIiAg
fCAgfD4gIFBhcnNpbmcgcGFyZW50IElETCBcIiRmaWxlbmFtZVwiIGZvciBpbnRlcmZhY2UgXCIk
aW50ZXJmYWNlTmFtZVwiXG4iIGlmICR2ZXJib3NlOwogCkBAIC0yNzcsNiArMjc5LDEwIEBAIHN1
YiBTa2lwSW5jbHVkZUhlYWRlcgogCiAgICAgIyBTcGVjaWFsIGNhc2U6IFNWR051bWJlci5oIGRv
ZXMgbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdOdW1iZXIiOworICAg
IAorICAgICMgVHlwZWQgYXJyYXlzIGFscmVhZHkgaW5jbHVkZWQgYnkgSlNET01CaW5kaW5nLmgu
CisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSk7CisgICAg
CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCw3ICszNzQsNyBAQCBzdWIgSXNUeXBlZEFycmF5
VHlwZQogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkFycmF5QnVmZmVyIikgb3IgKCR0eXBl
IGVxICJBcnJheUJ1ZmZlclZpZXciKSk7CiAgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiVWlu
dDhBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDhDbGFtcGVkQXJyYXkiKSBvciAoJHR5cGUgZXEg
IlVpbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MzJBcnJheSIpKTsKICAgICByZXR1cm4g
MSBpZiAoKCR0eXBlIGVxICJJbnQ4QXJyYXkiKSBvciAoJHR5cGUgZXEgIkludDE2QXJyYXkiKSBv
ciAoJHR5cGUgZXEgIkludDMyQXJyYXkiKSk7Ci0gICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAi
RmxvYXQzMkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJyYXkiKSk7CisgICAgcmV0dXJu
IDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJy
YXkiKSBvciAoJHR5cGUgZXEgIkRhdGFWaWV3IikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC02
MDksNiArNjE1LDcgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0
LT5HZXRTZXF1ZW5jZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICRvYmplY3QtPklzRW51
bVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICRvYmplY3QtPklzU3RyaW5nVHlwZSgkdHlw
ZSk7CisgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSk7CiAg
ICAgcmV0dXJuIDAgaWYgJHdlYkNvcmVUeXBlSGFzaHskdHlwZX07CiAgICAgcmV0dXJuIDAgaWYg
JHR5cGUgZXEgImFueSI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5
KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICBteSAkaW5j
bHVkZXNSZWYgPSBzaGlmdDsKIAogICAgIHJldHVybiBpZiBTa2lwSW5jbHVkZUhlYWRlcigkdHlw
ZSk7Ci0KKyAgICAKICAgICAjIFdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCB0aGUgb25lLWZpbGUt
cGVyLWNsYXNzCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3QgbmVlZCB0aGVzZSBzcGVj
aWFsIGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgewpAQCAtMjI1
LDggKzIyNSw2IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICAgICAgJGluY2x1ZGVzUmVm
LT57IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CiAgICAgfSBlbHNpZiAoJGlzQ2Fs
bGJhY2sgJiYgJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5cGUoJHR5cGUpKSB7CiAgICAgICAg
ICRpbmNsdWRlc1JlZi0+eyJKUyR7dHlwZX0uaCJ9ID0gMTsKLSAgICB9IGVsc2lmICgkY29kZUdl
bmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAgJGluY2x1ZGVzUmVm
LT57IjxydW50aW1lLyR7dHlwZX0uaD4ifSA9IDE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBk
ZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKICAgICAgICAgJGluY2x1ZGVzUmVm
LT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTY4MiwxMSArNjgwLDcgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgfQogCiAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCJ9KSB7Ci0gICAgICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKLSAgICAg
ICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvJGludGVyZmFjZU5hbWUuaD4ifSA9IDE7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IiRpbnRlcmZh
Y2VOYW1lLmgifSA9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50
ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKICAgICAkaGVhZGVySW5jbHVkZXN7Ijxy
dW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwpAQCAtOTY1LDIyICs5NTksNiBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB9XG4iKTsKICAgICB9
CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBh
bmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFy
cmF5QnVmZmVyIikpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
Y29uc3QgSlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OiIp
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDgiKSBpZiAkaW1w
bFR5cGUgZXEgIkludDhBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBl
ZEFycmF5SW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIkludDE2QXJyYXkiOwotICAgICAgICBwdXNo
KEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDMyIikgaWYgJGltcGxUeXBlIGVxICJJbnQz
MkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50OCIp
IGlmICRpbXBsVHlwZSBlcSAiVWludDhBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICJUeXBlZEFycmF5VWludDhDbGFtcGVkIikgaWYgJGltcGxUeXBlIGVxICJVaW50OENsYW1w
ZWRBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDE2
IikgaWYgJGltcGxUeXBlIGVxICJVaW50MTZBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICJUeXBlZEFycmF5VWludDMyIikgaWYgJGltcGxUeXBlIGVxICJVaW50MzJBcnJheSI7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5RmxvYXQzMiIpIGlmICRp
bXBsVHlwZSBlcSAiRmxvYXQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IlR5cGVkQXJyYXlGbG9hdDY0IikgaWYgJGltcGxUeXBlIGVxICJGbG9hdDY0QXJyYXkiOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgaW50cHRyX3QgbV9zdG9yYWdlTGVuZ3RoO1xuIik7Ci0gICAgICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCogbV9zdG9yYWdlO1xuIik7Ci0gICAgfQotCiAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOwogICAgICMgQ29uc3RydWN0b3IK
ICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKQEAgLTE4NjksMTIgKzE4
NDcsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXG4iKTsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7Ci0gICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFuZCAoJGltcGxUeXBlIG5l
ICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXIiKSkgewot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlwZWRBcnJheURlc2NyaXB0b3Ig
ZGVzY3JpcHRvcigke2NsYXNzTmFtZX06OmluZm8oKSwgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NO
YW1lfSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdl
TGVuZ3RoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHZtLnJl
Z2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlwdG9yKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdlID0gaW1wbCgpLT5kYXRh
KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZUxl
bmd0aCA9IGltcGwoKS0+bGVuZ3RoKCk7XG4iKTsKLSAgICAgICAgfQogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTIzNzQsNyArMjM0NiwxMSBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1
bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMs
ICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5
cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKSBhbmQgbm90ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZSBlcSAiQXJyYXlCdWZmZXIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFsdWUuZ2V0KCkiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFsdWUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke2ltcGxlbWVudGVkQnl9
LmgifSA9IDE7CkBAIC0yNTI2LDEzICsyNTAyLDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhp
cy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoZXhlYykpO1xuIik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lIGVxICJzZXQiIGFuZCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteSAkdmlld1R5
cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9OwotICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShzZXRXZWJHTEFycmF5SGVscGVyPCRpbXBsVHlwZSwgJHZpZXdUeXBlPihleGVj
LCBjYXN0ZWRUaGlzLT5pbXBsKCkpKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsK
LSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9IHN0YXRpY19jYXN0PCRpbXBsVHlwZSo+KGNh
c3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdmdQcm9w
ZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChpbXBsLT5pc1JlYWRPbmx5KCkpIHtcbiIpOwpAQCAtMzA4Nyw3ICszMDU2LDcgQEAg
c3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7CisgICAgICAgIGlmICgkYXJn
VHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBl
KCRhcmdUeXBlKSBhbmQgbm90ICRhcmdUeXBlIGVxICJBcnJheUJ1ZmZlciIpKSB7CiAgICAgICAg
ICAgICBwdXNoIEBhcmd1bWVudHMsICIkbmFtZS5nZXQoKSI7CiAgICAgICAgIH0gZWxzaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAk
aW50ZXJmYWNlTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVudHMs
ICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CkBAIC0zMzY5LDYgKzMzMzgsNyBAQCBzdWIg
R2V0TmF0aXZlVHlwZQogICAgIG15ICRzdmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdl
dFNWR1R5cGVOZWVkaW5nVGVhck9mZigkdHlwZSk7CiAgICAgcmV0dXJuICIke3N2Z05hdGl2ZVR5
cGV9KiIgaWYgJHN2Z05hdGl2ZVR5cGU7CiAgICAgcmV0dXJuICJSZWZQdHI8RE9NU3RyaW5nTGlz
dD4iIGlmICR0eXBlIGVxICJET01TdHJpbmdMaXN0IjsKKyAgICByZXR1cm4gIlJlZlB0cjwke3R5
cGV9PiIgaWYgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpIGFuZCBub3Qg
JHR5cGUgZXEgIkFycmF5QnVmZmVyIjsKICAgICByZXR1cm4gJG5hdGl2ZVR5cGV7JHR5cGV9IGlm
IGV4aXN0cyAkbmF0aXZlVHlwZXskdHlwZX07CiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVH
ZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CkBAIC0zNTA4LDYgKzM0NzgsMTAgQEAgc3Vi
IEpTVmFsdWVUb05hdGl2ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01TdHJpbmdM
aXN0LmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gInRvRE9NU3RyaW5nTGlzdChl
eGVjLCAkdmFsdWUpIjsKICAgICB9CisgICAgCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5
cGVkQXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICByZXR1cm4gInRvJHR5cGUoJHZhbHVlKSI7
CisgICAgfQogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkhUTUxPcHRpb25FbGVtZW50LmgiLCAk
Y29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJIVE1MT3B0aW9uRWxlbWVudCI7CiAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVudCI7
CkBAIC0zNTc3LDcgKzM1NTEsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIsICRjb25kaXRpb25hbCk7CiAgICAg
ICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgJHZhbHVlKSI7CiAgICAgfQotCisg
ICAgCiAgICAgbXkgJGdsb2JhbE9iamVjdDsKICAgICBpZiAoJHRoaXNWYWx1ZSkgewogICAgICAg
ICAkZ2xvYmFsT2JqZWN0ID0gIiR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpIjsKQEAgLTM2MTgs
MTQgKzM1OTIsMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIH0gZWxzaWYgKCR0eXBlIGVx
ICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJhbnkiKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIsICRjb25kaXRpb25hbCk7
CiAgICAgICAgIHJldHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKSI7CisgICAgfSBlbHNpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgICMgRG8gbm90
aGluZyAtIGFsbCBoZWFkZXJzIGFyZSBhbHJlYWR5IGluY2x1ZGVkLgogICAgIH0gZWxzZSB7CiAg
ICAgICAgICMgRGVmYXVsdCwgaW5jbHVkZSBoZWFkZXIgd2l0aCBzYW1lIG5hbWUuCiAgICAgICAg
IEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9uYWwpOwotICAgICAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvJHR5cGUuaD4iLCAkY29uZGl0aW9uYWwpIGlm
IG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiR0eXBlLmgiLCAkY29uZGl0
aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwot
ICAgICAgICB9CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlv
bmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKICAg
ICB9CiAKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVk
VHlwZSgkdHlwZSk7CkBAIC00MTA4LDMwICs0MDgwLDYgQEAgRU5ECiB9CiAKIEVORAotICAgICAg
ICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZh
Y2UsICJUeXBlZEFycmF5IikpIHsKLSAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTQXJyYXlC
dWZmZXJWaWV3SGVscGVyLmgifSA9IDE7Ci0gICAgICAgICAgICBteSAkdmlld1R5cGUgPSAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9OwotICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke2NvbnN0
cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4ZWNTdGF0ZSogZXhlYylc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qIGpzQ29u
c3RydWN0b3IgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0qPihleGVjLT5jYWxsZWUo
KSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8JGlu
dGVyZmFjZU5hbWU+IGFycmF5ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3PCRpbnRlcmZhY2VO
YW1lLCAkdmlld1R5cGU+KGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgaWYgKCFhcnJheS5nZXQoKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICAvLyBFeGNlcHRpb24gaGFzIGFscmVhZHkgYmVlbiB0aHJvd24uXG4i
KTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29u
c3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICR7aW50ZXJmYWNlTmFtZX0qIG9iamVjdClcbiIp
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRvSlNBcnJheUJ1ZmZlclZpZXc8JHtjbGFz
c05hbWV9PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmluZGV4U2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZh
bHVlKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGltcGwoKS0+c2V0KGluZGV4
LCB2YWx1ZS50b051bWJlcihleGVjKSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ9XG5cbiIpOwotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2lmICghSGFz
Q3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgJiYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1
Y3RvcikpIHsKICAgICAgICAgICAgIG15ICRvdmVybG9hZGVkSW5kZXhTdHJpbmcgPSAiIjsKICAg
ICAgICAgICAgIGlmICgkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ICYmICRmdW5jdGlvbi0+
e292ZXJsb2FkZWRJbmRleH0gPiAwKSB7CkBAIC00MjEwLDcgKzQxNTgsNyBAQCBzdWIgR2VuZXJh
dGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKIAogICAgIG15ICRjb25zdHJ1Y3RvckNsYXNzTmFt
ZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNzTmFtZX1OYW1lZENvbnN0
cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAgICAgbXkgJGxlYXN0Q29uc3Ry
dWN0b3JMZW5ndGggPSAwOwotICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRl
bXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVj
dG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgeworICAgIGlmICgkY29kZUdl
bmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpKSB7CiAg
ICAgICAgICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMTsKICAgICB9IGVsc2lmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8fCAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkgewogICAgICAgICBteSBA
Y29uc3RydWN0b3JzID0gQHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAJKHJldmlzaW9uIDE1NDAz
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChBcnJh
eUJ1ZmZlciogYXIKICAgICBhcHBlbmRCeXRlc0RhdGEoYXJyYXlCdWZmZXItPmRhdGEoKSwgYXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLXZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVuZChB
cnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldykKK3ZvaWQgQmxvYkJ1aWxkZXI6OmFwcGVu
ZChQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3KQogewogICAgIEhp
c3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkJsb2IuY29uc3Ry
dWN0b3IuQXJyYXlCdWZmZXJPclZpZXciLCBCbG9iQ29uc3RydWN0b3JBcnJheUJ1ZmZlclZpZXcs
IEJsb2JDb25zdHJ1Y3RvckFycmF5QnVmZmVyT3JWaWV3TWF4KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkocmV2aXNpb24gMTU0MDM4KQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFN0cmluZyYgZW5kaW5nKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICB2b2lk
IGFwcGVuZChKU0M6OkFycmF5QnVmZmVyKik7Ci0gICAgdm9pZCBhcHBlbmQoSlNDOjpBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3Pik7CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihjb25zdCBTdHJp
bmcmIGNvbnRlbnRUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5
QnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJh
eUJ1ZmZlci5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0FycmF5QnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNj
b3BlLAotICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKLSAgICBDdXN0b21Db25zdHJ1Y3Rv
cih1bnNpZ25lZCBsb25nIGxlbmd0aCksCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJbXBs
ZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MsCi0gICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQot
XSBpbnRlcmZhY2UgQXJyYXlCdWZmZXIgewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGJ5dGVMZW5ndGg7Ci0gICAgQXJyYXlCdWZmZXIgc2xpY2UobG9uZyBiZWdpbiwgb3B0
aW9uYWwgbG9uZyBlbmQpOwotfTsKLQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXJWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBKU05v
U3RhdGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZh
Y2UgQXJyYXlCdWZmZXJWaWV3IHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgQXJyYXlCdWZmZXIg
YnVmZmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQ7
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCShyZXZpc2lvbiAxNTQw
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLQotbmFtZXNw
YWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVlIHsKLSAgICBUIGRhdGE7
Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNy
ZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwot
fQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0
aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tl
ZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRPdmVyZmxv
dz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNv
cmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBjaGVja2VkTGVuZ3RoOwot
ICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkTWF4LnVuc2FmZUdl
dCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSk7
Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi0gICAgOiBBcnJheUJ1
ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9ieXRlTGVuZ3RoKGJ5dGVMZW5n
dGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhib29sIGxpdHRsZUVuZGlh
bikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4gbGl0dGxlRW5kaWFuOwotI2Vs
c2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgotfQotCi1pbmxpbmUgdm9pZCBz
d2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFyIHRlbXAgPSAqcDsKLSAgICAq
cCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMTZC
aXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsKLX0KLQotc3RhdGljIHZv
aWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAz
KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5
dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyA3KTsKLSAgICBz
d2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMocCArIDIsIHAgKyA1KTsKLSAg
ICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzSWZO
ZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRsZUVuZGlhbikKLXsKLSAg
ICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8g
ZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMTZC
aXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBmbGlwQnl0
ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDg6Ci0gICAgICAg
IGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3OjpnZXREYXRhKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsK
LSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90
IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1
cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgbG9h
ZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZhbHVlLmJ5dGVzLCBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCBzaXplb2YoVCkp
OwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVu
ZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYmV5b25kUmFu
Z2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHN0b3JlIHRoZSBk
YXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVj
dHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMuCi0gICAgVmFsdWU8VD4g
dGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7Ci0gICAgZmxpcEJ5dGVzSWZO
ZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgbWVt
Y3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQsIHRlbXBW
YWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERhdGFWaWV3OjpnZXRJbnQ4KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXRE
YXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQotdWludDhfdCBEYXRhVmll
dzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQot
aW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDE2
X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MTZfdCBEYXRhVmll
dzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZpZXc6OmdldEludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4s
IGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJu
IGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1m
bG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZmxvYXQ+
KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3VibGUgRGF0YVZpZXc6Omdl
dEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgbGl0
dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDgodW5zaWduZWQgYnl0
ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRh
PGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZh
bHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50
MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMy
X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRE
YXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxk
b3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBE
YXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcigpOwotICAg
IG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RGF0YVZpZXcuaAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0KLSNpbmNsdWRlIDxydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQotY2xhc3MgRGF0
YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwg
dW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsgfQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNlKGludCwgaW50KSBjb25z
dCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MTYoYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MTZfdCBnZXRVaW50
MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVp
bnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDMy
X3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQzMihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGRvdWJs
ZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDgodW5zaWduZWQgYnl0ZU9m
ZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
c2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldElu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQxNihieXRlT2Zm
c2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQzMl90
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0
VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2
b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0
MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0MzIo
dW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRv
dWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0K
LSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
bmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlvbmRSYW5nZSh1bnNpZ25lZCBi
eXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1fYnl0ZUxlbmd0aCB8fCBi
eXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVuc2lnbmVkIG1fYnl0ZUxlbmd0
aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRGF0YVZpZXdf
aApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkocmV2aXNpb24g
MTU0MDM4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1E
T01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IoQXJyYXlC
dWZmZXIgYnVmZmVyLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aCksCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBK
U05vU3RhdGljVGFibGVzCi1dIGludGVyZmFjZSBEYXRhVmlldyA6IEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgLy8gQWxsIHRoZXNlIG1ldGhvZHMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZXkgd291
bGQgcmVhZCBvciB3cml0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdmlldy4KLQotICAgIFtSYWlz
ZXNFeGNlcHRpb25dIGJ5dGUgZ2V0SW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwotICAg
IFtSYWlzZXNFeGNlcHRpb25dIG9jdGV0IGdldFVpbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHNob3J0IGdl
dEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVF
bmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdW5zaWdu
ZWQgc2hvcnQgZ2V0VWludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9v
bGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gbG9uZyBnZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJv
b2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHVuc2lnbmVkIGxvbmcgZ2V0VWludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwg
b3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgLy8gVXNlIGN1c3RvbSBjb2Rl
IHRvIGhhbmRsZSBOYU4gY2FzZS4KLSAgICBbQ3VzdG9tLCBTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQs
IG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbQ3VzdG9tLCBTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAgICBbUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBieXRl
IHZhbHVlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgb2N0ZXQgdmFsdWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwg
c2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0
dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgc2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBsb25nIHZhbHVlLCBvcHRpb25h
bCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxvbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0RmxvYXQzMih1bnNpZ25l
ZCBsb25nIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVu
ZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNl
dEZsb2F0NjQodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIG9wdGlvbmFs
IGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLX07Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0Zsb2F0MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFwcGxlIENvbXB1dGVy
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1E
T01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBl
ZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZl
T2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9ZmxvYXQsCi0gICAgSW1wbGVt
ZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDMyQXJyYXkgOiBBcnJheUJ1
ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEZs
b2F0MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3Rh
cnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAg
ICBnZXR0ZXIgZmxvYXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQo
RmxvYXQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
Ly8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0Zsb2F0NjRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJH
bG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3Vz
dG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNO
b1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25z
dGFudHMsCi0gICAgVHlwZWRBcnJheT1kb3VibGUsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3Bh
Y2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDY0QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA4OwotCi0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEZsb2F0NjRBcnJheSBzdWJh
cnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgZG91Ymxl
ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0NjRBcnJheSBh
cnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNl
cXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
dm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJy
YXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDhBcnJh
eS5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lu
dDhBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAg
IENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVy
LAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAot
ICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBl
ZEFycmF5PXNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBp
bnRlcmZhY2UgSW50OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5k
ZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGJ5dGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgp
OwotCi0gICAgLy8gdm9pZCBzZXQoSW50OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBs
b25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwMzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEwIEFw
cGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEds
b2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9y
VGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2Vu
ZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRv
SlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXNob3J0
LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50MTZBcnJh
eSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJf
RUxFTUVOVCA9IDI7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5n
dGg7Ci0gICAgSW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFs
IGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQp
OwotCi0gICAgZ2V0dGVyIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZv
aWQgc2V0KEludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
LSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZX
b3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0g
ICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0g
ICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hl
Y2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1pbnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1l
c3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQzMkFycmF5IHN1YmFy
cmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgbG9uZyAodW5z
aWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQzMkFycmF5IGFycmF5LCBv
cHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8
bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNl
dCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRs
CShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFy
cmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1b
Ci0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29u
c3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0g
ICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAg
Q3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJy
YXk9dW5zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50
ZXJmYWNlIFVpbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVk
IGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5k
ZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBn
ZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWlu
dDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZv
aWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9VaW50OENsYW1wZWRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1E
T01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBl
ZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZl
T2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgY2hhciwKLSAg
ICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQ4Q2xhbXBlZEFy
cmF5IDogVWludDhBcnJheSB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxF
TUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
Ci0gICAgVWludDhDbGFtcGVkQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRp
b25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgb2N0ZXQg
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gRklYTUU6IE1pc3Npbmcgb3RoZXIgc2V0
dGVycyEKLSAgICAvLyB2b2lkIHNldChVaW50OENsYW1wZWRBcnJheSBhcnJheSwgb3B0aW9uYWwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFy
cmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCShyZXZp
c2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAg
IEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVj
dG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpT
R2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3Rv
bVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVu
c2lnbmVkIHNob3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZh
Y2UgVWludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxv
bmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVm
aW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0
dGVyIHVuc2lnbmVkIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQg
c2V0KFVpbnQxNkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0g
ICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cm
V29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAot
ICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAot
ICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENo
ZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgaW50LAotICAgIEltcGxlbWVu
dGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDMyQXJyYXkgOiBBcnJheUJ1ZmZl
clZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0Owot
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQz
MkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwg
b3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHVuc2lnbmVkIGxvbmcgKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDMyQXJyYXkgYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25n
PiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7
Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAjaW5jbHVkZSAiV2ViR0xV
bmlmb3JtTG9jYXRpb24uaCIKIAorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMu
aD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgpAQCAtMzQxNSw3ICsz
NDE2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhl
bCB0eXBlLgotICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVVaW50OCkgeworICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkg
ewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTE1Niw3ICs1MTU3LDcgQEAgYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgaWYgKHBp
eGVscy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4KSB7CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewogICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3Qg
VWludDhBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01
MTY0LDEzICs1MTY1LDEzIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEYKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTYpIHsKKyAg
ICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewogICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZp
ZXcgbm90IFVpbnQxNkFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8v
IE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDMyKSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUo
KSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUg
RkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5
cHRvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAJKHJl
dmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsMTQgKzQxLDcgQEAgbmFtZXNwYWNlIHsKIAogYm9vbCBpc0ludGVnZXJB
cnJheShBcnJheUJ1ZmZlclZpZXcqIGFycmF5KQogewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmll
d1R5cGUgdHlwZSA9IGFycmF5LT5nZXRUeXBlKCk7Ci0gICAgcmV0dXJuIHR5cGUgPT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlSW50OAotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmll
dzo6VHlwZVVpbnQ4Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBl
VWludDhDbGFtcGVkCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBl
SW50MTYKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTYK
LSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQzMgotICAgICAg
ICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQzMjsKKyAgICByZXR1cm4g
SlNDOjppc0ludChhcnJheS0+Z2V0VHlwZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCShyZXZpc2lvbiAxNTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0ICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9u
cy5oIgotI2ltcG9ydCAiRGF0YVZpZXcuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFjZWhv
bGRlci5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZl
cnNpb24uaCIKQEAgLTQ3LDYgKzQ2LDkgQEAKICNpbXBvcnQgIldlYkNvcmVBVkZSZXNvdXJjZUxv
YWRlci5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8b2Jq
Yy9ydW50aW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0RhdGFWaWV3Lmg+CisjaW1wb3J0IDxydW50
aW1lL09wZXJhdGlvbnMuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
ICNpbXBvcnQgPHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDhBcnJheS5oPgpAQCAtOTIzLDggKzkyNSw4
IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgLy8g
WzQgYnl0ZXM6IGtleVVSSSBzaXplXSwgW2tleVVSSSBzaXplIGJ5dGVzOiBrZXlVUkldCiAgICAg
ICAgIHVuc2lnbmVkIGtleVVSSVNpemUgPSBrZXlVUkkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIp
OwogICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZSg0ICsga2V5VVJJU2l6ZSwgMSk7Ci0gICAgICAgIFJlZlB0cjxEYXRhVmlldz4g
aW5pdERhdGFWaWV3ID0gRGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERh
dGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7Ci0gICAgICAgIGluaXREYXRhVmlldy0+c2V0VWludDMy
KDAsIGtleVVSSVNpemUsIHRydWUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBSZWZQdHI8
SlNDOjpEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGluaXRE
YXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgaW5p
dERhdGFWaWV3LT5zZXQ8dWludDMyX3Q+KDAsIGtleVVSSVNpemUsIHRydWUpOwogCiAgICAgICAg
IFJlZlB0cjxVaW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGlu
aXREYXRhQnVmZmVyLCA0LCBrZXlVUkkubGVuZ3RoKCkpOwogICAgICAgICBrZXlVUklBcnJheS0+
c2V0UmFuZ2Uoa2V5VVJJLmNoYXJhY3RlcnMoKSwga2V5VVJJLmxlbmd0aCgpIC8gc2l6ZW9mKHVu
c2lnbmVkIGNoYXIpLCAwKTsKQEAgLTEyMDQsMTMgKzEyMDYsMTMgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERh
dGFCdWZmZXIgPSBpbml0RGF0YS0+YnVmZmVyKCk7CiAKICAgICAvLyBVc2UgYSBEYXRhVmlldyB0
byByZWFkIHVpbnQzMiB2YWx1ZXMgZnJvbSB0aGUgYnVmZmVyLCBhcyBVaW50MzJBcnJheSByZXF1
aXJlcyB0aGUgcmVhZHMgYmUgYWxpZ25lZCBvbiA0LWJ5dGUgYm91bmRhcmllcy4gCi0gICAgUmVm
UHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVm
ZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBSZWZQdHI8SlNDOjpE
YXRhVmlldz4gaW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVm
ZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAgICB1aW50MzJfdCBvZmZz
ZXQgPSAwOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgc3RhdHVzID0gdHJ1
ZTsKIAotICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0VWludDMy
KG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRh
Vmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9mZnNldCAr
PSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBrZXlVUklMZW5ndGggPiBpbml0RGF0YS0+bGVu
Z3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4gaW5pdERh
dGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8VWludDE2
QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwg
b2Zmc2V0LCBrZXlVUklMZW5ndGgpOwpAQCAtMTIyMCw5ICsxMjIyLDkgQEAgYm9vbCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleVVSSSA9IFN0cmluZyhrZXlVUklB
cnJheS0+ZGF0YSgpLCBrZXlVUklMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAg
ICBvZmZzZXQgKz0ga2V5VVJJTGVuZ3RoOwogCi0gICAgdWludDMyX3Qga2V5SURMZW5ndGggPSBp
bml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBr
ZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZz
dGF0dXMpOwogICAgIG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBrZXlJRExl
bmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBr
ZXlJRExlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlJREFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0
ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBrZXlJRExlbmd0aCk7CkBAIC0xMjMyLDkgKzEyMzQs
OSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAga2V5SUQg
PSBTdHJpbmcoa2V5SURBcnJheS0+ZGF0YSgpLCBrZXlJRExlbmd0aCAvIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBrZXlJRExlbmd0aDsKIAotICAgIHVpbnQzMl90IGNl
cnRpZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBl
Yyk7CisgICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1
aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBp
ZiAoZWMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkp
CisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0
YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNlcnRpZmljYXRlID0g
VWludDhBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGNlcnRpZmljYXRlTGVu
Z3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
dXN0b21GaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDkgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNs
dWRlICJGaWx0ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNs
dWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotfQotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1c3RvbUZpbHRlclJlbmRlcmVyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAJKHJldmlzaW9uIDE1NDAzOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKIAorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvUGFyYWxsZWxKb2JzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAx
NTQwMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9VaW50OENsYW1wZWRBcnJheS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uY3BwCShyZXZpc2lvbiAxNTQwMzgpCisr
KyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJDRE0uaCIKICNpbmNsdWRlICJNZWRpYUtleUVycm9y
LmgiCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwMzgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5
cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFlvdSBkb24ndCBuZWVkIHRvIGluY2x1ZGUg
SlNVaW50OEFycmF5IGFueW1vcmUgaWYgeW91IGp1c3Qgd2FudCB0bworICAgICAgICB1bndyYXAg
b25lOyBKU0RPTUJpbmRpbmcgZ2l2ZXMgeW91IGFsbCBvZiB0aGUgdGhpbmdzIHlvdSBuZWVkLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6
CisKIDIwMTMtMDgtMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXhlZCBhbiBvZmYtYnktKHNpemVvZihjaGFyKikgLSAxKSBidWcuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMTU0MDM4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU05v
dGlmaWNhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSlNVaW50OEFycmF5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3Rz
L2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMJKHJldmlzaW9uIDE1NDAzOCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10
cmFuc2Zlci1vZi1jb250cm9sLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBAIHZh
ciBiYXNpY0J1ZmZlclR5cGVzID0KICAgICBbIlVpbnQzMiIsIFVpbnQzMkFycmF5LCA0XSwKICAg
ICBbIkludDgiLCBJbnQ4QXJyYXksIDFdLAogICAgIFsiVWludDgiLCBVaW50OEFycmF5LCAxXSwK
KyAgICBbIlVpbnQ4Q2xhbXBlZCIsIFVpbnQ4Q2xhbXBlZEFycmF5LCAxXSwKICAgICBbIkludDE2
IiwgSW50MTZBcnJheSwgMl0sCiAgICAgWyJVaW50MTYiLCBVaW50MTZBcnJheSwgMl0sCiAgICAg
WyJGbG9hdDMyIiwgRmxvYXQzMkFycmF5LCA0XSwKQEAgLTIwMCw3ICsyMDEsNyBAQCBmdW5jdGlv
biBjaGVja1ZpZXcodGVzdE5hbWUsIHR5cGVkQXJyYXlUCiAgICAgfQogICAgIGlmICh2aWV3LmJ1
ZmZlci5ieXRlTGVuZ3RoICE9PSBhcnJheVNpemUgfHwKICAgICAgICAgKCEodmlldyBpbnN0YW5j
ZW9mIERhdGFWaWV3KSAmJiB2aWV3Lmxlbmd0aCAhPT0gYXJyYXlFZmZlY3RpdmVTaXplIC8gdmll
dy5CWVRFU19QRVJfRUxFTUVOVCkpIHsKLSAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6
IHZpZXcgaGFzIHRoZSB3cm9uZyBsZW5ndGggKCIgKyB2aWV3Lmxlbmd0aCArICIpIik7CisgICAg
ICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB0aGUgd3JvbmcgbGVuZ3RoICgi
ICsgdmlldy5sZW5ndGggKyAiIGluc3RlYWQgb2YgIiArIGFycmF5RWZmZWN0aXZlU2l6ZSArICIg
LyAiICsgdmlldy5CWVRFU19QRVJfRUxFTUVOVCArICIpIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgaWYgKHZpZXcuYnl0ZU9mZnNldCAhPT0gYXJyYXlPZmZzZXQpIHsK
</data>
<flag name="review"
          id="230701"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="230639"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208718</attachid>
            <date>2013-08-14 05:40:07 -0700</date>
            <delta_ts>2013-08-14 13:52:41 -0700</delta_ts>
            <desc>Required changes for the Automake build</desc>
            <filename>typedarrays-gtk</filename>
            <type>text/plain</type>
            <size>17300</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDBiYjdkNi4u
MmY5N2VjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTE3LDYgKzE3LDcgQEAgamF2YXNjcmlwdGNvcmVfYnVpbHRfbm9zb3VyY2VzICs9IFwKIAlEZXJp
dmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9EYXRlQ29uc3RydWN0b3IubHV0LmggXAogCURlcml2
ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0RhdGVQcm90b3R5cGUubHV0LmggXAogCURlcml2ZWRT
b3VyY2VzL0phdmFTY3JpcHRDb3JlL0Vycm9yUHJvdG90eXBlLmx1dC5oIFwKKwlEZXJpdmVkU291
cmNlcy9KYXZhU2NyaXB0Q29yZS9KU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKIAlEZXJpdmVk
U291cmNlcy9KYXZhU2NyaXB0Q29yZS9KU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvSmF2YVNjcmlwdENvcmUvSlNPTk9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
SmF2YVNjcmlwdENvcmUvTWF0aE9iamVjdC5sdXQuaCBcCkBAIC0zODQsNiArMzg1LDEwIEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RG
R0NvZGVCbG9ja3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxv
Y2tzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IYW5kbGVCbG9ja0lubGluZXMuaCBcCkBAIC02ODUsNiArNjkwLDggQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3Vy
cmVudEpJVExvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0
RGF0YS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEu
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3BwIFwKQEAgLTcxOSw2ICs3MjYsOCBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5
Q2FsbGJhY2suY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5
Q2FsbGJhY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0
dGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwK
QEAgLTc0NCwxMiArNzUzLDI3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRlTWF0aC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0
aWJsZU9iamVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJB
cnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKQEAgLTc1OCwxMiArNzgyLDIx
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSW50OEFycmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBcCkBAIC03NzYs
NiArODA5LDE2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3Rv
dHlwZXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQ
cm90b3R5cGVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJh
eXMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1dpdGhTY29wZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTmFtZVNjb3BlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNO
YW1lU2NvcGUuaCBcCkBAIC04NjYsNiArOTA5LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nQ291bnRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcCBcCkBAIC04OTIsOCArOTM3LDE0
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHJhY2luZy5o
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUJhc2UuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAgXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1VpbnQxNkFycmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Vp
bnQxNldpdGhGcmFjdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50
MzJBcnJheS5oIFwKQEAgLTk2Nyw1ICsxMDE4LDQgQEAgUHJvZ3JhbXNfTExJbnRPZmZzZXRzRXh0
cmFjdG9yX1NPVVJDRVMgPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zm
c2V0c0V4dHJhY3Rvci5jcHAKIAogUHJvZ3JhbXNfanNjX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05AX1NPVVJDRVMgPSBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlT
dHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGU0NWRlYzUuLmJjMDJlNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM2
LDYgKzM2LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0RlY2ltYWxO
dW1iZXIuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAogICAgIFNv
dXJjZS9XVEYvd3RmL0RlY29kZXIuaCBcCisgICAgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaCBcCiAgICAgU291cmNlL1dURi93dGYvRGVxdWUuaCBcCiAgICAgU291cmNlL1dU
Ri93dGYvRGlzYWxsb3dDVHlwZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Eb3VibHlMaW5rZWRM
aXN0LmggXApAQCAtNTIsNiArNTMsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dU
Ri93dGYvRmlsZVByaW50U3RyZWFtLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRmlsZVByaW50
U3RyZWFtLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZpeGVkQXJyYXkuaCBcCisgICAgU291cmNl
L1dURi93dGYvRmxpcEJ5dGVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBcCiAg
ICAgU291cmNlL1dURi93dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBcCiAgICAgU291cmNlL1dU
Ri93dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggZmM3YTYzMi4uNjFlMjU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0zMCwxMCArMzAsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNBYnN0cmFjdFdvcmtlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNBYnN0cmFjdFdvcmtlci5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZm
ZXIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZmZXIuaCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyVmlldy5jcHAgXAotCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0F0dHIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXR0ci5oIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTQXVkaW9CdWZmZXIuY3BwIFwKQEAgLTE1Niw4ICsxNTIsNiBA
QCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNE
YXRhVHJhbnNmZXJJdGVtLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJhbnNmZXJJ
dGVtTGlzdC5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuY3BwIFwKLQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNEZWxheU5vZGUuY3BwIFwKQEAgLTI4OCwxMCArMjgyLDYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmlsZVdyaXRlckNh
bGxiYWNrLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5jcHAg
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5oIFwKLQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTRmxvYXQzMkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0Zsb2F0MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmxvYXQ2
NEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zsb2F0NjRBcnJheS5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9jdXNFdmVudC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNGb2N1c0V2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNG
b250TG9hZGVyLmNwcCBcCkBAIC00ODksMTIgKzQ3OSw2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNl
cyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luamVjdGVkU2NyaXB0SG9zdC5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKLQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSW50MTZBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbnQzMkFy
cmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDMyQXJyYXkuaCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDhBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJbnQ4QXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NjcmlwdFBy
b2Nlc3Nvck5vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU2NyaXB0UHJvY2Vz
c29yTm9kZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAgXApAQCAtNzU5LDE0ICs3NDMsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAog
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNUcmVlV2Fsa2VyLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVSUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VJRXZl
bnQuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmNwcCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNVaW50MzJBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50
MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDhBcnJheS5jcHAgXAot
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50OEFycmF5LmggXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNVaW50OENsYW1wZWRBcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVmFs
aWRpdHlTdGF0ZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWYWxpZGl0eVN0YXRl
LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWb2lkQ2FsbGJhY2suY3BwIFwKQEAgLTE1
NDMsMzEgKzE1MTksMTkgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9odG1s
L1RpbWVSYW5nZXMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAog
CSQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL0FycmF5QnVmZmVyLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZl
clZpZXcuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbCBc
CiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAJJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9EYXRh
Vmlldy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwgXAogCSQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXAotCSQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9h
dDY0QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwK
LQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL0ludDhBcnJheS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUZsb2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwgXAotCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OEFy
cmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCiAJJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApAQCAtMjMzNCw5ICsyMjk4LDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
aCBcCi0JU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBcCkBA
IC0yMzg4LDcgKzIzNTAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XcmFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XcmFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0
b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZp
Y2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXApAQCAtMjU0MSw2ICsyNTAyLDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKQEAgLTMzMTksOCArMzI4Miw2IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRE9NUGF0aC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3Rv
bS5jcHAKaW5kZXggYmM3OWUwYi4uY2NiNGNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCkBAIC01
MCw3ICs1MCw3IEBAIEpTVmFsdWUgSlNIVE1MVGVtcGxhdGVFbGVtZW50Ojpjb250ZW50KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKICAgICBIVE1MVGVtcGxhdGVFbGVtZW50KiBpbXAgPSBzdGF0aWNf
Y2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBEb2N1bWVudEZyYWdtZW50
KiBjb250ZW50ID0gaW1wLT5jb250ZW50KCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIg
PSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29udGVudCk7CisgICAgSlNP
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29u
dGVudCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAppbmRleCA1YjQ5OTcxLi5lNGNhNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTc0LDYgKzc0LDcgQEAKICNp
bmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5o
IgogCisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQzMkFycmF5
Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXgg
NTNlZGUzMy4uM2UyYmM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9V
aW50OENsYW1wZWRBcnJheS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xzL3N5bWJv
bHMuZmlsdGVyIGIvU291cmNlL2F1dG90b29scy9zeW1ib2xzLmZpbHRlcgppbmRleCAwMTgwYWQ3
Li4xMzc2M2VhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmlsdGVyCisr
KyBiL1NvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIKQEAgLTI2MCw3ICsyNjAsNiBAQCBf
Wk43V2ViQ29yZTlGcmFtZVZpZXcxN3NldFRyYWNrc1JlcGFpbnRzRWI7CiBfWk5LN1dlYkNvcmU1
RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHRFdjsKIF9aTjdXZWJDb3JlNHRvSlNFUE4z
SlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTjNXVEYxMUFycmF5QnVmZmVy
RTsKIF9aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjZyZWxvYWRFYjsKLV9aTjdXZWJDb3JlMTN0b0Fy
cmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFOwogX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVS
S05TXzExTGF5b3V0UG9pbnRFampqajsKIF9aTjdXZWJDb3JlMTVIaXRUZXN0TG9jYXRpb24xMnJl
Y3RGb3JQb2ludEVSS05TXzExTGF5b3V0UG9pbnRFampqajsKIF9aTjdXZWJDb3JlMjFTZXJpYWxp
emVkU2NyaXB0VmFsdWU2Y3JlYXRlRVJLTjNXVEY2U3RyaW5nRTsKQEAgLTMwNyw4ICszMDYsNiBA
QCBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RGNlZlY3RvcklOU185RmxvYXRR
dWFkRUxtMEVOUzFfMTVDcmFzaE9uT3ZlcgogX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFF
UktOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMajBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVF
OwogX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMzYWRkRWRkOwogX1pON1dlYkNvcmUxMnRvVGltZVJh
bmdlc0VOM0pTQzdKU1ZhbHVlRTsKLV9aTjdXZWJDb3JlMTR0b0Zsb2F0MzJBcnJheUVOM0pTQzdK
U1ZhbHVlRTsKLV9aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEVQTlMwXzExQXJyYXlCdWZmZXJFOwogX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5
RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOU18xMFRpbWVSYW5nZXNFOwogX1pO
SzdXZWJDb3JlMTBUaW1lUmFuZ2VzN25lYXJlc3RFZDsKIF9aTks3V2ViQ29yZTEzSGl0VGVzdFJl
c3VsdDE5cmVjdEJhc2VkVGVzdFJlc3VsdEV2Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208758</attachid>
            <date>2013-08-14 13:52:41 -0700</date>
            <delta_ts>2013-08-14 19:36:05 -0700</delta_ts>
            <desc>I think all tests pass, started to work on other build systems</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>740031</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA2
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA4
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJy
YXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJv
bHMuZmlsdGVyOgorCiAyMDEzLTA4LTEzICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBVbmljb2RlJ3MgQ0ZMQUdTIGVuZm9yY2UgLURf
Rk9SVElGWV9TT1VSQ0U9MiwgLURfUkVFTlRSQU5UPTEsIGNhdXNpbmcgZmF1bHR5IENsYW5nIGJ1
aWxkcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDQwIEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVHlwZWQgYXJyYXlzIHdlcmUg
cHJldmlvdXNseSBkZWZpY2llbnQgaW4gc2V2ZXJhbCBtYWpvciB3YXlzOgorICAgICAgICAKKyAg
ICAgICAgLSBUaGV5IHdlcmUgZGVmaW5lZCBzZXBhcmF0ZWx5IGluIFdlYkNvcmUgYW5kIGluIHRo
ZSBqc2Mgc2hlbGwuIFRoZSB0d28KKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgd2VyZSBkaWZm
ZXJlbnQsIGFuZCB0aGUganNjIHNoZWxsIG9uZSB3YXMgYmFzaWNhbGx5IHdyb25nLgorICAgICAg
ICAgIFRoZSBXZWJDb3JlIG9uZSB3YXMgcXVpdGUgYXdmdWwsIGFsc28uCisgICAgICAgIAorICAg
ICAgICAtIFR5cGVkIGFycmF5cyB3ZXJlIG5vdCB2aXNpYmxlIHRvIHRoZSBKSVQgZXhjZXB0IHRo
cm91Z2ggc29tZSB3ZWlyZCBob29rcy4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEpJVCBj
b3VsZCBub3QgYXNrICJ3aGF0IGlzIHRoZSBTdHJ1Y3R1cmUgdGhhdCB0aGlzIHR5cGVkCisgICAg
ICAgICAgYXJyYXkgd291bGQgaGF2ZSBpZiBJIGp1c3QgYWxsb2NhdGVkIGl0IGZyb20gdGhpcyBn
bG9iYWwgb2JqZWN0Ii4gQWxzbywKKyAgICAgICAgICBpdCB3YXMgZGlmZmljdWx0IHRvIHdpcmUg
YW55IG9mIHRoZSB0eXBlZCBhcnJheSBpbnRyaW5zaWNzLCBiZWNhdXNlIG1vc3QKKyAgICAgICAg
ICBvZiB0aGUgZnVuY3Rpb25hbGl0eSB3YXNuJ3QgdmlzaWJsZSBhbnl3aGVyZSBpbiBKU0MuCisg
ICAgICAgIAorICAgICAgICAtIFR5cGVkIGFycmF5IGFsbG9jYXRpb24gd2FzIGJyYWluLWRlYWQu
IEFsbG9jYXRpbmcgYSB0eXBlZCBhcnJheSBpbnZvbHZlZAorICAgICAgICAgIHR3byBKUyBvYmpl
Y3RzLCB0d28gR0Mgd2VhayBoYW5kbGVzLCBhbmQgdGhyZWUgbWFsbG9jIGFsbG9jYXRpb25zLgor
ICAgICAgICAKKyAgICAgICAgLSBOZXV0ZXJpbmcuIEl0IGludm9sdmVkIGtlZXBpbmcgdGFicyBv
biBhbGwgbmF0aXZlIHZpZXdzIGJ1dCBub3QgdGhlIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywg
ZXZlbiB0aG91Z2ggdGhlIG5hdGl2ZSB2aWV3cyBjYW4gYXV0b25ldXRlciBqdXN0IGJ5IGFza2lu
ZyB0aGUKKyAgICAgICAgICBidWZmZXIgaWYgaXQgd2FzIG5ldXRlcmVkIGFueXRpbWUgeW91IHRv
dWNoIHRoZW07IHdoaWxlIHRoZSBKUyB2aWV3CisgICAgICAgICAgd3JhcHBlcnMgYXJlIHRoZSBv
bmVzIHRoYXQgeW91IHJlYWxseSB3YW50IHRvIHJlYWNoIG91dCB0by4KKyAgICAgICAgCisgICAg
ICAgIC0gQ29tbW9uIGNhc2UtaW5nLiBNb3N0IHR5cGVkIGFycmF5cyBoYXZlIG9uZSBidWZmZXIg
YW5kIG9uZSB2aWV3LCBhbmQKKyAgICAgICAgICB1c3VhbGx5IG5vYm9keSB0b3VjaGVzIHRoZSBi
dWZmZXIuIFlldCB3ZSBjcmVhdGVkIGFsbCBvZiB0aGF0IHN0dWZmCisgICAgICAgICAgYW55d2F5
LCB1c2luZyBkYXRhIHN0cnVjdHVyZXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSB5b3Ug
aGFkIGEgbG90CisgICAgICAgICAgb2Ygdmlld3MuCisgICAgICAgIAorICAgICAgICAtIFNlbWFu
dGljIGdvb2ZzLiBUeXBlZCBhcnJheXMgc2hvdWxkLCBpbiB0aGUgZnV0dXJlLCBiZWhhdmUgbGlr
ZSBFUworICAgICAgICAgIGZlYXR1cmVzIHJhdGhlciB0aGFuIERPTSBmZWF0dXJlcywgZm9yIGV4
YW1wbGUgd2hlbiBpdCBjb21lcyB0byBleGNlcHRpb25zLgorICAgICAgICAgIEZpcmVmb3ggYWxy
ZWFkeSBkb2VzIHRoaXMgYW5kIEkgYWdyZWUgd2l0aCB0aGVtLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBwYXRjaCBjbGVhbnNlcyBvdXIgY29kZWJhc2Ugb2YgdGhlc2Ugc2luczoKKyAgICAgICAg
CisgICAgICAgIC0gVHlwZWQgYXJyYXlzIGFyZSBhbG1vc3QgZW50aXJlbHkgZGVmaW5lZCBpbiBK
U0MuIE9ubHkgdGhlIGxpZmVjeWNsZQorICAgICAgICAgIG1hbmFnZW1lbnQgb2YgbmF0aXZlIHJl
ZmVyZW5jZXMgdG8gYnVmZmVycyBpcyBsZWZ0IHRvIFdlYkNvcmUuCisgICAgICAgIAorICAgICAg
ICAtIEFsbG9jYXRpbmcgYSB0eXBlZCBhcnJheSByZXF1aXJlcyBlaXRoZXIgdHdvIEdDIGFsbG9j
YXRpb25zIChhIGNlbGwgYW5kIGEKKyAgICAgICAgICBjb3BpZWQgc3RvcmFnZSB2ZWN0b3IpIG9y
IG9uZSBHQyBhbGxvY2F0aW9uLCBhIG1hbGxvYyBhbGxvY2F0aW9uLCBhbmQgYQorICAgICAgICAg
IHdlYWsgaGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMg
YSBmaW5hbGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25s
eSB1c2VkIGZvciBvdmVyc2l6ZSBhcnJheXMuIFJlbWVtYmVyIHRoYXQgYmVmb3JlCisgICAgICAg
ICAgaXQgd2FzIDcgYWxsb2NhdGlvbnMgbm8gbWF0dGVyIHdoYXQuCisgICAgICAgIAorICAgICAg
ICAtIFR5cGVkIGFycmF5cyByZXF1aXJlIGp1c3QgNCB3b3JkcyBvZiBvdmVyaGVhZDogU3RydWN0
dXJlKiwgQnV0dGVyZmx5KiwKKyAgICAgICAgICBtb2RlL2xlbmd0aCwgdm9pZCogdmVjdG9yLiBC
ZWZvcmUgaXQgd2FzIGEgbG90IG1vcmUgdGhhbiB0aGF0IC0gcmVtZW1iZXIsCisgICAgICAgICAg
dGhlcmUgd2VyZSBmaXZlIGFkZGl0aW9uYWwgb2JqZWN0cyB0aGF0IGRpZCBhYnNvbHV0ZWx5IG5v
dGhpbmcgZm9yIGFueWJvZHkuCisgICAgICAgIAorICAgICAgICAtIE5hdGl2ZSB2aWV3cyBhcmVu
J3QgdHJhY2tlZCBieSB0aGUgYnVmZmVyLCBvciBieSB0aGUgd3JhcHBlcnMuIFRoZXkgYXJlCisg
ICAgICAgICAgdHJhbnNpZW50LiBJbiB0aGUgZnV0dXJlIHdlJ2xsIHByb2JhYmx5IHN3aXRjaCB0
byBub3QgZXZlbiBoYXZpbmcgdGhlbSBiZQorICAgICAgICAgIG1hbGxvYydkLgorICAgICAgICAK
KyAgICAgICAgLSBOYXRpdmUgYXJyYXkgYnVmZmVycyBoYXZlIGFuIGVmZmljaWVudCB3YXkgb2Yg
dHJhY2tpbmcgYWxsIG9mIHRoZWlyIEpTIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywgYm90aCBm
b3IgbmV1dGVyaW5nLCBhbmQgZm9yIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgR0MKKyAgICAg
ICAgICBzcGVjaWFsLWNhc2VzIG5hdGl2ZSBhcnJheSBidWZmZXJzLiBUaGlzIHNhdmVzIGEgYnVu
Y2ggb2YgZ3JpZWY7IGZvciBleGFtcGxlCisgICAgICAgICAgaXQgbWVhbnMgdGhhdCBhIEpTIHZp
ZXcgd3JhcHBlciBjYW4gcmVmZXIgdG8gaXRzIGJ1ZmZlciB2aWEgdGhlIGJ1dHRlcmZseSwKKyAg
ICAgICAgICB3aGljaCB3b3VsZCBiZSBkZWFkIGJ5IHRoZSB0aW1lIHdlIHdlbnQgdG8gZmluYWxp
emUuCisgICAgICAgIAorICAgICAgICAtIFR5cGVkIGFycmF5IHNlbWFudGljcyBub3cgbWF0Y2gg
RmlyZWZveCwgd2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZQorICAgICAgICAgIHN0
YW5kYXJkcyBhcmUgZ29pbmcuIFRoZSBkaXNjdXNzaW9uIG9uIHdlYmtpdC1kZXYgc2VlbWVkIHRv
IGNvbmZpcm0gdGhhdAorICAgICAgICAgIENocm9tZSBpcyBhbHNvIGhlYWRpbmcgaW4gdGhpcyBk
aXJlY3Rpb24uIFRoaXMgaW5jbHVkZXMgbWFraW5nCisgICAgICAgICAgVWludDhDbGFtcGVkQXJy
YXkgbm90IGEgc3VidHlwZSBvZiBVaW50OEFycmF5LCBhbmQgZ2V0dGluZyByaWQgb2YKKyAgICAg
ICAgICBBcnJheUJ1ZmZlclZpZXcgYXMgYSBKUy12aXNpYmxlIGNvbnN0cnVjdC4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2Nh
dGUgYSBsb3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nnggc3BlZWQt
dXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4KKyAgICAg
ICAgCisgICAgICAgIEFuIGFkZGl0aW9uYWwgcHJvcGVydHkgb2YgdGhpcyBwYXRjaCBpcyB0aGF0
IHR5cGVkIGFycmF5cyBhcmUgbW9zdGx5CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIHRlbXBs
YXRlcy4gVGhpcyBkZWR1cGxpY2F0ZXMgYSBidW5jaCBvZiBjb2RlLCBidXQgZG9lcyBtZWFuCisg
ICAgICAgIHRoYXQgd2UgbmVlZCBzb21lIGhhY2tzIGZvciBleHBvcnRpbmcgc19pbmZvJ3Mgb2Yg
dGVtcGxhdGUgY2xhc3Nlcy4gU2VlCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
YW5kIEpTVHlwZWRBcnJheXMuY3BwLiBUaG9zZSBoYWNrcyBhcmUgZmFpcmx5CisgICAgICAgIGxv
dy1pbXBhY3QgY29tcGFyZWQgdG8gY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSlNDVHlwZWRBcnJheVN0dWJzLmg6IFJlbW92ZWQu
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6aGFzT3B0aW1pemFi
bGVJbmRleGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckNs
YXNzSW5mbyk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKToK
KyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNw
ZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgICogZGZnL0RG
R0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlwZWRBcnJheVR5
cGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvQ29weVRva2Vu
Lmg6CisgICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAgIChKU0M6OkRlZmVyR0NGb3JB
V2hpbGU6OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlNDOjpEZWZlckdDRm9yQVdoaWxl
Ojp+RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRl
ZC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OkdDSW5jb21p
bmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6On5HQ0lu
Y29taW5nUmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpu
dW1iZXJPZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZD
b3VudGVkOjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291
bnRlZDo6aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3Vu
dGVkOjpoYXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVk
OjpoYXNTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6c2lu
Z2xldG9uKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnZlY3Rvck9mQ2Vs
bHMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6
OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0OjpzaXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5nUmVmQ291bnRlZFNldCk6Cisg
ICAgICAgIChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KToKKyAgICAgICAgKEpTQzo6
OjphZGRSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6
OjpyZW1vdmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURlYWQpOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJlZmVyZW5jZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemUpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3Qp
OgorICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgorICAgICAg
ICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAg
ICAgICAoSlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgorICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBqc2Mu
Y3BwOgorICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
cnVudGltZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cmFu
c2Zlcik6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpB
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUlu
Qnl0ZXMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGluKToKKyAgICAgICAgKEpTQzo6
QXJyYXlCdWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAg
ICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAo
SlNDOjpBcnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlC
dWZmZXJWaWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6aXNOZXV0ZXJlZCk6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6
QXJyYXlCdWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVy
Vmlldzo6Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6dmVyaWZ5
U3ViUmFuZ2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNsYW1wT2Zmc2V0QW5k
TnVtRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9m
ZnNldEFuZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9EYXRhVmll
dy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6RGF0YVZpZXcpOgorICAgICAg
ICAoSlNDOjpEYXRhVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OndyYXAp
OgorICAgICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRh
dGFWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmdldFR5cGUpOgor
ICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0KToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OnNl
dCk6CisgICAgICAgICogcnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1l
L0Zsb2F0NjRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmRhdGEpOgor
ICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAgICAoSlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc6Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6emVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0ZUxlbmd0
aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6aXRlbSk6CisgICAgICAg
IChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2hlY2tJbmJvdW5kRGF0YSk6CisgICAgICAg
IChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0VHlwZSk6CisgICAgICAgICogcnVudGlt
ZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6OjpzdWJhcnJh
eSk6CisgICAgICAgIChKU0M6Ojo6d3JhcCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hl
YWRlci5oOgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJyYXlCdWZmZXIpOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1
bnRpbWUvSW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50MzJBcnJheS5oOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVm
ZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZm
ZXIpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6Omdl
dE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OnB1dCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6
aW1wbCk6CisgICAgICAgIChKU0M6OnRvQXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1Ns
aWNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZl
clByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisg
ICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9u
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVy
Vmlldyk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpK
U0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlclZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXpl
T2YpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4
dDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVj
dGlvbkNvbnRleHQ6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6
Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6Om5ldXRlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0
KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRB
cnJheUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0RhdGFWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0
YVZpZXcpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlND
OjpKU0RhdGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRh
Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6dHlwZWRJbXBsKToKKyAgICAg
ICAgKEpTQzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZp
ZXc6OmdldFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkpTRGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFW
aWV3UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpnZXRE
YXRhKToKKyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYp
OgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJv
dG9GdW5jR2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgorICAgICAg
ICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1Nl
dEludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6CisgICAg
ICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAgICAgKiBy
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9K
U0Zsb2F0MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2NEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXplKToKKyAg
ICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToKKyAgICAg
ICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1aWNrbHkp
OgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5
QXNOYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojpn
ZXRJbmRleFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAg
ICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlja2x5KToK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkSW1wbCk6CisgICAg
ICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6aW5mbyk6CisgICAgICAgIChKU0M6
OnRvTmF0aXZlVHlwZWRWaWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6Ojpm
aW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRB
cnJheVZpZXcpOgorICAgICAgICAoSlNDOjo6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAo
SlNDOjo6OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVh
dGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6Ojp2YWxpZGF0ZVJhbmdlKToKKyAgICAg
ICAgKEpTQzo6OjpzZXRXaXRoU3BlY2lmaWNUeXBlKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgor
ICAgICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6Ojo6Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAo
SlNDOjo6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAg
IChKU0M6Ojo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjo6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjo6OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAo
SlNDOjo6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjo6OmdldFR5cGVk
QXJyYXlJbXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTdWJhcnJheSk6CisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0Ojp0eXBlZEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pT
SW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50MzJBcnJheS5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNU
eXBlZEFycmF5cy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDE2QXJyYXkuaDogQWRkZWQuCisgICAg
ICAgICogcnVudGltZS9KU1VpbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNVaW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OENsYW1wZWRB
cnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNJbmRl
eGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkludGVncmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToK
KyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAg
ICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAg
ICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6
OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZsb2F0
VHlwZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVk
QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0
b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0RvdWJsZSk6
CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OmNsYW1wKToKKyAgICAgICAgKiBy
dW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlR5
cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6
OlR5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAq
IHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZWRBcnJheUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9Gb3JUeXBlKToKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5VHlwZS5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6OmlzVHlwZWRW
aWV3KToKKyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAgICAgICAoSlNDOjppc0ludCk6
CisgICAgICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlNDOjppc1NpZ25lZCk6CisgICAg
ICAgIChKU0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5cy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGlt
ZS9VaW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhBcnJheS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNw
cDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAg
ICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTE0ICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBDb21waWxlIGZpeCBmb3IgV2luNjQgd2l0
aCBqaXQgZGlzYWJsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwCiAgICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAorICAgIGhlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXQuaAorICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAorICAgIGhlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lcy5oCiAgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhyZWFk
U2hhcmVkRGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKQEAgLTI2NCwxMCArMjY4LDEw
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcHJvZmlsZXIvUHJvZmlsZU5vZGUu
Y3BwCiAgICAgcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuY3BwCiAKLSAgICBydW50aW1lL0FycmF5
QnVmZmVyLmNwcAotICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUv
QXJnTGlzdC5jcHAKICAgICBydW50aW1lL0FyZ3VtZW50cy5jcHAKKyAgICBydW50aW1lL0FycmF5
QnVmZmVyLmNwcAorICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUv
QXJyYXlDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAogICAg
IHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcApAQCAtMjgyLDYgKzI4Niw4IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAK
ICAgICBydW50aW1lL0NvbXBsZXRpb24uY3BwCiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRhLmNw
cAorICAgIHJ1bnRpbWUvRGF0YVZpZXcuY3BwCisgICAgcnVudGltZS9EYXRhVmlldy5oCiAgICAg
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9EYXRlQ29udmVyc2lvbi5j
cHAKICAgICBydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKQEAgLTMwNiwxMCArMzEyLDE2IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5j
cHAKICAgICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKICAgICBydW50aW1lL0pTQXJyYXkuY3Bw
CisgICAgcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAorICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAK
KyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmNwcAogICAgIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKICAgICBydW50aW1lL0pTQ2Vs
bC5jcHAKICAgICBydW50aW1lL0pTQ2h1bmsuY3BwCisgICAgcnVudGltZS9KU0RhdGFWaWV3LmNw
cAorICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0pTRGF0
ZU1hdGguY3BwCiAgICAgcnVudGltZS9KU0Z1bmN0aW9uLmNwcAogICAgIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCkBAIC0zMjcsNiArMzM5LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBydW50aW1lL0pTU3RyaW5nLmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIu
Y3BwCiAgICAgcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorICAgIHJ1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAorICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5jcHAKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCiAgICAgcnVudGltZS9KU1Zh
cmlhYmxlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCiAgICAgcnVudGlt
ZS9KU1dyYXBwZXJPYmplY3QuY3BwCkBAIC0zNTksNiArMzc0LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKICAgICBydW50aW1lL1Jl
Z0V4cFByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAKKyAgICBy
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAogICAgIHJ1bnRpbWUvU21hbGxT
dHJpbmdzLmNwcAogICAgIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKICAgICBydW50
aW1lL1N0cmljdEV2YWxBY3RpdmF0aW9uLmNwcApAQCAtMzcwLDYgKzM4Niw4IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKICAgICBy
dW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
CisgICAgcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAKKyAgICBydW50aW1lL1R5cGVk
QXJyYXlUeXBlLmNwcAogICAgIHJ1bnRpbWUvVk0uY3BwCiAgICAgcnVudGltZS9XYXRjaGRvZy5j
cHAKICAgICBydW50aW1lL1dhdGNoZG9nTm9uZS5jcHAKQEAgLTM5MSw2ICs0MDksNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfTFVUX0ZJTEVTCiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3Bw
CiAgICAgcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5
cGUuY3BwCisgICAgcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcAogICAgIHJ1bnRp
bWUvTmFtZVByb3RvdHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwg
OiBcCiAgICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5o
IFwKICAgICBFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5s
dXQuaCBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0Lmgg
XAogICAgIEtleXdvcmRMb29rdXAuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAg
amF2YXNjcmlwdGNvcmVfYnVpbHRfbm9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9KYXZh
U2NyaXB0Q29yZS9EYXRlQ29uc3RydWN0b3IubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFT
Y3JpcHRDb3JlL0RhdGVQcm90b3R5cGUubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3Jp
cHRDb3JlL0Vycm9yUHJvdG90eXBlLmx1dC5oIFwKKwlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZS9KU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS9KU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvSlNPTk9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
TWF0aE9iamVjdC5sdXQuaCBcCkBAIC0zODQsNiArMzg1LDEwIEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IYW5kbGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVCbG9j
a0lubGluZXMuaCBcCkBAIC02ODUsNiArNjkwLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRhVmlldy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZl
cnNpb24uY3BwIFwKQEAgLTcxOSw2ICs3MjYsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKQEAgLTc0NCwxMiArNzUz
LDI3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
SW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRGF0YVZpZXdQcm90b3R5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRlTWF0aC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKQEAgLTc1OCwxMiArNzgyLDIxIEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludDE2QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQzMkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFy
cmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBcCkBAIC03NzYsNiArODA5LDE2IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmggXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQ4QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50OENsYW1wZWRBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dp
dGhTY29wZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3Bl
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaCBcCkBA
IC04NjYsNiArOTA5LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NhbXBsaW5nQ291bnRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmNwcCBcCkBAIC04OTIsOCArOTM3LDE0IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHJhY2luZy5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUJhc2UuaCBcCi0JU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFy
cmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNldpdGhGcmFjdGlv
bi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oIFwKQEAg
LTk2Nyw1ICsxMDE4LDQgQEAgUHJvZ3JhbXNfTExJbnRPZmZzZXRzRXh0cmFjdG9yX1NPVVJDRVMg
PQogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
CiAKIFByb2dyYW1zX2pzY19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9TT1VSQ0VTID0g
XAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NU
eXBlZEFycmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlND
VHlwZWRBcnJheVN0dWJzLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEpTQ1R5cGVkQXJyYXlTdHVic19oCi0jZGVmaW5lIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0KLSNp
bmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJGbG9hdDY0QXJyYXkuaCIKLSNpbmNs
dWRlICJJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIklu
dDhBcnJheS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlVp
bnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJVaW50OEFy
cmF5LmgiCi0jaW5jbHVkZSAiVWludDhDbGFtcGVkQXJyYXkuaCIKLQotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIAotI2RlZmluZSBUWVBFRF9BUlJBWShu
YW1lLCB0eXBlKSBcCi1jbGFzcyBKUyMjbmFtZSMjQXJyYXkgOiBwdWJsaWMgSlNEZXN0cnVjdGli
bGVPYmplY3QgeyBcCi1wdWJsaWM6IFwKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IEJhc2U7IFwKLSAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxu
YW1lIyNBcnJheT4gaW1wbCkgXAotICAgIHsgXAotICAgICAgICBKUyMjbmFtZSMjQXJyYXkqIHB0
ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5PihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgaW1wbCk7IFwKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOyBcCi0gICAgICAgIHJldHVybiBwdHI7IFwKLSAgICB9XAotXAotICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XAotICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJik7XAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpK
U1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTQzo6SlNWYWx1ZSwgYm9vbCk7XAotICAgIERFQ0xBUkVfSU5GTztcCi1cCi0gICAgc3RhdGlj
IEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcCi0gICAge1wK
LSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpO1wKLSAgICB9XAotXAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpO1wKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1wKLVwKLSAgICBzdGF0aWMgY29uc3QgSlND
OjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OlR5cGVkQXJyYXkj
I25hbWU7XAotICAgIHVpbnQzMl90IG1fc3RvcmFnZUxlbmd0aDtcCi0gICAgdHlwZSogbV9zdG9y
YWdlO1wKLSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1wbDtcCi1wcm90ZWN0ZWQ6XAotICAg
IEpTIyNuYW1lIyNBcnJheShKU0M6OlN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxuYW1lIyNBcnJheT4pO1wKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtc
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsgXAotICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUlu
ZGV4KEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1wKLSAgICB2b2lkIGluZGV4U2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XAotfTtc
Ci1cCi1jb25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNuYW1lICJB
cnJheSIgLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyNuYW1l
IyNBcnJheSkgfTtcCi1cCi1KUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxu
YW1lIyNBcnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0
dXJlKVwKLSAgICAsIG1faW1wbChpbXBsKVwKLXtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJy
YXk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSlcCi17XAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTtcCi0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlMjI25hbWUjI0Fy
cmF5OjpzX2luZm8sIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZSks
IE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpO1wKLSAg
ICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRv
cik7XAotICAgIG1fc3RvcmFnZSA9IG1faW1wbC0+ZGF0YSgpO1wKLSAgICBtX3N0b3JhZ2VMZW5n
dGggPSBtX2ltcGwtPmxlbmd0aCgpO1wKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOyBcCi0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1wKLX1cCi1c
Ci1ib29sIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5h
bWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5n
dGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgp
O1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGlu
ZGV4KSk7XAotICAgICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcCi19
XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhp
c09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cih0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgRG9udERlbGV0ZSk7XAotICAg
ICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcCi19
XAotXAotYm9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPCB0
aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAgIHJldHVy
biB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25h
bWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAg
IHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4
ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkge1wKLSAgICAgICAgdGhpc09iamVjdC0+aW5k
ZXhTZXR0ZXIoZXhlYywgaW5kZXgsIHZhbHVlKTtcCi0gICAgICAgIHJldHVybjtcCi0gICAgfVwK
LSAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgXAote1wKLSAg
ICBtX2ltcGwtPnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpO1wKLX1cCi1cCi12b2lk
IEpTIyNuYW1lIyNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sKVwKLXtcCi0gICAg
SlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNl
bGwpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
XAotICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUp
O1wKLSAgICByZXR1cm47XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVwKLXtcCi0gICAgSlMj
I25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVj
dCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtc
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0
aDsgKytpKVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUjI0FycmF5Ojpn
ZXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzLCBpbmZvKCkpO1wKLSAgICB0eXBlIHJlc3VsdCA9IG1faW1w
bC0+aXRlbShpbmRleCk7XAotICAgIGlmIChzdGQ6OmlzbmFuKChkb3VibGUpcmVzdWx0KSlcCi0g
ICAgICAgIHJldHVybiBqc05hTigpO1wKLSAgICByZXR1cm4gSlNWYWx1ZShyZXN1bHQpO1wKLX1c
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUyMjbmFtZSMj
QXJyYXkoRXhlY1N0YXRlKiBjYWxsRnJhbWUpIHsgXAotICAgIGlmIChjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpIFwKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsgXAotICAgIGludDMyX3QgbGVuZ3RoID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50
b0ludDMyKGNhbGxGcmFtZSk7IFwKLSAgICBpZiAobGVuZ3RoIDwgMCkgXAotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyBcCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBKUyMjbmFtZSMjQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShjYWxsRnJhbWUtPnZtKCks
IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOyBcCi0gICAgUmVmUHRyPG5hbWUjI0FycmF5
PiBidWZmZXIgPSBuYW1lIyNBcnJheTo6Y3JlYXRlKGxlbmd0aCk7IFwKLSAgICBpZiAoIWJ1ZmZl
cikgXAotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlUmFuZ2VF
cnJvcihjYWxsRnJhbWUsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBw
b3NpdGl2ZSBpbnRlZ2VyLiIpKTsgXAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMjI25h
bWUjI0FycmF5OjpjcmVhdGUoc3RydWN0dXJlLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwgYnVmZmVyLnJlbGVhc2UoKSkpOyBcCi19Ci0KLVRZUEVEX0FSUkFZKFVpbnQ4LCB1aW50
OF90KTsKLVRZUEVEX0FSUkFZKFVpbnQ4Q2xhbXBlZCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShV
aW50MTYsIHVpbnQxNl90KTsKLVRZUEVEX0FSUkFZKFVpbnQzMiwgdWludDMyX3QpOwotVFlQRURf
QVJSQVkoSW50OCwgaW50OF90KTsKLVRZUEVEX0FSUkFZKEludDE2LCBpbnQxNl90KTsKLVRZUEVE
X0FSUkFZKEludDMyLCBpbnQzMl90KTsKLVRZUEVEX0FSUkFZKEZsb2F0MzIsIGZsb2F0KTsKLVRZ
UEVEX0FSUkFZKEZsb2F0NjQsIGRvdWJsZSk7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCi0jaW5jbHVkZSAiSlNDVHlwZWRBcnJheVN0dWJzLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIKQEAgLTIz
OCwxNiArMjM3LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFy
U2FtcGxpbmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgog
ICAgICAgICAKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJh
eSIsIGNvbnN0cnVjdEpTVWludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbih2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRB
cnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFy
cmF5IiwgY29uc3RydWN0SlNVaW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbih2bSwgIlVpbnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7
Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0
cnVjdEpTSW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZt
LCAiSW50MTZBcnJheSIsIGNvbnN0cnVjdEpTSW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENv
bnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJy
YXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJy
YXkiLCBjb25zdHJ1Y3RKU0Zsb2F0MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFi
bGVGdW5jdGlvbih2bSwgIkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAx
KTsKLQogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFs
RXhlYygpLCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygp
LCBpLCBqc1N0cmluZyhnbG9iYWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlclByb2ZpbGVkQnl0
ZWNvZGVzLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5
QnVmZmVyLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5
QnVmZmVyVmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxB
cmdMaXN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3Vt
ZW50cy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1
ZmZlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1
ZmZlclZpZXcuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJy
YXlDb25zdHJ1Y3Rvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxBcnJheVByb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxCb29sZWFuQ29uc3RydWN0b3IuY3BwIiAvPg0KQEAgLTQyNyw2ICs0MjcsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbXBsZXRpb24u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0
YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0
b3IuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZl
cnNpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUlu
c3RhbmNlLmNwcCIgLz4NCkBAIC00NDYsMTIgKzQ0NywxOCBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAi
IC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRpb24uY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBw
ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0
aW9uLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXku
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZl
ci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyVmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0JvdW5kRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTRGF0YVZpZXcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0RhdGVNYXRoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuY3BwIiAvPg0KQEAgLTQ1OSw4ICs0NjYs
OCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOb3RBbk9iamVjdC5jcHAiIC8+
DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09OT2JqZWN0LmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Njb3BlLmNwcCIgLz4NCkBA
IC00NjgsNiArNDc1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNT
dHJpbmcuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJp
bmdKb2luZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXaXRoU2NvcGUuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFwcGVyT2JqZWN0LmNwcCIg
Lz4NCkBAIC00OTksNiArNTA5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcUmVnRXhwT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFJlZ0V4cFByb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxTYW1wbGluZ0NvdW50ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU21hbGxTdHJpbmdzLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24u
Y3BwIiAvPg0KQEAgLTUxMCw2ICs1MjEsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxTdHJ1Y3R1cmVDaGFpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxTeW1ib2xUYWJsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxXYXRjaGRvZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxXYXRjaGRvZ05vbmUuY3BwIiAvPg0KQEAgLTUyNyw2ICs1NDAsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMy
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXERhdGVQcm90b3R5cGUubHV0LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEVycm9yUHJvdG90eXBlLmx1dC5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFBy
b2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0
TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNHbG9iYWxPYmplY3QubHV0LmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTT05PYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXExleGVyLmx1dC5oIiAvPg0KQEAgLTc3MywxMCArNzg3LDEwIEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXQuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRl
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9m
aWxlZEJ5dGVjb2Rlcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
QXJyYXlCdWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
cmF5QnVmZmVyVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
QXJnTGlzdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1l
bnRzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZl
ci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJW
aWV3LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0
cnVjdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNv
bnZlbnRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJh
eVByb3RvdHlwZS5oIiAvPg0KQEAgLTc5OCw2ICs4MTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb25zdHJ1Y3REYXRhLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmgiIC8+DQpAQCAtODE1LDYgKzgz
MCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uQ29uc3Ry
dWN0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9u
UHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJZGVudGlmaWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPg0KQEAgLTgyNywyNCArODQ0
LDQyIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVy
bmFsRnVuY3Rpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
dHJpbnNpYy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3Rp
dmF0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZh
bHVlV3JhcHBlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNB
Y3RpdmF0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Fy
cmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVm
ZmVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTQXJyYXlCdWZmZXJWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIiAvPg0KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0NKU1ZhbHVlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0NKU1ZhbHVlSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0RhdGFWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0RhdGFWaWV3UHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0RhdGVNYXRoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRmxvYXQzMkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Zsb2F0NjRBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQxNkFycmF5LmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0ludDMyQXJyYXkuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50OEFycmF5LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3BlLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU05vdEFuT2JqZWN0LmgiIC8+DQotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJveHkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTU2NvcGUuaCIgLz4NCkBAIC04NTUsNiArODkwLDEzIEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZS5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlSW5mby5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJy
YXlzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQxNkFy
cmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQzMkFy
cmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJy
YXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDhDbGFt
cGVkQXJyYXkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFy
aWFibGVPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
V2l0aFNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dy
YXBwZXJPYmplY3QuaCIgLz4NCkBAIC04OTcsNiArOTM5LDcgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwUHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxSZWplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNhbXBsaW5nQ291bnRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIg
Lz4NCkBAIC05MTEsNyArOTU0LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3ltYm9sVGFibGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFRyYWNpbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlZEFycmF5QWRhcHRvcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVkQXJyYXlzLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJheS5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDE2V2l0aEZyYWN0aW9uLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIiAvPg0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2
OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3
QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2
MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjZBQzE3QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3
QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdC
NkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsg
fTsKKwkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FF
M0YgLyogRGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVB
QjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUz
RiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICov
OyB9OworCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Qjgx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkw
RjJCNjZFNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZF
QzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCNjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVF
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTSW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0Ux
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkw
RjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAg
Ki87IH07CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1Vp
bnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBB
N0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8q
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVB
QjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0Yg
LyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3
MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsg
fTsKKwkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJ
CTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25T
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJE
QzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJCTBG
NDY4MEQ0MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1Rjgw
MEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUxNEJC
RDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkz
QUY4MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBGNEI5
NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0
IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2lu
dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBG
NTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1
IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAt
MzQ5LDcgKzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVB
MEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsg
fTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJC
NzIyQyAvKiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNj
cmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3
RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1w
UGxhY2Vob2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3QURC
NUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4
QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVGMzAw
NUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyog
VHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNGMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3
QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4
QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJCTBG
MjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNG
IC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZD
b3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1M0Qw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QjIxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Rh
dGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZp
ZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmll
d1Byb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZD
NjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheVByb3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNUeXBlZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQx
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheUFkYXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFy
cmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFy
cmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQjE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAv
KiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBoYXNl
Lmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0gZGZn
L0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NCw2
ICsxMzUyLDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJu
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRC
QkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0
IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFR5cGVkQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0
MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyog
REZHQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdBYnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBGRUEw
QTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBk
ZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2
MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3
RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZERDEx
OEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJl
SGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9v
cFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzY3QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkg
LyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ1R5cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZD
NTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fi
c3RyYWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdB
YnN0cmFjdEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3
QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThB
RjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyog
VHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRB
cnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3
QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYw
MEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBj
b25maWcuaCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENv
cmVQcmVmaXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRB
cnJheVN0dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRT
b3VyY2VzLm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRM
b29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQ
SSAqLywKQEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBH
Q0Fzc2VydGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUz
RDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMy
MjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYx
NjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEsOCBA
QAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICov
LAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywK
IAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAorCQkJ
CTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2
QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3MTM1
RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3MTM1
RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMxMEMw
MEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBAQAog
CQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAog
CQkJCUMyRDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICov
LAogCQkJCURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
LywKKwkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggKi8sCisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVy
U2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0
dGVyLmggKi8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3Bw
ICovLApAQCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQg
LyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQz
MkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5o
ICovLAotCQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlLmggKi8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIElu
dGVybmFsRnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTREQTgx
OEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MEND
QkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4
NjM1Q0UgLyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZC
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBGMkI2
NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBGMkI2
NkJDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywKIAkJ
CQk4NkZBOUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJ
CQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJ
QkM3RjhGQkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3ICsz
MDQ4LDMyIEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3Bw
ICovLAogCQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCiAJ
CQkJODY1QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCisJ
CQkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBG
MkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2
NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJOTc4
OEZDMjIxNDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIz
MTQ3MUFEMEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJE
NDAwRjc2Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0
QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2
MEY3IC8qIEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAv
KiBKU0Z1bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVu
Y3Rpb25JbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZDNTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXMuaCAqLywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICov
LAogCQkJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8s
CiAJCQkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJ
CQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5
LmggKi8sCisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICov
LAorCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJ
CTY1RUE0Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0QzlB
MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRBMDAy
RTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJCQkJ
MEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAog
CQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8s
CiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBGMkI2
NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAor
CQkJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
aCAqLywKKwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5jcHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eVByb3RvdHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBl
ZEFycmF5cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheXMuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5o
ICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8s
CisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKKwkJ
CQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYy
QjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQlC
QzIyQTM5QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJ
MTRGMjUyNTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJCQkx
NDQyNTY1RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1MSw2
ICszMTg2LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8s
CiAJCQkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8s
CiAJCQkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAor
CQkJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAgKi8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENEMjkz
MzEwMEI1QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIx
RTU0OSAvKiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRy
YWNpbmcuaCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCAqLywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFk
YXB0b3JzLmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlw
ZWRBcnJheUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eVR5cGUuY3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
VHlwZS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5o
ICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24u
aCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywK
QEAgLTM1MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyog
QXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2
MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBF
RDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZl
cldpdGhDb25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIw
MDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdC
MiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYx
NjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0
QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNTU1LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxs
RnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQx
QzEgLyogQ2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3
MTgwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFB
QUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2
Niw2ICszNzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29k
ZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8q
IENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZp
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29t
bW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJCQkJ
MEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNG
MTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZC
OTIxODE2RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzM3ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyog
REZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThD
OTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJQTdE
ODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0
ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFE
MDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdD
Q2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJCQlB
N0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlz
aXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8q
IERGR0ZQUkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIw
MDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZD
NEUxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NjU4LDYgKzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZH
SklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUz
NUIxNzk5Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0EzRUEx
MzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFC
MTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkE1ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyog
REZHTm9kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFE
NyAvKiBERkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOEND
MDA3NzNBRDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRF
RjkwQUYwMEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0Ix
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25J
bmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdB
RTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNB
NjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1NwZWN1bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBACiAJ
CQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5n
ZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FE
QjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFG
MzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcy
MkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5
NzM4RDUwMDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlE
Rjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcy
RTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1
Miw2IEBACiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdy
YWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAw
MTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MTE2NjdCMEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOEND
M0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRD
NTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjZGRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQ
Uy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFEMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYx
MzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRS
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0Nv
bnRleHRSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5
ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiAr
NDAxNCw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1l
U2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1
NTdFMzAwMEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzg2Niw2ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU1N0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIg
LyogSlNTdGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUsNyBA
QAogCQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3
MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRo
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBK
U1dyYXBwZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJCQlB
N0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8q
IExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8q
IExvd0xldmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RB
NkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzky
Niw2ICs0MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3Nl
bWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJs
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFy
a2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAogCQkJ
CUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmll
d1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYw
IC8qIE1hdGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMy
MDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
RjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyog
TmFtZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4
RTkyMjIgLyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBG
MDZBMDA4RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJv
dG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyog
Tm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAw
QUE3QzkzIC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3IEBA
CiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8q
IFBvbHltb3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZC
RkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFt
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2Zp
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9m
aWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAogCQkJ
CTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhN
b2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdB
NTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZB
NzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQs
NiArNDE5NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2Fs
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxs
U3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8q
IFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBC
MzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJF
RjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBp
biBIZWFkZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZE
MDAxNkE1MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRDQTk1OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0
aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBC
MzQ0NjAgLyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZE
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5n
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAogCQkJ
CUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRh
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8q
IFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5
MDA0MTNDOEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0
MTQ4MEVCOTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3
RkJEIC8qIFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5
N0I0MDA1NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0
NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyog
VHJhY2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8q
IFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBB
QjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRl
cm4uaCBpbiBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4ODEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRC
OEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMz
NzYwMDQyN0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Mjgw
ODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgw
ODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0Qx
N0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGRkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0
Q0QwMEU0REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJBMTUw
RTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZF
QzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5
c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJF
NTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQzA5NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkz
MzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhh
bmRsZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0My
QyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAogCQkJ
CUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3
RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdF
NDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3
QUUzRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5
MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJE
RTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2
ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00Njkw
LDYgKzQ4NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmpl
Y3RNYXBSZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQw
MDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2
N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBK
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4Qzky
MEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEy
LDYgKzQ4OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTgg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3
OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtl
ZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJF
ODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJF
MjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyAr
NDk0NywyMSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5
SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcx
MkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIx
NTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUw
RUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
MjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8q
IFNvdXJjZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1
MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJF
RjI5M0UwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNDgwNSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5z
cGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRG
MkUxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZF
RDk0RjMwMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZh
bEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09w
dGltaXphYmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5k
ZXhpbmdGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0
dXJuIGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOwor
ICAgIHJldHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7
CiB9CiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1v
ZGVGb3JJbmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8o
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5
cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2Fz
ZSBUeXBlSW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVk
QXJyYXlJbnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2
QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAg
ICAgICAgIHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Ogor
ICAgIGNhc2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBj
YXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgog
ICAgICAgICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5
VWludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFy
cmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAg
ICAgICAgIHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMy
OgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7
Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAg
ICAgICByZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNI
KCk7CkBAIC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2Rl
Rm9yQ2xhc3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlw
ZUZvckpJVEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAg
IGNhc2UgSklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNl
IEpJVEludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRV
aW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhD
bGFtcGVkQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2Ug
SklUVWludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklU
VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxv
YXQzMkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9h
dDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBDUkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisK
IGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFz
c0luZm8oCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8o
KSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYgKGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0gICAgICAgIHN3
aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OwotICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50MTZBcnJh
eTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3Bl
Y0ludDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAg
cmV0dXJuIFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1w
ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5OwotICAgICAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3Bl
Y1VpbnQzMkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAg
ICAgcmV0dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0
NjQ6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChjbGFzc0luZm8t
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJl
dHVybiBTcGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4g
U3BlY0ludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBTcGVj
SW50MzJBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50
OEFycmF5OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIFNwZWNV
aW50OENsYW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBT
cGVjVWludDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gU3Bl
Y1VpbnQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBTcGVj
RmxvYXQzMkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBTcGVj
RmxvYXQ2NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAK
ICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8oKSkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJyYXlDb252ZXJz
aW9uVG9TdHJpbmcoQXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5
VHlwZShBcnJheTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBBcnJh
eTo6SW50MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgQXJyYXk6
OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAg
ICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Cisg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOwor
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OworICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9h
dDY0OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5OworICAgIH0K
K30KKwogdm9pZCBBcnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAg
ICBvdXQucHJpbnQodHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCksIGNvbnZlcnNp
b24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFyKiBhcnJheUNs
YXNzVG9TdHJpbmcoQXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJp
bmcoQXJyYXk6OlNwZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3Ry
aW5nKEFycmF5OjpDb252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlw
ZShBcnJheTo6VHlwZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAgICAgQXJyYXlN
b2RlKCkKQEAgLTM4MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHlwZSgp
ID09IEFycmF5OjpTdHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVk
QXJyYXlUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVkQXJyYXlUeXBl
KHR5cGUoKSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcnJheU1v
ZGUmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50
eXBlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY2NywzNyArMjY2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihp
bnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVv
ZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBz
aXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCks
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBh
cnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkK
KyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG5vZGUsIHR5
cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZv
ckZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
aW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURl
c2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50
OF90KSwgVW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNp
emVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihm
bG9hdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRU
eXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5
TW9kZS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAg
ICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MSwzNyAr
MjU4MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
QXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90
KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50
MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6Rmxv
YXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQor
ICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMjg3Miw0NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigp
LCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIo
KSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdw
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3Vu
ZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5
KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0
eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSht
X2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlE
ZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91
YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVk
QXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9
IH0KIAogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4MywzMiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChj
b25zdCBTaQogICAgIH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVj
dWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsK
LSAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJy
YXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwot
ICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+
aW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAg
ICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OEFy
cmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAg
ICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwot
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCkt
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogot
ICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5Ogot
ICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENvbXBpbGVyOjpK
dW1wIFNwZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0
ZW1wR1BSLCBBcnJheU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUpCiB7CiAgICAg
c3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0
ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBt
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jlc3VsdChtX2N1
cnJlbnROb2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6OmluZm8oKTsKICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
Ci0gICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0
ZW1wLmdwcigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xh
bXBEb3VibGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNz
IHNpZ25lZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQo
aXNJbnQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpKTsKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgp
KSkpOworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAg
ICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1Np
Z25lZCh0eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMjoKLSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAg
ICAgaWYgKGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzOSwx
MiArMjYwNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXpl
IDwgNCB8fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVu
dFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBB
U1NFUlQoZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJh
eSk7CisgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUp
KTsKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZv
cndhcmRTcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMy
KDApKSwgVmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZy
ZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3Vu
ZGluZyByb3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlw
ZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApA
QCAtMjY3Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFs
Rm9ySQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0g
anNWYWx1ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGlu
ZykgewotICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAo
aXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkg
PT0gMSk7CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0K
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2NjEsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwg
c2NyYXRjaFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykg
ewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAg
IGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0
ZShtX2ppdCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5h
ZG9wdChzY3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGlu
ZykgewotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAg
ICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVu
dFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2go
dGhpcyk7CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UHV0QnlWYWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7
Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAg
ICAgICAgICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZh
aWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9B
c3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVU
b1VpbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQp
OwpAQCAtMjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9ySQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZh
bCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
OwogCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUo
dHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3LDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5v
ZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7
CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25D
aGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAg
Y2FzZSA0OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJl
c3VsdFJlZyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywg
cmVzdWx0UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9
CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQ
UlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7Cisg
ICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5NywxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VO
VVNFRChiYXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFw
aCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZh
bCkKLSAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFs
KSB7CisgICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0
aCgpKSk7CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0
Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91
YmxlVG9GbG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDksNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5
IHN0b3JhZ2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwog
ICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRB
cnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5n
OjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3Jp
cHRvci0+bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5
cGVkVmlldyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9y
YWdlUmVnKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0MTI2LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9y
KG5vZGUtPmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpA
QCAtNDE5MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJy
YXlMZW5nCiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNT
RVJUKGlzVHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZz
ZXQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1
bHRHUFIpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTczLDEwICsxOTczLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERp
dihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSos
IHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYs
IEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5k
aW5nKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9p
ZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1l
bnRTaXplKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwg
VHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwor
ICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJy
YXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZv
aWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3
RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5v
ZGUqKTsKQEAgLTIxMTgsOCArMjExOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90
aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2Rl
KTsKLSAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlN
b2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5
cGUpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlN
b2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lk
IGNoZWNrQXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29w
eVRva2VuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRv
a2VuLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlUb2tlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRl
cmZseUNvcHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hl
YXA7CiB9OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShEZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhl
YXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAu
aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFX
aGlsZSgpCisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5j
b21pbmdSZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
Q2VsbDsKKworLy8gQSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0
aW9uYWwgcmVmZXJlbmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJv
bSB0aGUgaGVhcCwgd2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qg
a25vd3MgaXRzIGluY29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZl
IHRoZSBpbnZhcmlhbnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8g
dGhlIEdDCisvLyBoZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWlu
Z1JlZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgor
ICAgIEdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsK
KyAgICAgICAgaWYgKGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0
b3JPZkNlbGxzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVm
ZXJlbmNlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsK
KyAgICB9CisgICAgCisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAg
ICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAg
ICAgICAgICAgIHJldHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmVjdG9yT2ZDZWxscygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2Vu
ZXJhbGx5IG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRo
aXMKKyAgICAvLyByZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmpl
Y3QgdG8gdGhlIEdDJ3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
OjphZGRSZWZlcmVuY2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2Uo
SlNDZWxsKik7CisgICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlm
IHdlIHdpc2ggdG8ga2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxz
ZSBpZiB3ZSBkb24ndC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlm
IGl0IGRvZXMgc28sIHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2Fu
dAorICAgIC8vIHRvIHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0
dXJuIGZhbHNlIHVubGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlz
dC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBm
aWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2
YXRlOgorICAgIHN0YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0K
KyAgICAKKyAgICBib29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5j
b2RlZFBvaW50ZXIgJiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWlu
ZygpIGNvbnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2lu
Z2xldG9uKCkgY29uc3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZD
ZWxscygpOyB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxKU0NlbGwqPihtX2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxWZWN0b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAg
CisgICAgLy8gU2luZ2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAv
LyBTaW5nbGV0b24gZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBv
ZiBjZWxscy4KKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2lu
Y2x1ZGUgIkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0Nl
bGwqIGNlbGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5j
b2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZs
YWcoKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJU
KGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IEFTU0VSVChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAo
Y2VsbCkpOworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8
SlNDZWxsKj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9y
LT5hcHBlbmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAg
ICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7
CisgICAgICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVu
YW1lIEZpbHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZp
bHRlckluY29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9u
KQoreworICAgIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJlbmNlcy5cbiIp
OworICAgIAorICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIXRo
aXMtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3VudCgpKTsKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFzIG5vIGluY29t
aW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJU
KHRoaXMtPmlzRGVmZXJyZWQoKSk7CisgICAgCisgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7Cisg
ICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbihzaW5nbGV0b24oKSkpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFNpbmdsZXRvbiBwYXNzZWQu
XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmluZyBzaW5n
bGV0b24uXG4iKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VS
VCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2Up
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIiAgIEhhcyAiLCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSwgIiBlbnRy
aWVzLlxuIik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCkt
PmF0KGkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCkt
PmF0KGktLSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxs
cygpLT5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCkt
PnNpemUoKSA+PSAyKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgU3RpbGwgaGFzICIsIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpLCAiIGVudHJpZXMuXG4i
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVjdG9yT2ZD
ZWxscygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCIgICBSZW1vdmluZy5cbiIpOworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygp
OworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJ
bmNvbWluZygpKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZygiICAgU2hyaW5raW5nIHRvIHNpbmdsZXRvbi5cbiIpOworICAgIEpTQ2VsbCogc2luZ2xl
dG9uID0gdmVjdG9yT2ZDZWxscygpLT5hdCgwKTsKKyAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygp
OworICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzaW5nbGV0
b24pIHwgc2luZ2xldG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisjZGVm
aW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZD
b3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUID0gc29tZSBzdWJ0eXBlIG9mIEdD
SW5jb21pbmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQgYSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMo
KQorLy8gbWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAg
IH5HQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgbmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhpcyBzZXQuCisgICAgYm9vbCBhZGRSZWZl
cmVuY2UoSlNDZWxsKiwgVCopOworICAgIAorICAgIHZvaWQgc3dlZXAoKTsKKyAgICAKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCByZW1v
dmVEZWFkKEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7CisgICAgc2l6
ZV90IG1fYnl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRl
ZFNldElubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
c19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZN
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0
ZXMoMCkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0PFQ+Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSBtX3ZlY3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNv
bWluZ1JlZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jv
b2wgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGws
IFQqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2Vs
bCkpIHsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgQVNT
RVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRl
cyArPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgIEFTU0VSVChvYmplY3Qt
PmlzRGVmZXJyZWQoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVy
ZW5jZXMoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2
b2lkIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3Qg
PSBtX3ZlY3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGlt
YXRlSW5CeXRlcygpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVkKCkpOworICAg
ICAgICBBU1NFUlQob2JqZWN0LT5udW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpKTsKKyAgICAg
ICAgaWYgKCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2J5dGVzIC09IHNpemU7CisgICAgICAgIG1f
dmVjdG9yW2ktLV0gPSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZUxh
c3QoKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
PFQ+OjpyZW1vdmVEZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gSGVhcDo6aXNNYXJr
ZWQoY2VsbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvcHlWaXNp
dG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiR0NBY3Rp
dml0eUNhbGxiYWNrLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3Rp
Y3MuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTM1OCw2ICszNTksMTQg
QEAgdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1fZGZnQ29k
ZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1fYXJyYXlC
dWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxlY3RJZk5l
Y2Vzc2FyeU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1NpemVFc3Rp
bWF0ZUluQnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmpl
Y3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3Vu
dFNldDo6aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02MjEsMTQg
KzYzMCwxOSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVj
dFNwYWNlLm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUoKQorewor
ICAgIHJldHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7Cit9
CisKIHNpemVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXpl
KCkgKyBtX3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7CisgICAgcmV0
dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFT
aXplKCk7CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgcmV0
dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkg
KyBleHRyYVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENv
dW50KCkKQEAgLTc0NSw2ICs3NTksMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xl
IHN3ZWVwVG9nZwogICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOworICAg
IAorICAgIHsKKyAgICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7CisgICAgICAg
IG1fYXJyYXlCdWZmZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBtX2Jsb2Nr
U25hcHNob3QucmVzaXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgpKTsKQEAg
LTkyNCwxMiArOTQzLDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiAg
ICAgbV9kZWZlcnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aEFuZEdDSWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAgCiAgICAg
bV9kZWZlcnJhbERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJy
YWxEZXB0aEFuZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsK
ICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNpZm5kZWYg
SGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNs
dWRlICJCbG9ja0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiREZHQ29kZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0Lmgi
CiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0Lmgi
CiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJh
IG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6
ZV90IG9iamVjdENvdW50KCk7CkBAIC0xNzksMTEgKzE4MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgICAgIAogICAg
ICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4g
bV9qaXRTdHViUm91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkUmVmZXJlbmNl
KEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQg
Y2xhc3MgQ29kZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDOworICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0Zv
ckFXaGlsZTsKICAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZVNldDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0
dWJSb3V0aW5lOwpAQCAtMjMwLDYgKzIzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBC
bG9ja0FsbG9jYXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQg
aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRl
ZCgpOwogCiAgICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CkBAIC0yNDUsNiArMjUy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yIG1fYmxvY2tBbGxv
Y2F0b3I7CiAgICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAgICAgIENvcGll
ZFNwYWNlIG1fc3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldDxB
cnJheUJ1ZmZlcj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5
VXNhZ2U7CiAKICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTU0
MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1Y3RvclRhYmxl
OyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheVByb3Rv
dHlwZVRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90
b3R5cGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgp
LmJvb2xlYW5Qcm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
KiBkYXRhVmlld1RhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUt
PnZtKCkuZGF0YVZpZXdUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBk
YXRlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5k
YXRlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVj
dG9yVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5k
YXRlQ29uc3RydWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBl
cnJvclByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJh
bWUtPnZtKCkuZXJyb3JQcm90b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEp1bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVk
U2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9y
YWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAg
ICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVs
ZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRG
bG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3Qg
ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gUHJvcGVydHkg
aXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5
cGUuCiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJv
cGVydHkgaXMgaW50LWNoZWNrZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KICAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRB
cnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OwotICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRp
bmcpOwotICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFy
cmF5VHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAg
ICAgICAgCiAgICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25O
b3RGaW5hbCB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUg
KzE1NDksMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAg
IGNhc2UgSklUQXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9y
YWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5
RGVzY3JpcHRvcigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRJbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJh
eUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURl
c2NyaXB0b3IoKSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklUVWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENs
YW1wZWRBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0t
PnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX3ZtLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlw
ZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2
NEFycmF5RGVzY3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAg
ICAgICAgQ1JBU0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlU
eXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkK
KyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVt
cCBkb25lID0ganVtcCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlw
ZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
SW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9y
KCksIDIsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQz
MkFycmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSwgbV92bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5
LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVz
Y3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNh
dGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0g
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWdu
ZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJh
eURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFy
cmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCks
IDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUo
YXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZs
b2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywxMCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfdmFsX2dlbmVyaWMpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBU
eXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAg
CiAgICAgLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMgdG8gdXNlIHRo
ZSBjbGFzc0luZm8uIFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNsb2JiZXJpbmcg
dGhlIHJlZ2lzdGVyIHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2UsIGFuZCBwcm9w
ZXJ0eS4KIApAQCAtMTY4OSwxOSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0g
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwg
YmFzZSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihj
bGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAx
OgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBp
ZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNlSW5kZXgoYmFz
ZSwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1
bHRQYXlsb2FkKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2ln
bmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkp
CiAgICAgICAgICAgICBsb2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1l
c1R3byksIHJlc3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwpAQCAt
MTcxNCw3ICsxNjcxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0
QgogICAgIH0KICAgICAKICAgICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRTaXplID09IDQg
JiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAodHlwZSA9PSBU
eXBlVWludDMyKSB7CiAgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIAogICAg
ICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKQEAgLTE3
NDAsOCArMTY5NywxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRC
CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9h
dFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNp
emUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsK
KyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVn
VDE7CkBAIC0xNzU4LDExICsxNzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5R2UKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9j
bGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNl
KTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNz
SW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50
U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAg
ICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZw
UmVnVDApOwogICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsK
QEAgLTE3ODksOCArMTc0OCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRB
cnJheUdlCiAgICAgcmV0dXJuIHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVtcExpc3QgSklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25l
ZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNT
RVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTgwOCw4ICsx
NzY5LDggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8p
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3Ry
dWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlw
ZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSkpKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3b3VsZCBi
ZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRo
ZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxh
dGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYgKHJvdW5kaW5n
ID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwot
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5
cGVkQXJyYXkpOworICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVs
ZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVkKHR5cGUpKTsK
ICAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMy
KEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAg
IHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyArMTc5Nyw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAgICAgaW5Cb3Vu
ZHMubGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewor
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIHN0
b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVz
T25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQog
Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVk
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCkBAIC0xODcyLDggKzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0
VHlwZWRBcnJheVB1CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsK
LSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5
U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zm
c2V0KSkpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MoZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZElt
bVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4OTgsOSAr
MTg2MSw5IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAK
ICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92
YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRv
IGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAg
Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlw
ZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAs
IGZwUmVnVDApOwogICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2Ny
YXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAt
MjYsMTQgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZm
ZXIuaCIKIAotI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJv
b2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVj
dG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5
QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0MSw5IEBAIGJv
b2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAg
ICBmb3IgKEFycmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0
VmlldykgewotICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxs
Vmlld3NBcmVOZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxl
ID0gIW1fcGluQ291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlm
IChpc05ldXRlcmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAg
ICBlbHNlIHsKICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs1
MSwxMyBAQCBib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0g
ICAgICAgIEFycmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICBy
ZW1vdmVWaWV3KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8
IGN1cnJlbnQtPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7
Ci0gICAgICAgIG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90
IGkgPSBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJy
YXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGlu
Y29taW5nUmVmZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZp
ZXctPm5ldXRlcigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1
ZmZlcjo6YWRkVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZm
ZXIgPSB0aGlzOwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZp
ZXcgPSBtX2ZpcnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RW
aWV3LT5tX3ByZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZv
aWQgQXJyYXlCdWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAg
IEFTU0VSVCh0aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0Vmll
dykKLSAgICAgICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZp
ZXc7Ci0gICAgaWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXct
Pm1fbmV4dFZpZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2
aWV3KQotICAgICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+
bV9wcmV2VmlldyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlND
CiAKLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIu
aAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lmbmRlZiBBcnJh
eUJ1ZmZlcl9oCiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVm
ZmVyVmlldzsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVu
dHMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAt
NDUsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVy
Q29udGVudHMoKTsKLQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0K
ICAgICB1bnNpZ25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApA
QCAtODYsMTIgKzg4LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsK
IH07CiAKLWNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+
IHsKK2NsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5
QnVmZmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBjcmVhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSk7CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJy
YXlCdWZmZXIqKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNy
ZWF0ZShjb25zdCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVu
dHMmKTsKKyAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFk
b3B0ZWQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBP
bmx5IGZvciB1c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAg
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAt
OTksMTQgKzEwMiwxNiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBp
bmxpbmUgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRl
TGVuZ3RoKCkgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVFc3RpbWF0ZUlu
Qnl0ZXMoKSBjb25zdDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGlj
ZShpbnQgYmVnaW4sIGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBzbGljZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGluZSB2b2lkIHBp
bigpOworICAgIGlubGluZSB2b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlC
dWZmZXJWaWV3Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYs
IFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAg
ICAgYm9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CiAKICAg
ICB+QXJyYXlCdWZmZXIoKSB7IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0ZToKICAgICBp
bmxpbmUgdW5zaWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRpYyBp
bmxpbmUgaW50IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisgICAg
dW5zaWduZWQgbV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7
Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdlYWs8
SlNBcnJheUJ1ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFtcFZh
bHVlKGludCB4LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NywxMiBAQCBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBcnJheUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBi
eXRlTGVuZ3RoKQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2Fz
dDx2b2lkKj4oZGF0YSksIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoY29udGVudHMp
OworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQog
ewogICAgIHJldHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6RG9udEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3IEBAIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlCdWZmZXI6OkFy
cmF5QnVmZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZp
ZXcoMCkKKyAgICA6IG1fcGluQ291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFuc2ZlcihtX2Nv
bnRlbnRzKTsKIH0KQEAgLTE5NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5
dGVMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9
CiAKK3NpemVfdCBBcnJheUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2l6ZW9mKEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNpemVfdD4oYnl0
ZUxlbmd0aCgpKTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNs
aWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xpY2VJbXBsKGNs
YW1wSW5kZXgoYmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsyMzcsMjMgQEAg
dW5zaWduZWQgQXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJldHVybiBjbGFt
cFZhbHVlKGluZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJheUJ1ZmZlcjo6
cGluKCkKK3sKKyAgICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OnVucGlu
KCkKK3sKKyAgICBtX3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6
dHJ5QWxsb2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6
ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5LCBBcnJh
eUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93IDMyLWJpdCBv
dmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5vdD8gVGhlIHRy
eUZhc3RDYWxsb2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50cywKLSAgICAv
LyBhbmQgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5IHNob3VsZCB3
ZSBpbmNsdWRlIGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3RyaWN0aXZlIGNo
ZWNrIGhlcmU/CisgICAgLy8gRG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90
YWwgc2l6ZS4KICAgICBpZiAobnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxT
aXplID0gbnVtRWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNp
emUgLyBudW1FbGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAgaWYgKHRvdGFs
U2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAgICAgfHwgdG90
YWxTaXplID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1heCgpKSkgewogICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp+QXJyYXlCdWZmZXJDb250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogdXNpbmcgSlND
OjpBcnJheUJ1ZmZlcjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsKIAogI2VuZGlm
IC8vIEFycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwyOCArMzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVmZmVyVmll
dzo6QXJyYXlCdWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAgICwgbV9p
c05ldXRlcmFibGUodHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fcHJldlZp
ZXcoMCkKLSAgICAsIG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJW
aWV3KAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBi
eXRlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAs
IG1faXNOZXV0ZXJhYmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAg
IG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXIt
PmRhdGEoKSkgKyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAg
ICBtX2J1ZmZlci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlC
dWZmZXJWaWV3KCkKIHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1v
dmVWaWV3KHRoaXMpOworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAgIG1fYnVmZmVy
LT51bnBpbigpOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3ZvaWQgQXJy
YXlCdWZmZXJWaWV3OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1ZmZlciA9
IDA7Ci0gICAgbV9ieXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1dGVyYWJs
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxhZzsKKyAg
ICAKKyAgICBpZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZs
YWcpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAgICAgbV9idWZm
ZXItPnBpbigpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAog
CiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBF
eGVjU3RhdGU7CisKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFy
cmF5QnVmZmVyVmlldz4gewogcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBU
eXBlSW50OCwKLSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAot
ICAgICAgICBUeXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQz
MiwKLSAgICAgICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5
cGVGbG9hdDY0LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmll
d1R5cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdl
dFR5cGUoKSBjb25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAg
IH0KKyAgICAKICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAg
IHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICByZXR1cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9
CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2
b2lkIHNldE5ldXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAg
IGJvb2wgaXNOZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAog
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJv
dGVjdGVkOgotICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wg
c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlu
bGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1Jhbmdl
SW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBp
bnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBs
ZW5ndGgpOwotCiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdl
IG9mIGFuIEFycmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxl
bWVudHMpCisgICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAg
ICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRl
T2Zmc2V0ICUgc2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBpZiAoYnl0ZU9m
ZnNldCA+IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVu
c2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9m
ZnNldCkgLyBzaXplb2YoVCk7CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0g
KGJ5dGVMZW5ndGggLSBieXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKG51bUVs
ZW1lbnRzID4gcmVtYWluaW5nRWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZm
ZXJWaWV3KiB3cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIAorcHJv
dGVjdGVkOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wg
c2V0SW1wbChBcnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlu
bGluZSBib29sIHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVM
ZW5ndGgsIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1Jhbmdl
SW1wbCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAg
IHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisgICAgICAgIGlu
dCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1bnNpZ25lZCog
b2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBu
dW1iZXIgb2YgZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQg
b2Zmc2V0IGlzIGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidz
IHZpZXcuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBP
ZmZzZXRBbmROdW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGFycmF5Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1l
bnRzKQorICAgIHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoCisgICAgICAg
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYXJyYXlC
eXRlT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAq
bnVtRWxlbWVudHMpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9N
QVggLSBhcnJheUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+
IG1heE9mZnNldCkgewpAQCAtMTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51
bUVsZW1lbnRzID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAg
ICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQog
ICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwg
cGx1cyB0aGUgYnl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIApAQCAtMTMw
LDggKzE0MSw2IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5
QnVmZmVyOwogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZm
ZXJWaWV3KiBtX3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07
CiAKIGJvb2wgQXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXks
IHVuc2lnbmVkIGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBBcnJheUJ1ZmZl
clZpZXc6Onplcm9SYW5nZUltcGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFy
cmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVu
ZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3Ro
KQordm9pZCBBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCgKKyAgICBp
bnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwg
dW5zaWduZWQqIGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCAr
PSBhcnJheVNpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0lu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0lu
Zm8uaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVj
dCBIYXNoVGFibGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBz
dHJ1Y3QgTWV0aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5j
dGlvblB0ciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lk
ICgqU2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93
RG93bkFuZFdhc3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlw
ZWRlZiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNB
cnJheUJ1ZmZlclZpZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1w
bDsKIH07CiAKICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5
LDYgKzE0Niw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1
dERpcmVjdFZpcnR1YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHks
IFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAg
ICAgICZDbGFzc05hbWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0VHlwZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVk
QXJyYXlTdG9yYWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCiAj
ZGVmaW5lIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBc
CiAgICAgbWFjcm8oQXJyYXkpIFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAorICAgIG1hY3Jv
KEJZVEVTX1BFUl9FTEVNRU5UKSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAgIG1hY3JvKERh
dGUpIFwKICAgICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAgIG1hY3JvKGFw
cGx5KSBcCiAgICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkgXAorICAgIG1h
Y3JvKGJ1ZmZlcikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNybyhieXRlT2Zm
c2V0KSBcCiAgICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29kZUluZGV4KSBc
CiAgICAgbWFjcm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAgICAgbWFjcm8o
cHJvcGVydHlJc0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKICAgICBtYWNy
byhzZXQpIFwKKyAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1h
Y3JvKHNvdXJjZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3JvKHN1YmFycmF5
KSBcCiAgICAgbWFjcm8odGVzdCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwpIFwKICAgICBt
YWNybyh0b0ZpeGVkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRh
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZp
ZXcuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
RGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmll
dyhidWZmZXIsIGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sK
K30KKworUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5
dGVPZmZzZXQsIGJ5dGVMZW5ndGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcqIERhdGFWaWV3
Ojp3cmFwKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICByZXR1cm4gSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBnbG9iYWxPYmpl
Y3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCksIGJ5dGVPZmZz
ZXQoKSwKKyAgICAgICAgYnl0ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBE
YXRhVmlld19oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYv
RmxpcEJ5dGVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0
ZWQ6CisgICAgRGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
CisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJh
eVR5cGUgZ2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3
OworICAgIH0KKworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQgZ2V0KHVuc2lnbmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9
IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0
ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAqc3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxl
bmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAg
ICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VB
ZGRyZXNzKSArIG9mZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNl
dCwgVCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgewor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQp
ID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzdGF0dXMg
PSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkpOworICAgICAg
ICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJl
c3MpICsgb2Zmc2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbih2YWx1
ZSwgbGl0dGxlRW5kaWFuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9ieXRl
TGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRhVmlld19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5o
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9h
dDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxvYXQzMkFycmF5
X2gKICNkZWZpbmUgRmxvYXQzMkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgi
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEZsb2F0MzJBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewotcHVibGljOgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNy
ZWF0ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBi
ZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRv
IEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0gICAgdm9pZCBz
ZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRl
eCA+PSBUeXBlZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0
MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxGbG9hdDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFR5cGVGbG9hdDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQzMkFycmF5
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgot
ICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1QYXNzUmVmUHRy
PEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0
ZShjb25zdCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9h
dDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxG
bG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQz
MkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxv
YXQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9h
dDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc3ViYXJyYXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQz
MkFycmF5OwogCiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
LDk4ICsxMCwyNSBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZpbmUgRmxvYXQ2
NEFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1
YmxpYyBUeXBlZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91Ymxl
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2Vk
IHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAg
ICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRo
b3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRB
cnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcg
VHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5k
ZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5
QmFzZTxkb3VibGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
dmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJy
YXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZp
ZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IAotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZy
aWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9h
dDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNv
bnN0IGRvdWJsZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0
NjRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZs
b2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxGbG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2
NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZs
b2F0NjRBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxv
YXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0
NjRBcnJheTsKIAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3X2gKKyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25zdCB0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlhbGl6
ZWQodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+
KGJhc2VBZGRyZXNzKCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGggKiBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5nZSh1
bnNpZ25lZCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gemVy
b1JhbmdlSW1wbChvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksIGxlbmd0
aCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgemVyb0ZpbGwoKSB7IHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAg
IAorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAg
fQorCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXgg
PCB0aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhdOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0
aGlzLT5sZW5ndGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2
ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgK
KyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNo
ZWNrIG92ZXJmbG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAg
ICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5
KGludCBzdGFydCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBU
eXBlZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFw
dG9yOjp0eXBlVmFsdWU7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyog
d3JhcChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5l
cmljVHlwZWRBcnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZp
ZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRl
T2Zmc2V0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxl
bmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3Jl
YXRlKAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3Jl
YXRlKGxlbmd0aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICog
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgK
KyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGU+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJheVZpZXcoYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1
ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+
CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxh
dGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZzZXQsICZs
ZW5ndGgpOworICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlwZT4oYnVm
ZmVyKCksIGJ5dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorSlNBcnJheUJ1ZmZlclZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
d3JhcCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIEFkYXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVW
YWx1ZSksIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVy
OwogY2xhc3MgQnV0dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3Mg
U3RydWN0dXJlOwpAQCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGlj
TGVuZ3RoKCkgeyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0
UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9
IGF1eFdvcmQ7IH0KICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVy
biB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1
ZmZlciogYnVmZmVyKSB7IHUudHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAg
ICBzdGF0aWMgSW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAg
ewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRl
cmZseSkgLSAxOwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWlu
dDMyX3QgcHVibGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMg
b24gdGhlIGFycmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBi
ZWluZyB0aGUgcHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAg
ICAgICB1aW50MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQg
cHJvcGVydHkgc3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMg
b24gdGhpcywgYW5kIHRoZSB0eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAg
fSB0eXBlZEFycmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2LDkgQEAKICNp
Zm5kZWYgSW50OEFycmF5X2gKICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVn
cmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVm
ZmVyOwotCi1jbGFzcyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQ4X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5
PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
SW50OEFycmF5PiBjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0K
LSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBh
cnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMg
ZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAg
IHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5l
IFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlu
bGluZSBQYXNzUmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gVHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJj
bGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBh
c3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25z
dCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5Pihs
ZW5ndGgpOwotfQotCi1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkK
LXsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQot
Ci1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0
LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgogCiB1c2luZyBKU0M6OkludDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKQEAgLTI2LDc3ICsyNiw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAogI2RlZmluZSBJ
bnQxNkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDog
cHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0
IGludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBi
ZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4g
RG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlw
dCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZB
cnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBl
SW50MTY7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJp
ZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQx
NkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2
X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQx
NkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJh
eT4obGVuZ3RoKTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAg
ICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2
QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJU
eXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQx
NkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJy
YXkuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJbnQzMkFycmF5
X2gKICNkZWZpbmUgSW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlz
IGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJl
dHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5n
IGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFz
ZTxpbnQ+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7
Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgaW5saW5lIEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2
aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGlu
dD47Ci19OwotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJ
bnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJy
YXk6OmNyZWF0ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFy
cmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJB
cnJheT4gSW50MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50
MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJh
cnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5n
dGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50
MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2VuZGlmIC8vIElu
dDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAm
QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsK
KworSlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7
Cit9CisKK0pTQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZm
ZXIpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7Cisg
ICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNBcnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0s
IHN0cnVjdHVyZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0
cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIq
PihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlz
T2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5
dGVMZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlcjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90
LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJh
eSBidWZmZXIgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwor
fQorCitib29sIEpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2Jq
ZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAi
QXR0ZW1wdGluZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsK
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNB
cnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4o
b2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwor
ICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBl
eGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlC
dWZmZXJfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZl
ciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAg
IAorICAgIEFycmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAg
CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKiBt
X2ltcGw7Cit9OworCitpbmxpbmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4odmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXJy
b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9
IHsKKyAgICAiRnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUp
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIpOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUs
IHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVt
YmVyKDEpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZt
LmhlYXApKQorICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganND
YXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAg
ICB1bnNpZ25lZCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAg
ICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBbHRob3VnaCB0
aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRv
IHNheQorICAgICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBz
YW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdpdGggYSB6ZXJv
IGxlbmd0aC4KKyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBK
U0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4
ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1
cmUoKSwgYnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1
Y3REYXRhKAorICAgIEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7Cisg
ICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsK
KyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQor
eworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOwor
ICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAg
REVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25z
dHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5QWRhcHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhl
Yy0+Y2FsbGVlKCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0
aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIuIikp
OworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVxdWlyZXMg
YXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
CisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7
CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmpl
Y3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
bmV3QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKKyAgICBp
ZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3Ry
dWN0dXJlKCk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJvdG90eXBl
IiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVy
UHJvdG90eXBlKQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclBy
b3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNl
LCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisKK0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihl
eGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVy
ZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKyNk
ZWZpbmUgSlNBcnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSog
Y3JlYXRlKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisg
ICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJWaWV3
OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVs
ZW1lbnRTaXplLAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9zdHJ1Y3R1
cmUoMCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDApCit7Cisg
ICAgaWYgKGxlbmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0Mg
YWxsb2NhdGlvbi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBz
aXplT2YobGVuZ3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxv
Y2F0ZVN0b3JhZ2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7Cisg
ICAgICAgIG1fbW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgaWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBh
c1dvcmRzID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAg
ICAgICAgICBhc1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3Qg
YWxsb3cgYSB0eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBpZiAobGVuZ3Ro
ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAo
IXRyeUZhc3RDYWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhsZW5ndGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAg
bV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5
OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0
aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgLCBtX3ZlY3Rv
cihzdGF0aWNfY2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0
KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJh
eSkKK3sKKyAgICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hl
YWRlci5zZXRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkg
PSBCdXR0ZXJmbHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDAp
OworfQorCitKU0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25z
dHJ1Y3Rpb25Db250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1
cmUoKSwgY29udGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9y
KCkpCisgICAgLCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRl
eHQubW9kZSgpKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3aXRjaCAo
bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0
aGlzLCBmaW5hbGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRB
cnJheToKKyAgICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5KCktPmlu
ZGV4aW5nSGVhZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZl
clZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVy
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlw
ZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJh
eUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBk
ZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZl
cikgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBleGVj
LT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhl
YywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSwKKyAg
ICAgICAgICAgIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhl
Yywgc2xvdC5pc1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5
IHR5cGVkIGFycmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
KTsKK30KKworYm9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5
QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywg
c2hvdWxkVGhyb3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkg
cHJvcGVydHkuIik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwor
fQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygp
LmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9
CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFz
dCBpbiBGaXJlZm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMp
IHsKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsK
KyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAg
ICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAg
ICAKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgYXJyYXksIG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBX
YXN0ZWZ1bFR5cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZl
clZpZXdfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IFRoaXMgY2xhc3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0
aG9zZSBwYXJ0cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAor
Ly8gICAgb24gdGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRo
ZSBET00vV2ViQ29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8v
ICAgIEMrKyBjb2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2Yg
YW4gYXJyYXkgYnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlw
ZSBvZiB0aGUgdmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVu
dC4gKDEpIGlzIGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGlu
ayB0aW1lcyBieSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAor
Ly8gYmUgc3ViamVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3Qq
IGEgbWF0dGVyIG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBp
cyBhIG1hdHRlciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdl
YkNvcmUgcmlnaHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMg
dXMgZnJvbSB0b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90
IGluc3RhbnRpYWJsZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9k
ZXMgZGVwZW5kaW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2Vy
IGhhcyBkb25lIGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBi
dWZmZXIgb3IgdGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0g
VHlwZWRBcnJheU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlz
IHVudXNlZCwgViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVk
IHNwYWNlLCBhbmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBk
ZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVk
QXJyYXksCisgICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVt
cHRzIG5vdCB0byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXpl
ZCB0byBwb2ludCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9p
bnRlciwgViBwb2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwK
KyAgICAvLyBhbmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVy
bWluZWQgZW50aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZp
ZXcgd2lsbCBhZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFy
cmF5LAorICAgIAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNy
YXp5IHdheS4gQidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFp
biBhIHJlZmVyZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0
aXZlIHR5cGVkIGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRz
IHRvIGEKKyAgICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQg
TSA9IFdhc3RlZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhl
IHZlY3Rvci4KKyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUg
dXNlcyBhIEpTQXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRo
ZSBuYXRpdmUKKy8vIEFycmF5QnVmZmVyIGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBz
bG93aW5nIGRvd24gYW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRo
aW5ncyB2aWEgdGhlIEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcK
Ky8vIGl0IGlzIGFsd2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxl
LCBzbyB0aGlzIGNsYXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVk
IHRvIGV2ZW4gZXhpc3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8g
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpT
QXJyYXlCdWZmZXJWaWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBmYXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNp
emVPZih1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkg
LSAxKQorICAgICAgICAgICAgJiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAg
IHB1YmxpYzoKKyAgICAgICAgZW51bSBJbml0aWFsaXphdGlvbk1vZGUgeyBaZXJvRmlsbCwgRG9u
dEluaXRpYWxpemUgfTsKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0
cnVjdGlvbkNvbnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90
IGVsZW1lbnRTaXplLCBJbml0aWFsaXphdGlvbk1vZGUgPSBaZXJvRmlsbCk7CisgICAgICAgIAor
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgICAgICAg
ICAgVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAgICAgICAgICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsgfQorICAgICAg
ICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZTsgfQorICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvcjsg
fQorICAgICAgICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQor
ICAgICAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9Cisg
ICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVy
ZTsKKyAgICAgICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOwor
ICAgICAgICBUeXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0
ZXJmbHk7CisgICAgfTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVy
VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0
YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0
ZXMgdGhlIGZ1bGwtb24gbmF0aXZlIGJ1ZmZlci4gQWxzbyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRo
ZSBDIGhlYXAKKyAgICAvLyBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3Rl
TWVtb3J5SWZOZWNlc3NhcnkoKTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAg
ICAKKyAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVk
IGJ5dGVPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlC
dWZmZXJWaWV3LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0
aCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyB2b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1l
cyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
CisgICAgdm9pZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRB
cnJheU1vZGUgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVz
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNf
aAorI2RlZmluZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiQXJyYXlC
dWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3Rl
TWVtb3J5SWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFy
cmF5KQorICAgICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMp
OworfQorCitpbmxpbmUgQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQor
eworICAgIHNsb3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBi
dXR0ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5l
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7
CisgICAgcmV0dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQor
CitpbmxpbmUgdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBU1NFUlQo
bV9tb2RlID09IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgbV9sZW5ndGggPSAwOworICAgIG1f
dmVjdG9yID0gMDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRl
T2Zmc2V0KCkKK3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAg
ICAgICBBU1NFUlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6
ZVR5cGVkQXJyYXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcHRyZGlm
Zl90IGRlbHRhID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIK
ICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgpAQCAtMjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
IEpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2lu
Y2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlw
ZWRBcnJheURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9UeXBlVHJhaXRzLmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBDb3B5VmlzaXRvcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJWaWV3OwogY2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0dsb2JhbE9iamVj
dDsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE0OSw3ICsxNTAsNyBAQCBwdWJs
aWM6CiAgICAgU3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3Ry
dWN0dXJlLnVudmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAgICBzdGF0aWMg
Y29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZWRBcnJheU5v
bmU7CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSA9IE5vdFR5cGVkQXJyYXk7CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CkBAIC0xNjcsNiArMTY4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsK
ICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHNsb3dEb3du
QW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpT
QXJyYXlCdWZmZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0YVZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcu
aCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0
YVZpZXc6OnNfaW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmll
dyhWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBj
b250ZXh0KQoreworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7
CisgICAgaWYgKCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAg
ICAgICAgICAgZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxl
bmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRl
eHQodm0sIHN0cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBB
U1NFUlQoY29udGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0s
IGNvbnRleHQpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6
OmNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNI
QUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3
OjpzZXQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQpCit7CisgICAg
VU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNz
UmVmUHRyPERhdGFWaWV3PiBKU0RhdGFWaWV3Ojp0eXBlZEltcGwoKQoreworICAgIHJldHVybiBE
YXRhVmlldzo6Y3JlYXRlKGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksIGxlbmd0aCgpKTsKK30KKwor
Ym9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFW
aWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09i
amVjdC0+bV9sZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3Qp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmpl
Y3QtPm1fbGVuZ3RoKSwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQg
SlNEYXRhVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7
CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmll
dyogb2JqZWN0KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRh
Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQor
CitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAg
ICAgTm9uQXJyYXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTRGF0YVZpZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUg
IkRhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZWxlbWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpT
RGF0YVZpZXcoVk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAg
c3RhdGljIEpTRGF0YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJl
KiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAg
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNo
IGRvbid0IGFjdHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8g
cGxhY2F0ZSBzb21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAg
ICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldChF
eGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICAKKyAgICBQYXNzUmVmUHRyPERhdGFWaWV3PiB0eXBlZEltcGwoKTsKKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURh
dGFWaWV3OworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZv
aWQgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1
ZmZlclZpZXcqKTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAK
KyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZp
ZXdQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmll
dy5oIgorI2luY2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6
c19pbmZvID0geworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4
ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZp
ZXdQcm90b3R5cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmgKK0BiZWdpbiBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
ICBnZXRVaW50OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDMyICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRGbG9hdDY0ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAg
ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY1NldFVpbnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQxNiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDMyICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorQGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3Rv
dHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQoreworfQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0RhdGFWaWV3UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlw
ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZXR1cm4gcHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgK
KyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVj
LCBFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90
eXBlKj4ob2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBK
U0RhdGFWaWV3UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3Rh
dGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRl
OjpkYXRhVmlld1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVj
dCksCisgICAgICAgIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+
KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0
YVZpZXcgbWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVj
LT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVP
ZmZzZXQpLiIpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJv
b2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CisgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBl
eGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVj
LT5hcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVu
Z3RoKCk7CisgICAgaWYgKGVsZW1lbnRTaXplID4gYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ID4g
Ynl0ZUxlbmd0aCAtIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91
bmRzIGFjY2VzcyIpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYg
KG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZh
bHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEFkYXB0b3I6OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorRW5jb2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNE
YXRhVmlldyogZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhv
ZCBtdXN0IGJlIGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFu
ZCB2YWx1ZSkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBs
aXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFy
Z3VtZW50KDIpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgo
KTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiBieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgPiBieXRl
TGVuZ3RoIC0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMg
YWNjZXNzIikpOworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihs
aXR0bGVFbmRpYW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisg
ICAgKnJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVj
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNHZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50
MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGdldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50
MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJ
bnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBzZXREYXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWlu
dDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0
YTxVaW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVj
KTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90
b0Z1bmNTZXRGbG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxG
bG9hdDY0QWRhcHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjaW5jbHVk
ZSAiSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmlu
ZSBKU0RhdGFWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwor
Citwcm90ZWN0ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwor
CitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0
cnVjdHVyZSopOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAg
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNGbG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zs
b2F0MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U0Zsb2F0MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0Zsb2F0NjRBcnJheV9oCisjZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
X2gKKworI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDhBcnJheUNsYXNzSW5m
bygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRJbnQxNkFycmF5Q2xh
c3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDMyQXJy
YXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0VWlu
dDhBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBn
ZXRVaW50OENsYW1wZWRBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3Qg
Q2xhc3NJbmZvKiBnZXRVaW50MTZBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUg
Y29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BS
SVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRGbG9hdDMyQXJyYXlDbGFzc0luZm8oKTsKK0pTX0VY
UE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0RmxvYXQ2NEFycmF5Q2xhc3NJbmZvKCk7
CisKKy8vIEEgdHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBl
ZCBhcnJheSBvYmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToK
Ky8vCisvLyB2YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9p
bnRzIHRvIGEgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBj
b250YWluIGZpdmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20g
SlNDZWxsCisvLyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAg
RWxlbWVudFR5cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUg
TQorLy8KKy8vIFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdp
ZHRoIHdvcmRzLiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIg
aXMgdXN1YWxseSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxv
dyIgZGF0YSBmb3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUg
YmFzZSBvZiB0aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRo
ZXIgR0MtbWFuYWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdo
aWNoIG9mIHRob3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUg
YWx0aG91Z2ggZm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0
IHJlYWQgZnJvbSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1v
ZGUgb2YgdGhlIHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5k
IG9uIHRoZSB2aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlz
IHRlbXBsYXRpemVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQg
dHlwZSBhbmQgaG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5n
CisvLyBpbnRlcmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVj
dCBBZGFwdG9yIHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYg
SW50OEFycmF5IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlw
ZTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGlj
IGludDhfdCB0b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZl
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShp
bnQ4X3QpOworLy8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0Fy
cmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6
ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAg
ICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogY3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0
cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNz
UmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplT2YobV9sZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAg
ICAKKyAgICBjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSog
dHlwZWRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgbWVhbnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0
CisgICAgLy8gc3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9v
bCBjYW5HZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
IDwgbV9sZW5ndGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVk
IGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAg
ICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5z
aWduZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICBy
ZXR1cm4gdHlwZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4
UXVpY2tseUFzRG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRv
cjo6dG9Eb3VibGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAg
IAorICAgIEpTVmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAg
ICByZXR1cm4gQWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUo
aSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUo
dW5zaWduZWQgaSwgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQg
aSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVW
YWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1l
IEFkYXB0b3I6OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VR
dWlja2x5KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG9mZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3Ro
IDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAg
JiYgb2Zmc2V0ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBj
YW5TZXRRdWlja2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cg
dGhlCisgICAgLy8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVSYW5n
ZShFeGVjU3RhdGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQg
d2lsbCB0aHJvdyBvbiBlcnJvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Cisg
ICAgYm9vbCBzZXRXaXRoU3BlY2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisg
ICAgLy8gdGhlbiBpdCB3aWxsIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNl
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0eXBl
ZEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUo
YnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJheSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5ldmVyIGFjY2Vz
c2VkIGRpcmVjdGx5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24gc29tZSBjb21w
aWxlcnMuCisgICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyogaW5mbygpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgICAgICAgICAgcmV0dXJuIGdldEludDhBcnJheUNsYXNzSW5mbygpOworICAgICAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnQxNkFycmF5Q2xhc3NJ
bmZvKCk7CisgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldElu
dDMyQXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0VWludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50
OENsYW1wZWQ6CisgICAgICAgICAgICByZXR1cm4gZ2V0VWludDhDbGFtcGVkQXJyYXlDbGFzc0lu
Zm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldFVp
bnQxNkFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0MzJBcnJheUNsYXNzSW5mbygpOwor
ICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0NjRB
cnJheUNsYXNzSW5mbygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3Rv
cmFnZVR5cGUgPSBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZnJp
ZW5kIHN0cnVjdCBUeXBlZEFycmF5Q2xhc3NJbmZvczsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3Zl
cnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworCisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
OworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMg
dm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsK
KworICAgIC8vIEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBk
YXRhIGludG8gdGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMg
bmV2ZXIgYWxsb2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3du
QW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgoraW5saW5lIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IHRvTmF0aXZlVHlwZWRWaWV3KEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSogd3JhcHBlciA9IGpzRHluYW1p
Y0Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSo+KHZhbHVlKTsKKyAgICBpZiAoIXdy
YXBwZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rp
b24geworcHVibGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90
ZWN0ZWQ6CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJv
dG90eXBlKTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0
cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVy
cm9yLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtLCBuYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5CWVRFU19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVtZW50U2l6
ZSksIERvbnRFbnVtIHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3
Q2xhc3M+KgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+Ojpj
cmVhdGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVj
dHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitT
dHJ1Y3R1cmUqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6
Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAor
ICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9CisgICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2Jh
bE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpU
eXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3Vu
dCgpKSB7CisgICAgICAgIGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBU
eXBlRGF0YVZpZXcpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qg
b25lIGFyZ3VtZW50LiIpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBk
b2N1bWVudGF0aW9uIGRvZXNuJ3Qgc2F5IHNvLCBpdCdzIGNvcnJlY3QgdG8gc2F5CisgICAgICAg
IC8vICJuZXcgSW50OEFycmF5KCkiLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4g
YXJyYXkgb2YgemVybworICAgICAgICAvLyBsZW5ndGguCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKSk7CisgICAgfQor
ICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNB
cnJheUJ1ZmZlcio+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICBSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVu
dCgxKS50b1VJbnQzMihleGVjKSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPiAyKSB7CisgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJ
bnQzMihleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNl
dCkgJSBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3Ro
IG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNp
emUuIikpOworICAgICAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zm
c2V0KSAvIFZpZXdDbGFzczo6ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZl
ciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdDbGFzczo6VHlw
ZWRBcnJheVN0b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFycmF5QnVmZmVy
IGZvciB0aGUgZmlyc3QgYXJndW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBldmVyeXRoaW5n
IGJ1dCBEYXRhVmlldywgd2UgYWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9mOgorICAgIC8v
IC0gQW5vdGhlciBhcnJheS4gVGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2YgdGhhdCBhcnJh
eS4KKyAgICAvLyAtIEFuIGludGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJheSBv
ZiB0aGF0IGxlbmd0aCBhbmQgemVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAgICBpZiAoSlNP
YmplY3QqIG9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgw
KSkpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0
KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFz
cyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVy
ZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3Vs
dC0+c2V0KGV4ZWMsIG9iamVjdCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGg7CisgICAg
aWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzSW50MzIoKSkKKyAgICAgICAgbGVuZ3RoID0gZXhlYy0+
YXJndW1lbnQoMCkuYXNJbnQzMigpOworICAgIGVsc2UgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5p
c051bWJlcigpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQuIikpOworICAgIGVsc2Ug
eworICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50KDApLmFz
TnVtYmVyKCkpOworICAgICAgICBpZiAobGVuZ3RoICE9IGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVt
YmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQgKGZyYWN0aW9uYWwgbGVu
Z3RocyBub3QgYWxsb3dlZCkuIikpOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCAwKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJl
cXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2
ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+Owor
ICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorQ2FsbFR5cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3
Q2xhc3M+OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAg
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFZpZXdDbGFzcz47CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRl
ICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisg
ICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29u
dGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0
b3I6OlR5cGUpKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1
bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVj
LT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1
Y3Rpb25Db250ZXh0IGNvbnRleHQoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVu
Z3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlv
bkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2Vk
QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFy
cmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAg
ICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3Ro
IG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVz
dWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpW
aWV3VHlwZT4gaW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwt
PmJ1ZmZlcigpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJl
LCBidWZmZXIsIGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VS
VChjb250ZXh0KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAg
ICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZt
LmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NS
ZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
Ojp2YWxpZGF0ZVJhbmdlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQs
IGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5k
IGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBl
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTog
dGhlIGFjdCBvZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8v
IGluIG5ldXRlcmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhl
cmUgY2Fubm90IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBv
ZiBhIHR5cGVkIGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwg
b3IgYXJlbid0LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8g
dGhpcyBjaGVhcAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVv
cGxlIHN0YXJ0IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdv
bid0IGhhdmUgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWlu
KGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2Uo
ZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG90aGVyLT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdl
ZCB1bmV4cGVjdGVkbHkuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlj
a2x5KG9mZnNldCArIGksIG90aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8v
IFRoZSBzdXBlciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUg
c2FtZSB0eXBlLgorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nh
c3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBz
dGQ6Om1pbihsZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQs
IG90aGVyLT50eXBlZFZlY3RvcigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lm
aWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5
cGUoZXhlYywganNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsK
KyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUo
ZXhlYywganNDYXN0PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAg
ICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhl
YywganNDYXN0PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBj
YXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBl
KGV4ZWMsIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0
aCk7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogewor
ICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNh
c2UuIEJ1dCByaWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4
ZWMsIG9mZnNldCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNl
dFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhp
c09iamVjdC0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYg
KGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJ
bmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citi
b29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3Jp
cHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChp
bmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5k
ZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhp
c09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsK
KyAgICAgICAgLy8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8g
c3RvcmUgdG8gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3Qg
bW9kZS4gSSB3aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5k
ZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9w
ZXJ0eSgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJl
amVjdHMgYWxsIGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4
ZWQgcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAv
LyBvZiBib3VuZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93
LCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0
eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6
Tm90QW5JbmRleCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNl
OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVy
dHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0
LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAg
IH0KKyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0
eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJv
cGVydHlOYW1lID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNob3VsZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
KAorICAgICAgICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBw
cm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKCF0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkg
eworICAgICAgICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dp
bmcgYW55dGhpbmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVp
Y2tseShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVBy
b3BlcnR5QnlJbmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5E
RVgpIHsKKyAgICAgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KAorICAgICAgICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlm
aWVyKGV4ZWMsIFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
Pm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5j
b3B5TGF0ZXIodGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVj
dC0+bV92ZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZp
c2l0b3IucmVwb3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJh
eToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAor
ICAgIEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBl
ZEFycmF5VmVjdG9yQ29weVRva2VuCisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkodGhpc09iamVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRo
aXNPYmplY3QtPm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFs
bG9jYXRlTmV3U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShu
ZXdWZWN0b3IsIG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRo
aXNPYmplY3QtPm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHko
b2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFz
ZTo6Y29weUJhY2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3Qp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhp
cyBnYW1lIGJlY2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFj
ZXMgdGhhdAorICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZN
LCBhbmQgd2Ugb25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0
IGl0J3Mgbm90IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hh
dAorICAgIC8vIHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJy
byBleGNlcHRpb24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMg
d2hlbiB3ZSB0cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcwor
ICAgIC8vIHdpbGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3Rwcmlu
dCAoaW5jb3JyZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNp
emUgdHlwZWQgYXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAg
Ly8gYWxtb3N0IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRl
ZCBhIHRvbiBvZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0
IGNhdXNlZCBhbGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAv
LyBJbiB0aGF0IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUg
dGhlIEdDIHJlYWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGlu
ZyogdG8gdHJpZ2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8g
dGhhdCB5b3UgKmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHBy
b3ByaWF0ZWx5LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlz
T2JqZWN0LT5oYXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09i
amVjdC0+Ynl0ZVNpemUoKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZh
c3RUeXBlZEFycmF5CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXpl
ID49IHNpemVvZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBh
bGxvY2F0ZWQgbWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+
bV9idXR0ZXJmbHkgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0
aGlzT2JqZWN0LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJp
Z2h0KAorICAgICAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAg
fQorCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0
aGlzT2JqZWN0LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBi
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2Jq
ZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBP
dmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21l
dGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNv
c3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsg
dGhhdCB3ZSByZWFsbG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAg
ICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rv
ciwgdGhpc09iamVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAor
ICAgIGNhc2UgV2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0
ZXJmbHkoKS0+aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsK
KyAgICB0aGlzT2JqZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmpl
Y3QtPm1fbW9kZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2Uo
dGhpc09iamVjdCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBl
ZEltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3Jl
YXRlKAorICAgICAgICBFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwor
ICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19o
CisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNp
bmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihl
eGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxk
IGJlIGEgdHlwZWQgYXJyYXkgdmlldyIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpKTsKKyAgICAKKyAgICBK
U09iamVjdCogc291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJn
dW1lbnQoMCkpOworICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQg
YmUgYW4gb2JqZWN0IikpOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1l
bnQoMSkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fSBlbHNlCisgICAgICAgIG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0g
c291cmNlQXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCku
dG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmpl
Y3QtPnNldChleGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZp
ZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG9GdW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24q
IGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAg
IFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+
dGhpc1ZhbHVlKCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBh
IHR5cGVkIGFycmF5IHZpZXciKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsICJFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSk7CisgICAgCisgICAgaW50MzJf
dCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPj0gMikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBl
bmQgPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBo
ZXJlOyBsYXRlciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5z
aWduZWQgdGhpc0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhh
bmRsZSBuZWdhdGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwg
MCkKKyAgICAgICAgYmVnaW4gPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KHRoaXNMZW5ndGgg
KyBiZWdpbiksIDApOworICAgIGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSBzdGQ6Om1heChz
dGF0aWNfY2FzdDxpbnQ+KHRoaXNMZW5ndGggKyBlbmQpLCAwKTsKKyAgICAKKyAgICAvLyBDbGFt
cCB0aGUgaW5kaWNlcyB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVn
aW4gPj0gMCk7CisgICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJl
Z2luLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjpt
aW4oZW5kLCBzdGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8g
Q2xhbXAgZW5kIHRvIGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAg
IAorICAgIEFTU0VSVChlbmQgPj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2lu
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh0aGlzTGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkt
PnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOwor
ICAgIAorICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAg
IGV4ZWMsIHN0cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVP
ZmZzZXQoKSArIG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0
aCk7CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3
Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5zdWJhcnJheSwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8
Vmlld0NsYXNzPiwgRG9udEVudW0sIDIpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+QllURVNfUEVSX0VMRU1FTlQsIGpzTnVtYmVyKFZpZXdDbGFzczo6ZWxlbWVudFNpemUp
LCBEb250RW51bSB8IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFz
cz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZSogcHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7Cisg
ICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBwcm90b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVj
dHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRl
U3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAg
ICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpT
QWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDYWxsYmFja09iamVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJK
U0RhdGFWaWV3UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUg
IkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5o
IgogI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1
Y3RvcnMuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5cy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVn
YWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNjZXNz
b3ItPnNldFNldHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywg
MCwgU3RyaW5nKCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90
eXBlLT5wdXREaXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJz
Y29yZVByb3RvLCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1
bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRp
b24oZXhlYy0+dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1fYXJy
YXlCdWZmZXJQcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50
OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQx
NildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBl
OjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQzMkFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCld
LnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpj
cmVhdGUoZXhlYywgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBKU1VpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWlu
dDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5
cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0Zsb2F0MzJBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFycmF5
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90
b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0u
cHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6
Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0YVZp
ZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFBy
b3RvdHlwZS5nZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQ4QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0lu
dDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
VWludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgSlNVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdl
dCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlw
ZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90
b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVTdHJ1
Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMy
KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDY0KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBl
RmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlRGF0YVZpZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXc6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmplY3Q6
OmNyZWF0ZShleGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5N
YXRoLCBNYXRoT2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRF
bnVtKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IgPSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7Cisg
ICAgRml4ZWRBcnJheTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZ
UEVTPiB0eXBlZEFycmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNb
dG9JbmRleChUeXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMs
IEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJ
bnQ4KV0ucHJvdG90eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNy
ZWF0ZSh0aGlzLCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3Rv
SW5kZXgoVHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5
cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJy
YXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBK
U1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0
KCksICJVaW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5
cGVVaW50OENsYW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
KHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xhbXBl
ZEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYp
XSA9IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3Rv
dHlwZS5nZXQoKSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRo
aXMsIEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9h
dDMyQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0
NjQpXSA9IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0NjRB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCld
LnByb3RvdHlwZS5nZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1
Y3RvcnNbdG9JbmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHRoaXMsIEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAKKyAg
ICBtX2FycmF5QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29u
c3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJ
bmRleCA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7
CisgICAgICAgIG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250
RW51bSk7CisgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElk
ZW50aWZpZXIoZXhlYywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5u
YW1lKGV4ZWMpKSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250
RW51bSk7CisgICAgfQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9
IHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4s
IGpzTmFOKCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTU0MCw2ICs1
OTYsMTQgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKKyAg
ICAKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclByb3RvdHlw
ZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1
cmUpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9U
WVBFUzsgaS0tOykgeworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBl
ZEFycmF5c1tpXS5wcm90b3R5cGUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV90eXBlZEFycmF5c1tpXS5zdHJ1Y3R1cmUpOworICAgIH0KIH0KIAogSlNWYWx1ZSBKU0ds
b2JhbE9iamVjdDo6dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNt
YU1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNp
bmNsdWRlICJBcnJheUFsbG9jYXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJO
dW1iZXJQcm90b3R5cGUuaCIKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CkBAIC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3N0cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpT
QXJyYXlCdWZmZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1
Y3QgVHlwZWRBcnJheURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3Rv
dHlwZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07
CisgICAgCisgICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FS
UkFZX1RZUEVTPiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQ
b2ludGVyc1tTcGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkg
dGhlIExMSW50IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0
cnVjdHVyZSogcmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4
cFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAg
ICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0
cmluZ09iamVjdFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUqIGFycmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZl
clByb3RvdHlwZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisg
ICAgU3RydWN0dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5z
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVj
aWFsOjpQb2ludGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTSW50OEFycmF5X2gKKyNkZWZpbmUgSlNJbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBl
ZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5X2gKKwor
I2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMyQXJyYXlfaAorI2RlZmluZSBK
U0ludDMyQXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8g
SlNJbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKyNkZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3Qg
Q2xhc3NJbmZvIEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZK
UyMjdHlwZSMjQ29uc3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKUyMjdHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0Vf
U19JTkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9T
X0lORk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1Nf
SU5GTyhEYXRhVmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBl
ZEFycmF5Q29uc3RydWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gK
KworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
SW50OEFycmF5PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFy
cmF5PiBKU0ludDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVk
QXJyYXk+IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29u
c3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNV
aW50MzJBcnJheT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNv
bnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpT
RmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1
Y3RvcjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFy
cmF5UHJvdG90eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFz
c0luZm8gSlMjI3R5cGUjI1Byb3RvdHlwZTo6c19pbmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAm
SlMjI3R5cGUjI1Byb3RvdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTIyN0eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFL
RV9TX0lORk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19J
TkZPKFVpbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9T
X0lORk8oVWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lO
Rk8oRmxvYXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisjZGVmaW5lIEpTVHlw
ZWRBcnJheVByb3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50OEFycmF5
PiBKU0ludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5
UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1Vp
bnQ4QXJyYXk+IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJh
eVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNV
aW50MTZBcnJheT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheVByb3RvdHlw
ZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDMyQXJy
YXk+IEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU7CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5UHJvdG90eXBlc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZWRBcnJheXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAg
dGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7IFwK
KyAgICAgICAgI3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAw
LCAwLCBcCisgICAgICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5KSBcCisg
ICAgfTsgXAorICAgIGNvbnN0IENsYXNzSW5mbyogZ2V0IyN0eXBlIyNBcnJheUNsYXNzSW5mbygp
IHsgcmV0dXJuICZKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbzsgfQorCitNQUtFX1NfSU5GTyhJbnQ4
KTsKK01BS0VfU19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZP
KFVpbnQ4KTsKK01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYp
OworTUFLRV9TX0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lO
Rk8oRmxvYXQ2NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAor
CisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJ
bnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFw
dG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4
Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2
NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhB
cnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZp
bmUgSlNVaW50OEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTVWludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OENs
YW1wZWRBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U1VpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTVWludDE2QXJyYXlfaAorI2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMy
QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50
MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBP
cGVyYXRpb25zX2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgor
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJK
U1Byb3h5LmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlBhc3NXZWFrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlcjo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworSlNB
cnJheUJ1ZmZlciogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUJ1ZmZlciogbmF0
aXZlKQoreworICAgIGlmIChKU0FycmF5QnVmZmVyKiBidWZmZXIgPSBuYXRpdmUtPm1fd3JhcHBl
ci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVy
KiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIGds
b2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgbmF0aXZlKTsKKyAgICBuYXRpdmUt
Pm1fd3JhcHBlciA9IFBhc3NXZWFrPEpTQXJyYXlCdWZmZXI+KHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5lIFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyX2gKKworI2luY2x1ZGUgIkhhbmRsZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUaGUgZGVmYXVsdCBjb250cm9sbGVyIHVz
ZWQgZm9yIG1hbmFnaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbgorLy8gYXJyYXkgYnVmZmVy
cyBhbmQgdGhlaXIgd3JhcHBlcnMgaW4gSmF2YVNjcmlwdENvcmUuIFRoaXMgaXNuJ3Qgd2hhdAor
Ly8gV2ViQ29yZSB1c2VzLCBidXQgaXQgaXMgd2hhdCBKU0MgdXNlcyB3aGVuIHJ1bm5pbmcgc3Rh
bmRhbG9uZS4gVGhpcworLy8gaXMgcHJldHR5IHNpbXBsZToKKy8vCisvLyAtIElmIHRoZSBKU0Fy
cmF5QnVmZmVyIGlzIGxpdmUsIHRoZW4gdGhlIEFycmF5QnVmZmVyIHN0YXlzIGFsaXZlLgorLy8K
Ky8vIC0gSWYgeW91IGFzayBhbiBBcnJheUJ1ZmZlciBmb3IgYSBKU0FycmF5QnVmZmVyIGFmdGVy
IG9uZSBoYWQKKy8vICAgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgYW5kIGl0IGRpZG4ndCBkaWUsIHRo
ZW4geW91IGdldCB0aGUgc2FtZQorLy8gICBvbmUuCisKK2NsYXNzIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIFR5cGVkQXJyYXlDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICBT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgflNpbXBsZVR5cGVkQXJy
YXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzMCwxMyArMjMwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IGNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBo
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7CisgICAgICAgIHJldHVybiBoYXNJ
bmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzVHlwZWRW
aWV3KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpOwotICAgIH0K
KyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0OwogICAgIAog
ICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJl
SW5saW5lc19oCiAKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKQEAgLTEwNCw2
ICsxMDUsMTcgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uYwogICAg
ICAgICB2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOwog
fQogCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2Vs
bCogY2VsbCkgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWlzVHlwZWRWaWV3
KG1fY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIGpzQ2FzdDxjb25zdCBKU0FycmF5QnVmZmVyVmlldyo+KGNl
bGwpLT5tb2RlKCkgPT0gV2FzdGVmdWxUeXBlZEFycmF5OworfQorCiBpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QpCiB7CiAgICAgcmV0dXJuIHR5cGVJbmZvKCkubWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCgpICYmIGdsb2JhbE9iamVjdCgpID09IGxleGljYWxHbG9iYWxPYmplY3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlB
ZGFwdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlBZGFwdG9y
c19oCisjZGVmaW5lIFR5cGVkQXJyYXlBZGFwdG9yc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8CisgICAgdHlwZW5hbWUgVHlwZUFy
ZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVBcmcsCisgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmlld1R5cGVBcmcg
Vmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7CisgICAgc3Rh
dGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFyZzsKKworICAg
IHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUeXBlPihzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUeXBlPih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQz
MigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8CisgICAgdHlw
ZW5hbWUgVHlwZUFyZywgdHlwZW5hbWUgVmlld1R5cGVBcmcsIHR5cGVuYW1lIEpTVmlld1R5cGVB
cmcsCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlQXJnPgorc3RydWN0IEZsb2F0VHlwZWRB
cnJheUFkYXB0b3IgeworICAgIHR5cGVkZWYgVHlwZUFyZyBUeXBlOworICAgIHR5cGVkZWYgVmll
d1R5cGVBcmcgVmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1ZpZXdUeXBlQXJnIEpTVmlld1R5cGU7
CisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IHR5cGVWYWx1ZUFy
ZzsKKyAgICAKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVHlwZSB0b05hdGl2ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
VHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihRTmFOKTsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KK307CisKK3N0cnVjdCBJbnQ4QWRhcHRvcjsK
K3N0cnVjdCBJbnQxNkFkYXB0b3I7CitzdHJ1Y3QgSW50MzJBZGFwdG9yOworc3RydWN0IFVpbnQ4
QWRhcHRvcjsKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yOworc3RydWN0IFVpbnQxNkFkYXB0
b3I7CitzdHJ1Y3QgVWludDMyQWRhcHRvcjsKK3N0cnVjdCBGbG9hdDMyQWRhcHRvcjsKK3N0cnVj
dCBGbG9hdDY0QWRhcHRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFk
YXB0b3I+IEludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRh
cHRvcj4gSW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRh
cHRvcj4gVWludDhBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xh
bXBlZEFkYXB0b3I+IFVpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDE2QWRhcHRvcj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxVaW50MzJBZGFwdG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNU
eXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiBjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEpTSW50OEFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEpTSW50MTZBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBKU0ludDMyQXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gSlNVaW50OEFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9y
PiBKU1VpbnQ4Q2xhbXBlZEFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50MTZBZGFwdG9yPiBKU1VpbnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50MzJBZGFwdG9yPiBKU1VpbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gSlNGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBKU0Zsb2F0NjRBcnJheTsKKworc3Ry
dWN0IEludDhBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQ4X3QsIEludDhB
cnJheSwgSlNJbnQ4QXJyYXksIFR5cGVJbnQ4PiB7IH07CitzdHJ1Y3QgSW50MTZBZGFwdG9yIDog
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQxNl90LCBJbnQxNkFycmF5LCBKU0ludDE2QXJy
YXksIFR5cGVJbnQxNj4geyB9Oworc3RydWN0IEludDMyQWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8aW50MzJfdCwgSW50MzJBcnJheSwgSlNJbnQzMkFycmF5LCBUeXBlSW50MzI+
IHsgfTsKK3N0cnVjdCBVaW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPHVp
bnQ4X3QsIFVpbnQ4QXJyYXksIEpTVWludDhBcnJheSwgVHlwZVVpbnQ4PiB7IH07CitzdHJ1Y3Qg
VWludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDE2X3QsIFVpbnQx
NkFycmF5LCBKU1VpbnQxNkFycmF5LCBUeXBlVWludDE2PiB7IH07CitzdHJ1Y3QgVWludDMyQWRh
cHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8dWludDMyX3QsIFVpbnQzMkFycmF5LCBK
U1VpbnQzMkFycmF5LCBUeXBlVWludDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQzMkFkYXB0b3IgOiBG
bG9hdFR5cGVkQXJyYXlBZGFwdG9yPGZsb2F0LCBGbG9hdDMyQXJyYXksIEpTRmxvYXQzMkFycmF5
LCBUeXBlRmxvYXQzMj4geyB9Oworc3RydWN0IEZsb2F0NjRBZGFwdG9yIDogRmxvYXRUeXBlZEFy
cmF5QWRhcHRvcjxkb3VibGUsIEZsb2F0NjRBcnJheSwgSlNGbG9hdDY0QXJyYXksIFR5cGVGbG9h
dDY0PiB7IH07CisKK3N0cnVjdCBVaW50OENsYW1wZWRBZGFwdG9yIHsKKyAgICB0eXBlZGVmIHVp
bnQ4X3QgVHlwZTsKKyAgICB0eXBlZGVmIFVpbnQ4Q2xhbXBlZEFycmF5IFZpZXdUeXBlOworICAg
IHR5cGVkZWYgSlNVaW50OENsYW1wZWRBcnJheSBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25z
dCBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWUgPSBUeXBlVWludDhDbGFtcGVkOworICAgIAorICAg
IHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB1aW50OF90IHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVl
LmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4g
dG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
SlNWYWx1ZSB0b0pTVmFsdWUodWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBq
c051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUo
dWludDhfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1aW50OF90IGNsYW1w
KGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCAwKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAgICAgICAgICAgIHJldHVy
biAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5QWRhcHRv
cnNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworVHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlD
b250cm9sbGVyKCkgeyB9CitUeXBlZEFycmF5Q29udHJvbGxlcjo6flR5cGVkQXJyYXlDb250cm9s
bGVyKCkgeyB9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2RlZmluZSBUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQXJyYXlCdWZmZXI7CitjbGFzcyBFeGVj
U3RhdGU7CitjbGFzcyBKU0FycmF5QnVmZmVyOworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CisKK2Ns
YXNzIFR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIFJlZkNvdW50ZWQ8VHlwZWRBcnJheUNv
bnRyb2xsZXI+IHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUeXBlZEFycmF5Q29u
dHJvbGxlcigpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgflR5cGVkQXJyYXlDb250
cm9sbGVyKCk7CisgICAgCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyKiB0b0pTKEV4ZWNTdGF0
ZSosIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlCdWZmZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUeXBl
ZEFycmF5RGVzY3JpcHRvcl9oCi0jZGVmaW5lIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBDbGFzc0luZm87Ci0KLWVudW0gVHlwZWRBcnJheVR5cGUg
ewotICAgIFR5cGVkQXJyYXlOb25lLAotICAgIFR5cGVkQXJyYXlJbnQ4LAotICAgIFR5cGVkQXJy
YXlJbnQxNiwKLSAgICBUeXBlZEFycmF5SW50MzIsCi0gICAgVHlwZWRBcnJheVVpbnQ4LAotICAg
IFR5cGVkQXJyYXlVaW50OENsYW1wZWQsCi0gICAgVHlwZWRBcnJheVVpbnQxNiwKLSAgICBUeXBl
ZEFycmF5VWludDMyLAotICAgIFR5cGVkQXJyYXlGbG9hdDMyLAotICAgIFR5cGVkQXJyYXlGbG9h
dDY0Ci19OwotCi1zdHJ1Y3QgVHlwZWRBcnJheURlc2NyaXB0b3IgewotICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKCkKLSAgICAgICAgOiBtX2NsYXNzSW5mbygwKQotICAgICAgICAsIG1fc3RvcmFn
ZU9mZnNldCgwKQotICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KDApCi0gICAgewotICAgIH0KLSAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgc2l6ZV90
IHN0b3JhZ2VPZmZzZXQsIHNpemVfdCBsZW5ndGhPZmZzZXQpCi0gICAgICAgIDogbV9jbGFzc0lu
Zm8oY2xhc3NJbmZvKQotICAgICAgICAsIG1fc3RvcmFnZU9mZnNldChzdG9yYWdlT2Zmc2V0KQot
ICAgICAgICAsIG1fbGVuZ3RoT2Zmc2V0KGxlbmd0aE9mZnNldCkKLSAgICB7Ci0gICAgfQotICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87Ci0gICAgc2l6ZV90IG1fc3RvcmFnZU9mZnNl
dDsKLSAgICBzaXplX3QgbV9sZW5ndGhPZmZzZXQ7Ci19OwotCi1lbnVtIFR5cGVkQXJyYXlTaWdu
ZWRuZXNzIHsKLSAgICBTaWduZWRUeXBlZEFycmF5LAotICAgIFVuc2lnbmVkVHlwZWRBcnJheQot
fTsKLWVudW0gVHlwZWRBcnJheVJvdW5kaW5nIHsKLSAgICBUcnVuY2F0ZVJvdW5kaW5nLAotICAg
IENsYW1wUm91bmRpbmcKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVHlw
ZWRBcnJheURlc2NyaXB0b3JfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgVHlwZWRBcnJheUlubGluZXNfaAorI2RlZmluZSBUeXBlZEFycmF5SW5saW5l
c19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCIKKyNpbmNsdWRl
ICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIK
KworI2VuZGlmIC8vIFR5cGVkQXJyYXlJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOwor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBKU0ludDhBcnJheTo6aW5mbygpOwor
ICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gSlNVaW50OEFycmF5OjppbmZvKCk7
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4gSlNVaW50OENsYW1w
ZWRBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gSlNJ
bnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4g
SlNVaW50MTZBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1
cm4gSlNJbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICBy
ZXR1cm4gSlNVaW50MzJBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAg
ICAgIHJldHVybiBKU0Zsb2F0MzJBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6
CisgICAgICAgIHJldHVybiBKU0Zsb2F0NjRBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZURh
dGFWaWV3OgorICAgICAgICByZXR1cm4gSlNEYXRhVmlldzo6aW5mbygpOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlZEFycmF5VHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAg
ICAgb3V0LnByaW50KCJOb3RUeXBlZEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVJbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQ4Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MTYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDg6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVVaW50OENsYW1wZWQ6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQ4Q2xhbXBlZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVVaW50MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJUeXBlVWludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFR5cGVGbG9hdDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVGbG9hdDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVG
bG9hdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAg
ICAgb3V0LnByaW50KCJUeXBlRGF0YVZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFR5cGVkQXJyYXlUeXBlX2gKKyNkZWZpbmUgVHlwZWRBcnJheVR5cGVfaAorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
Q2xhc3NJbmZvOworCitlbnVtIFR5cGVkQXJyYXlUeXBlIHsKKyAgICBOb3RUeXBlZEFycmF5LAor
ICAgIFR5cGVJbnQ4LAorICAgIFR5cGVVaW50OCwKKyAgICBUeXBlVWludDhDbGFtcGVkLAorICAg
IFR5cGVJbnQxNiwKKyAgICBUeXBlVWludDE2LAorICAgIFR5cGVJbnQzMiwKKyAgICBUeXBlVWlu
dDMyLAorICAgIFR5cGVGbG9hdDMyLAorICAgIFR5cGVGbG9hdDY0LAorICAgIFR5cGVEYXRhVmll
dworfTsKKworI2RlZmluZSBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVMgVHlwZURhdGFWaWV3
CisKK2lubGluZSB1bnNpZ25lZCB0b0luZGV4KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7Cit9CisKK2lubGluZSBib29s
IGlzVHlwZWRWaWV3KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorfQorCitpbmxpbmUgc2l6ZV90IGVsZW1lbnRTaXplKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2Ug
VHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICBy
ZXR1cm4gMjsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBUeXBlRmxvYXQ2
NDoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9y
VHlwZShUeXBlZEFycmF5VHlwZSk7CisKK2lubGluZSBib29sIGlzSW50KFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBl
SW50MTY6CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNh
c2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlZEFy
cmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUZsb2F0
MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgaXNT
aWduZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFR5cGVJbnQ4OgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZUludDMyOgor
ICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworaW5saW5lIGJvb2wgaXNDbGFtcGVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgcmV0
dXJuIHR5cGUgPT0gVHlwZVVpbnQ4Q2xhbXBlZDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OlR5cGVkQXJyYXlUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBUeXBl
ZEFycmF5VHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5c19o
CisjZGVmaW5lIFR5cGVkQXJyYXlzX2gKKworI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmll
dy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50OEFkYXB0b3I+IEludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSW50MTZBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRhcHRvcj4gSW50MzJBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4QWRhcHRvcj4gVWludDhBcnJheTsK
K3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IFVpbnQ4
Q2xhbXBlZEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRv
cj4gVWludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MzJBZGFw
dG9yPiBVaW50MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJB
ZGFwdG9yPiBGbG9hdDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9h
dDY0QWRhcHRvcj4gRmxvYXQ2NEFycmF5OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIFR5cGVkQXJyYXlzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAog
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRlZiBV
aW50OEFycmF5X2gKICNkZWZpbmUgVWludDhBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4g
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0Owot
ICAgIHVzaW5nIEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLQotICAgIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIGlu
bGluZSBVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0
byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50OF90PjsK
LX07Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxV
aW50OEFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJy
YXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGFycmF5
LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OmNyZWF0
ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZTxVaW50OEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGVV
bmluaXRpYWxpemVkPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQ4QXJyYXk6OlVpbnQ4
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCi06IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDhfdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4g
VWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJh
cnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXlJbXBsPFVpbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4QXJyYXk7
CiAKICNlbmRpZiAvLyBVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMiwxMTIgKzEwLDI1IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAogI2lmbmRlZiBVaW50OENsYW1w
ZWRBcnJheV9oCiAjZGVmaW5lIFVpbnQ4Q2xhbXBlZEFycmF5X2gKIAotI2luY2x1ZGUgIlVpbnQ4
QXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgVWludDhDbGFtcGVkQXJyYXkgOiBwdWJsaWMgVWludDhBcnJheSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUg
ZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2Ug
cmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIEl0J3Mgb25seSBuZWVkZWQgdG8g
cG90ZW50aWFsbHkgY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgYXJyYXkKLSAgICAvLyB3YXMgY3Jl
YXRlZCB1bmluaXRpYWxpemVkIC0tIHRoZSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHBhdGhzCi0g
ICAgLy8gemVybyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICBpbmxpbmUgdm9pZCB6ZXJvRmls
bCgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICBpbmxp
bmUgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSk7Ci0KLSAgICBpbmxpbmUg
UGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsK
LSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3ViYXJyYXkoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgaW5saW5lIFVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1ha2Ug
Y29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBl
ZEFycmF5QmFzZTx1aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJh
eTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+
KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWlu
dDhDbGFtcGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6Onpl
cm9GaWxsKCkKLXsKLSAgICB6ZXJvUmFuZ2UoMCwgbGVuZ3RoKCkpOwotfQotCi12b2lkIFVpbnQ4
Q2xhbXBlZEFycmF5OjpzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICBp
ZiAoaW5kZXggPj0gbV9sZW5ndGgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3RkOjppc25h
bih2YWx1ZSkgfHwgdmFsdWUgPCAwKQotICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgZWxzZSBpZiAo
dmFsdWUgPiAyNTUpCi0gICAgICAgIHZhbHVlID0gMjU1OwotICAgIGRhdGEoKVtpbmRleF0gPSBz
dGF0aWNfY2FzdDx1aW50OF90PihscmludCh2YWx1ZSkpOwotfQotCi1VaW50OENsYW1wZWRBcnJh
eTo6VWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi06IFVpbnQ4QXJyYXkoYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OENsYW1wZWRBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKIHVzaW5nIEpTQzo6VWludDhDbGFtcGVkQXJyYXk7CiAKICNlbmRpZiAvLyBVaW50OENs
YW1wZWRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQx
NkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDE2QXJyYXkuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWlu
dDE2QXJyYXlfaAogI2RlZmluZSBVaW50MTZBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDE2QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBjcmVhdGUoY29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDE2OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQxNl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVh
dGU8VWludDE2QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MTZBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDE2QXJyYXk6OlVpbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBV
aW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQz
MkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWlu
dDMyQXJyYXkuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDMyQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWlu
dDMyQXJyYXlfaAogI2RlZmluZSBVaW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBBcnJheUJ1ZmZlcjsK
LQotY2xhc3MgVWludDMyQXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXpl
ZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+
OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OnNldDsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQp
IGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDMyOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgVWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQzMl90PjsKLX07Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVh
dGU8VWludDMyQXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotVWludDMyQXJyYXk6OlVpbnQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDog
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50MzJfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50
MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUg
IlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDMyQXJyYXk7CiAKICNlbmRpZiAvLyBV
aW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlBhcnNlckFyZW5hLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKKyNp
bmNsdWRlICJTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIgogI2luY2x1
ZGUgIlN0cm9uZ0lubGluZXMuaCIKQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuIGNvbnN0IEhhc2hU
YWJsZSBhcnJheUNvbnN0cnVjdG9yVAogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBhcnJheVByb3Rv
dHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBib29sZWFuUHJvdG90eXBlVGFibGU7
CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGpzb25UYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFi
bGUgZGF0YVZpZXdUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOwogZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlQ29uc3RydWN0b3JUYWJsZTsKIGV4dGVybiBjb25zdCBI
YXNoVGFibGUgZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTE0NSw2ICsxNDcsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBhcnJheUNvbnN0cnVjdG9y
VGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSkKICAg
ICAsIGFycmF5UHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6YXJyYXlQcm90
b3R5cGVUYWJsZSkpCiAgICAgLCBib29sZWFuUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFi
bGU+KEpTQzo6Ym9vbGVhblByb3RvdHlwZVRhYmxlKSkKKyAgICAsIGRhdGFWaWV3VGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0YVZpZXdUYWJsZSkpCiAgICAgLCBkYXRlVGFibGUoZmFz
dE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZVRhYmxlKSkKICAgICAsIGRhdGVDb25zdHJ1Y3RvclRh
YmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVDb25zdHJ1Y3RvclRhYmxlKSkKICAgICAs
IGVycm9yUHJvdG90eXBlVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZXJyb3JQcm90b3R5
cGVUYWJsZSkpCkBAIC0yNTgsNiArMjYxLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICBpZiAoY2FuVXNlSklUKCkpCiAgICAgICAgIGRmZ1N0YXRlID0g
YWRvcHRQdHIobmV3IERGRzo6TG9uZ0xpdmVkU3RhdGUoKSk7CiAjZW5kaWYKKyAgICAKKyAgICAv
LyBJbml0aWFsaXplIHRoaXMgbGFzdCwgYXMgYSBmcmVlIHdheSBvZiBhc3NlcnRpbmcgdGhhdCBW
TSBpbml0aWFsaXphdGlvbiBpdHNlbGYKKyAgICAvLyB3b24ndCB1c2UgdGhpcy4KKyAgICBtX3R5
cGVkQXJyYXlDb250cm9sbGVyID0gYWRvcHRSZWYobmV3IFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyKCkpOwogfQogCiBWTTo6flZNKCkKQEAgLTI4OSw2ICsyOTYsNyBAQCBWTTo6flZNKCkKICAg
ICBhcnJheVByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGFycmF5Q29uc3RydWN0
b3JUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBib29sZWFuUHJvdG90eXBlVGFibGUtPmRlbGV0
ZVRhYmxlKCk7CisgICAgZGF0YVZpZXdUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlVGFi
bGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgZGF0ZUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxl
KCk7CiAgICAgZXJyb3JQcm90b3R5cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKQEAgLTMwNiw2ICsz
MTQsNyBAQCBWTTo6flZNKCkKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4o
YXJyYXlDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hU
YWJsZSo+KGFycmF5UHJvdG90eXBlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4oYm9vbGVhblByb3RvdHlwZVRhYmxlKSk7CisgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGRhdGFWaWV3VGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZVRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0
PEhhc2hUYWJsZSo+KGRhdGVDb25zdHJ1Y3RvclRhYmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25z
dF9jYXN0PEhhc2hUYWJsZSo+KGVycm9yUHJvdG90eXBlVGFibGUpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2lu
Y2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlRo
dW5rR2VuZXJhdG9ycy5oIgotI2luY2x1ZGUgIlR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2lu
Y2x1ZGUgIldlYWtSYW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KQEAgLTY5LDEzICs2OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIENvZGVDYWNo
ZTsKICAgICBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKICAgICBjbGFzcyBFeGVjU3RhdGU7Ci0g
ICAgY2xhc3MgRmxvYXQzMkFycmF5OwotICAgIGNsYXNzIEZsb2F0NjRBcnJheTsKICAgICBjbGFz
cyBIYW5kbGVTdGFjazsKICAgICBjbGFzcyBJZGVudGlmaWVyVGFibGU7Ci0gICAgY2xhc3MgSW50
OEFycmF5OwotICAgIGNsYXNzIEludDE2QXJyYXk7Ci0gICAgY2xhc3MgSW50MzJBcnJheTsKICAg
ICBjbGFzcyBJbnRlcnByZXRlcjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAgICBjbGFz
cyBKU09iamVjdDsKQEAgLTkzLDEwICs4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJM
RShSRUdFWFBfVFJBQ0lORykKICAgICBjbGFzcyBSZWdFeHA7CiAjZW5kaWYKLSAgICBjbGFzcyBV
aW50OEFycmF5OwotICAgIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotICAgIGNsYXNzIFVpbnQx
NkFycmF5OwotICAgIGNsYXNzIFVpbnQzMkFycmF5OwogICAgIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrOwogICAgIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTIzMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBib29sZWFuUHJvdG90eXBlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
ZGF0YVZpZXdUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CiAgICAg
ICAgIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGU7CiAgICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogZXJyb3JQcm90b3R5cGVUYWJsZTsKQEAgLTM5MCw2ICszODIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBMZWdhY3lQcm9maWxlciogbV9lbmFibGVkUHJvZmlsZXI7
CiAgICAgICAgIE93blB0cjxQcm9maWxlcjo6RGF0YWJhc2U+IG1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKKyAgICAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlDb250
cm9sbGVyOwogICAgICAgICBSZWdFeHBDYWNoZSogbV9yZWdFeHBDYWNoZTsKICAgICAgICAgQnVt
cFBvaW50ZXJBbGxvY2F0b3IgbV9yZWdFeHBBbGxvY2F0b3I7CiAKQEAgLTQyOCw1NSArNDIxLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hh
c2hDb25zKCkgeyByZXR1cm4gbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPiBzX21pbk51
bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnM7IH0KICAgICAgICAgdm9pZCByZXNldE5ld1N0cmlu
Z3NTaW5jZUxhc3RIYXNoQ29ucygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMgPSAw
OyB9CiAKLSNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6
ZWRUeXBlKSBcCi0gICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25z
dCBjYXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpIFwKLSAgICAgICAgeyBcCi0gICAgICAgICAgICBBU1NFUlQoIW1fIyN0eXBlIyNB
cnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gfHwgbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyA9PSBkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICAgICAgbV8j
I3R5cGUjI0FycmF5RGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7IFwKLSAgICAgICAgICAgIEFTU0VS
VChtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgXAotICAgICAgICB9IFwK
LSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIHR5cGUjI0FycmF5RGVzY3JpcHRv
cigpIGNvbnN0IHsgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8p
OyByZXR1cm4gbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvcjsgfQotCi0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGludDgsIEludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbihpbnQxNiwgSW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihpbnQzMiwgSW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1
aW50OCwgVWludDgpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50OENs
YW1wZWQsIFVpbnQ4Q2xhbXBlZCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9u
KHVpbnQxNiwgVWludDE2KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWlu
dDMyLCBVaW50MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9hdDMy
LCBGbG9hdDMyKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQ2NCwg
RmxvYXQ2NCk7Ci0jdW5kZWYgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24KLSAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihU
eXBlZEFycmF5VHlwZSB0eXBlKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgotICAgICAgICAg
ICAgICAgIHJldHVybiAmaW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICZpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OEFycmF5RGVzY3JpcHRv
cigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAg
ICAgICAgIHJldHVybiAmdWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MTZB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0
MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIGN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1fYXBpTG9jay0+Y3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSB8fCBleGNs
dXNpdmVUaHJlYWQgPT0gY3VycmVudFRocmVhZCgpOwpAQCAtNTEwLDE2ICs0NTQsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBtX2luRGVmaW5lT3duUHJvcGVydHk7CiAgICAgICAg
IE93blB0cjxDb2RlQ2FjaGU+IG1fY29kZUNhY2hlOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8
U3RhY2tGcmFtZT4gbV9leGNlcHRpb25TdGFjazsKLQotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2ludDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IG1faW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1f
aW50MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWlu
dDhBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDhD
bGFtcGVkQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3Vp
bnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50
MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQz
MkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yOwogICAgIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNTQwNjgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBB
ZGRlZCB0aGUgbm90aW9uIG9mIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2JqZWN0IHRoYXQgY2FuIGJl
IG1hcmtlZCBEZWZlcnJlZCwKKyAgICAgICAgICB3aGljaCBpcyBsaWtlIGEgc3BlY2lhbC1wdXJw
b3NlIHVwcmVmLgorICAgICAgICAKKyAgICAgICAgLSBBZGRlZCBhIGNvbW1vbiBieXRlIGZsaXBw
ZXIuCisKKyAgICAgICAgQXV0b21ha2Ugd29yayBjb3VydGVzeSBvZiBaYW4gRG9iZXJzZWsgPHpk
b2JlcnNla0BpZ2FsaWEuY29tPi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0Rl
ZmVycmFibGVSZWZDb3VudGVkLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZEJhc2U6OnJlZik6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFz
ZTo6aGFzT25lUmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpy
ZWZDb3VudCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6aXNEZWZl
cnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6RGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
Ojp+RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWRCYXNlOjpkZXJlZkJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6OnNldElzRGVmZXJyZWRCYXNlKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWQ6OmRlcmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWQ6OnNl
dElzRGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6RGVmZXJy
YWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6fkRl
ZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKiB3dGYvRmxpcEJ5dGVzLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbik6CisgICAgICAgIChX
VEY6OmZsaXBCeXRlcyk6CisgICAgICAgIChXVEY6OmZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToK
KwogMjAxMy0wOC0xNCAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlYXVAbmRzLmNvbT4KIAog
ICAgICAgICBERkdfSklUIGltcGxlbWVudGF0aW9uIGZvciBzaDQgYXJjaGl0ZWN0dXJlLgpJbmRl
eDogU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dURi9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIHd0Zl9z
b3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBcCiAgICAg
U291cmNlL1dURi93dGYvRGVjaW1hbE51bWJlci5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNv
ZGVyLmggXAorICAgIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmggXAogICAg
IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0Rpc2FsbG93Q1R5
cGUuaCBcCiAgICAgU291cmNlL1dURi93dGYvRG91Ymx5TGlua2VkTGlzdC5oIFwKQEAgLTUyLDYg
KzUzLDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZpbGVQcmludFN0
cmVhbS5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZpbGVQcmludFN0cmVhbS5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9GaXhlZEFycmF5LmggXAorICAgIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRl
cy5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggXAogICAgIFNvdXJjZS9XVEYvd3Rm
L0Z1bmN0aW9uRGlzcGF0Y2hlci5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL0Z1bmN0aW9uRGlz
cGF0Y2hlci5oIFwKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24g
MTU0MDY0KQorKysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZc
RGF0ZU1hdGguaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVjaW1hbE51
bWJlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEZWNvZGVyLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERlZmVycmFibGVSZWZDb3VudGVkLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERlcXVlLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERpc2FsbG93Q1R5cGUuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcRG91Ymx5TGlua2VkTGlzdC5oIiAvPg0KQEAgLTE2NCw2ICsx
NjUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZlYXR1cmVEZWZpbmVzLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZpbGVQcmludFN0cmVhbS5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxGaXhlZEFycmF5LmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZsaXBCeXRlcy5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxGb3J3YXJkLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXEZ1bmN0aW9uRGlzcGF0Y2hlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxGdW5jdGlvbmFsLmgiIC8+DQpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw4IEBA
CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEw
MDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJ
MEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKKwkJMEYyQjY2QTcxN0I2
QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0Yx
OTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKIAkJMEY4RjJCOTExNzJFMDBGQzAwN0RC
REE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25U
aHJlYWQuaCAqLzsgfTsKIAkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8qIENvbXBpbGF0aW9u
VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOEYyQjhGMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi87IH07
CkBAIC0yODAsNiArMjgyLDggQEAKIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9u
ICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZB
NTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjhGMTcyRTAwRjAw
MDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21w
aWxhdGlvblRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjkw
MTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b21waWxhdGlvblRocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjMwLDYg
KzYzNCw3IEBACiAJCQkJQThBNDcyN0IxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIu
Y3BwICovLAogCQkJCUE4QTQ3MjdDMTUxQTgyNUEwMDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmgg
Ki8sCiAJCQkJQThBNDcyN0QxNTFBODI1QTAwNDEyM0ZGIC8qIERlY29kZXIuaCAqLywKKwkJCQkw
RjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLywKIAkJ
CQlBOEE0NzI3RTE1MUE4MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLywKIAkJCQlBOEE0NzI3RjE1
MUE4MjVBMDA0MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oICovLAogCQkJCUE4QTQ3MjgwMTUxQTgy
NUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCkBAIC02NDgsNiArNjUzLDcgQEAK
IAkJCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLywK
IAkJCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi8sCiAJ
CQkJQThBNDcyQTMxNTFBODI1QTAwNDEyM0ZGIC8qIEZpeGVkQXJyYXkuaCAqLywKKwkJCQkwRjJC
NjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8sCiAJCQkJQThBNDcyQTYxNTFB
ODI1QTAwNDEyM0ZGIC8qIEZvcndhcmQuaCAqLywKIAkJCQlBOEE0NzJBNzE1MUE4MjVBMDA0MTIz
RkYgLyogRnVuY3Rpb25hbC5oICovLAogCQkJCTFBMUQ4QjlEMTczMTg3OTgwMDE0MURBNCAvKiBG
dW5jdGlvbkRpc3BhdGNoZXIuY3BwICovLApAQCAtOTk0LDYgKzEwMDAsNyBAQAogCQkJCUE4QTQ3
M0Y2MTUxQTgyNUIwMDQxMjNGRiAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDczRkExNTFBODI1QjAwNDEyM0ZGIC8qIE9TUmFuZG9tU291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNGQjE1MUE4MjVCMDA0MTIzRkYgLyogT3duQXJyYXlQdHIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkMxNTFBODI1QjAwNDEyM0ZGIC8qIE93
blB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkQxNTFBODI1QjAwNDEyM0ZGIC8qIE93
blB0ckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkUxNTFBODI1QjAwNDEyM0ZG
IC8qIFBhY2tlZEludFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU3LDYgKzEwNjQsNyBA
QAogCQkJCUE4QTQ3NDMzMTUxQTgyNUIwMDQxMjNGRiAvKiBUZW1wb3JhcnlDaGFuZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ0MTUxQTgyNUIwMDQxMjNGRiAvKiBUZXh0UG9zaXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ3MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRG
dW5jdGlvbkludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkE3MTdCNkI0RkQw
MEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDQ5MTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZl
cy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU0
MDY0KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTE4LDYgKzE4LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgRGF0YUxvZy5oCiAgICAgRGVjaW1h
bE51bWJlci5oCiAgICAgRGVjb2Rlci5oCisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAogICAg
IERlcXVlLmgKICAgICBEaXNhbGxvd0NUeXBlLmgKICAgICBEb3VibHlMaW5rZWRMaXN0LmgKQEAg
LTI4LDYgKzI5LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgRmVhdHVyZURlZmluZXMuaAogICAg
IEZpbGVQcmludFN0cmVhbS5oCiAgICAgRml4ZWRBcnJheS5oCisgICAgRmxpcEJ5dGVzLmgKICAg
ICBGb3J3YXJkLmgKICAgICBGdW5jdGlvbkRpc3BhdGNoZXIuaAogICAgIEZ1bmN0aW9uYWwuaApJ
bmRleDogU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisjZGVmaW5lIERlZmVycmFibGVSZWZD
b3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIEEgdmFyaWFudCBvZiBSZWZDb3VudGVkIHRoYXQgYWxsb3dzIHJlZmVyZW5j
ZSBjb3VudGluZyB0byBiZSBkZWZlcnJlZCwKKy8vIGFuZCBjYW4gdGVsbCB5b3UgaWYgdGhhdCBo
YXMgaGFwcGVuZWQuIFlvdSBjYW4gdGhpbmsgb2YgYSBkZWZlcnJhbCBhcworLy8ganVzdCBiZWlu
ZyBhbiBhZGRpdGlvbmFsICJyZWYiLCBleGNlcHQgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBpdCBo
YXMKKy8vIHNwZWNpZmljYWxseSBoYXBwZW5lZCAtIHRoaXMgY2FuIGJlIHVzZWZ1bCBlaXRoZXIg
Zm9yIGRlYnVnZ2luZywgb3IKKy8vIHNvbWV0aW1lcyBldmVuIGZvciBzb21lIGFkZGl0aW9uYWwg
ZnVuY3Rpb25hbGl0eS4KKworY2xhc3MgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZGVmZXJyZWRGbGFnID0gMTsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbm9ybWFsSW5jcmVtZW50ID0gMjsKKyAgICAKK3B1YmxpYzoKKyAgICB2b2lkIHJl
ZigpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ICs9IG5vcm1hbEluY3JlbWVudDsKKyAgICB9
CisgICAgCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlZkNvdW50KCkgPT0gMTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgcmVmQ291bnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgLyBub3JtYWxJbmNyZW1lbnQ7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISEobV9yZWZDb3VudCAmIGRlZmVycmVkRmxhZyk7CisgICAgfQorICAgIAorcHJv
dGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgICAgIDogbV9yZWZD
b3VudChub3JtYWxJbmNyZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+RGVmZXJyYWJs
ZVJlZkNvdW50ZWRCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgZGVyZWZCYXNl
KCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgLT0gbm9ybWFsSW5jcmVtZW50OworICAgICAg
ICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorCisgICAgYm9vbCBzZXRJc0RlZmVycmVkQmFz
ZShib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBt
X3JlZkNvdW50IHw9IGRlZmVycmVkRmxhZzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ICY9IH5kZWZlcnJlZEZsYWc7CisgICAgICAgIHJl
dHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1f
cmVmQ291bnQ7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRGVmZXJyYWJsZVJl
ZkNvdW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEZWZlcnJhYmxlUmVmQ291bnRlZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVm
QmFzZSgpKQorICAgICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBzZXRJc0RlZmVycmVkKGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoIXNldElzRGVmZXJyZWRCYXNlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIERlZmVycmFibGVSZWZDb3VudGVk
KCkgeyB9CisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkKCkgeyB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDsKKworI2VuZGlmIC8v
IERlZmVycmFibGVSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvRmxpcEJ5dGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGbGlwQnl0ZXNfaAorI2RlZmluZSBGbGlwQnl0ZXNfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgYm9vbCBuZWVkVG9GbGlwQnl0
ZXNJZkxpdHRsZUVuZGlhbihib29sIGxpdHRsZUVuZGlhbikKK3sKKyNpZiBDUFUoQklHX0VORElB
TikKKyAgICByZXR1cm4gbGl0dGxlRW5kaWFuOworI2Vsc2UKKyAgICByZXR1cm4gIWxpdHRsZUVu
ZGlhbjsKKyNlbmRpZgorfQorCitpbmxpbmUgdWludDE2X3QgZmxpcEJ5dGVzKHVpbnQxNl90IHZh
bHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMGZmKSA8PCA4KQorICAgICAgICB8ICgo
dmFsdWUgJiAweGZmMDApID4+IDgpOworfQorCitpbmxpbmUgdWludDMyX3QgZmxpcEJ5dGVzKHVp
bnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDBmZikgPDwgMjQp
CisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZmMDApIDw8IDgpCisgICAgICAgIHwgKCh2YWx1
ZSAmIDB4MDBmZjAwMDApID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDApID4+
IDI0KTsKK30KKworaW5saW5lIHVpbnQ2NF90IGZsaXBCeXRlcyh1aW50NjRfdCB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwMDBmZmxsdSkgPDwgNTYpCisgICAg
ICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwMDAwMDAwZmYwMGxsdSkgPDwgNDApCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4MDAwMDAwMDAwMGZmMDAwMGxsdSkgPDwgMjQpCisgICAgICAgIHwgKCh2YWx1
ZSAmIDB4MDAwMDAwMDBmZjAwMDAwMGxsdSkgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgw
MDAwMDBmZjAwMDAwMDAwbGx1KSA+PiA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAw
MDAwMDAwMDBsbHUpID4+IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwMDAwMDAw
MDBsbHUpID4+IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweGZmMDAwMDAwMDAwMDAwMDBsbHUp
ID4+IDU2KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsaXBCeXRlcyhU
IHZhbHVlKQoreworICAgIGlmIChzaXplb2YodmFsdWUpID09IDEpCisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICBpZiAoc2l6ZW9mKHZhbHVlKSA9PSAyKSB7CisgICAgICAgIHVuaW9uIHsKKyAg
ICAgICAgICAgIFQgb3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MTZfdCB3b3JkOworICAgICAg
ICB9IHU7CisgICAgICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxp
cEJ5dGVzKHUud29yZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBp
ZiAoc2l6ZW9mKHZhbHVlKSA9PSA0KSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQg
b3JpZ2luYWw7CisgICAgICAgICAgICB1aW50MzJfdCB3b3JkOworICAgICAgICB9IHU7CisgICAg
ICAgIHUub3JpZ2luYWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29y
ZCk7CisgICAgICAgIHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBpZiAoc2l6ZW9mKHZh
bHVlKSA9PSA4KSB7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWw7Cisg
ICAgICAgICAgICB1aW50NjRfdCB3b3JkOworICAgICAgICB9IHU7CisgICAgICAgIHUub3JpZ2lu
YWwgPSB2YWx1ZTsKKyAgICAgICAgdS53b3JkID0gZmxpcEJ5dGVzKHUud29yZCk7CisgICAgICAg
IHJldHVybiB1Lm9yaWdpbmFsOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBUKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUg
VCBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbikKK3sK
KyAgICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAg
ICAgICAgcmV0dXJuIGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVu
ZGlhbjsKK3VzaW5nIFdURjo6ZmxpcEJ5dGVzOwordXNpbmcgV1RGOjpmbGlwQnl0ZXNJZkxpdHRs
ZUVuZGlhbjsKKworI2VuZGlmIC8vIEZsaXBCeXRlc19oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE1NDA2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3NCBAQAorMjAxMy0wOC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUeXBlZCBhcnJheXMgYXJl
IG5vdyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0Q29yZSwgYW5kIFdlYkNvcmUgaXMgbWVyZWx5
IGEKKyAgICAgICAgY2xpZW50IG9mIHRoZW0uIFRoZXJlIGlzIG9ubHkgb25lIGxheWVyaW5nIHZp
b2xhdGlvbjogV2ViQ29yZSBpbnN0YWxscyBhCisgICAgICAgIFdlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlciBvbiBWTSwgd2hpY2ggbWFrZXMgdGhlCisgICAgICAgIEFycmF5QnVmZmVyPC0+SlNB
cnJheUJ1ZmZlciByZWxhdGlvbnNoaXAgcmVzZW1ibGUgRE9NIHdyYXBwZXJzLiBCeSBkZWZhdWx0
LAorICAgICAgICBKU0MgbWFrZXMgdGhlIG93bmVyc2hpcCBnbyBvbmUgd2F5OyB0aGUgSlNBcnJh
eUJ1ZmZlciBrZWVwcyB0aGUgQXJyYXlCdWZmZXIKKyAgICAgICAgYWxpdmUgYnV0IGlmIEFycmF5
QnVmZmVyIGlzIGtlcHQgYWxpdmUgZnJvbSBuYXRpdmUgY29kZSB0aGVuIHRoZQorICAgICAgICBK
U0FycmF5QnlmZmVyIG1heSBkaWUuIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlciB3aWxsIGtl
ZXAgdGhlCisgICAgICAgIEpTQXJyYXlCdWZmZXIgYWxpdmUgaWYgdGhlIEFycmF5QnVmZmVyIGlz
IGluIHRoZSBvcGFxdWUgcm9vdCBzZXQuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIG5vbi1K
U0RPTVdyYXBwZXJzIGJlaGF2ZSBsaWtlIERPTSB3cmFwcGVycywgYSBidW5jaCBvZiBjb2RlIGlz
CisgICAgICAgIGNoYW5nZWQgdG8gbWFrZSBtb3N0IHJlZmVyZW5jZXMgdG8gd3JhcHBlcnMgcmVm
ZXIgdG8gSlNPYmplY3QqIHJhdGhlciB0aGFuCisgICAgICAgIEpTRE9NV3JhcHBlciouCisgICAg
ICAgIAorICAgICAgICBBcnJheSBidWZmZXIgdmlld3MgYXJlIG5vdyB0cmFuc2llbnQ7IHRoZSBK
UyBhcnJheSBidWZmZXIgdmlldyB3cmFwcGVycworICAgICAgICBkb24ndCBvd24gdGhlbSBvciBr
ZWVwIHRoZW0gYWxpdmUuIFRoaXMgcmVxdWlyZWQgYSBidW5jaCBvZiBjaGFuZ2VzIHRvIG1ha2UK
KyAgICAgICAgYmluZGluZ3MgY29kZSB1c2UgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdG8gaG9s
ZCBvbnRvIHRoZWlyIHZpZXdzLgorICAgICAgICAKKyAgICAgICAgQWxzbyB0aGVyZSBpcyBhIGJ1
bmNoIG9mIG5ldyBjb2RlIHRvIG1ha2UgSlNDLXByb3ZpZGVkIGFycmF5IGJ1ZmZlcnMgYW5kCisg
ICAgICAgIHZpZXdzIG9iZXkgdGhlIHRvSlMvdG88Q2xhc3NOYW1lPiBpZGlvbSBmb3Igd3JhcHBp
bmcgYW5kIHVud3JhcHBpbmcuCisgICAgICAgIAorICAgICAgICBGaW5hbGx5LCB0aGUgRGF0YVZp
ZXcgQVBJIGlzIG5vdyBjb21wbGV0ZWx5IGRpZmZlcmVudDogdGhlIEpTRGF0YVZpZXcKKyAgICAg
ICAgcHJvdmlkZXMgdGhlIHNhbWUgdXNlci12aXNpYmxlIEpTIEFQSSBidXQgdXNpbmcgaXRzIG93
biBpbnRlcm5hbCBtYWdpYzsgdGhlCisgICAgICAgIEMrKyBjb2RlIHRoYXQgdXNlcyBEYXRhVmll
dyBub3cgdXNlcyBhIHJhdGhlciBkaWZmZXJlbnQgQVBJIHRoYXQgaXMgbm90CisgICAgICAgIGF3
YXJlIG9mIHVzdWFsIERPTSBzZW1hbnRpY3MsIHNpbmNlIGl0J3MgaW4gSlNDIGFuZCBub3QgV2Vi
Q29yZS4gSXQncworICAgICAgICBlcXVhbGx5IHVzZWZ1bCBmb3IgYWxsIG9mIFdlYkNvcmUncyBw
dXJwb3NlcywgYnV0IHNvbWUgY29kZSBoYWQgdG8gY2hhbmdlCisgICAgICAgIHRvIGFkYXB0IHRo
ZSBuZXcgY29udmVudGlvbnMuCisgICAgICAgIAorICAgICAgICBTb21lIHRlc3RzIGhhdmUgYmVl
biBjaGFuZ2VkIG9yIHJlYmFzZWQgZHVlIHRvIGNoYW5nZXMgaW4gYmVoYXZpb3IsIHRoYXQKKyAg
ICAgICAgYnJpbmcgdXMgaW50byBjb25mb3JtYW5jZSB3aXRoIHdoZXJlIHRoZSBzdGFuZGFyZHMg
YXJlIGdvaW5nIGFuZCBhbGxvdyB1cyB0bworICAgICAgICBtYXRjaCBGaXJlZm94IGJlaGF2aW9y
LgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgYW5kIHNvbWUgYWRkaXRpb25hbCBHVEsgY2hhbmdl
cyBjb3VydGVzeSBvZgorICAgICAgICBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2FsaWEuY29t
Pi4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAg
ICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDog
QWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5SW5s
aW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVk
QXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogTW9kdWxlcy93ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmg6CisgICAgICAgICogV2ViQ29y
ZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q1NTVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlw
dG86OmdldFJhbmRvbVZhbHVlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lQ2FjaGVkV3JhcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9BcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1VpbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50OENs
YW1wZWRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQxNkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OnRvVWludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDMyQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9EYXRhVmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVy
QXJyYXlCdWZmZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp3cmFwcGVyT3duZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEZv
ckFsbFBhcmVudHMpOgorICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOgorICAgICAgICAoU2tpcElu
Y2x1ZGVIZWFkZXIpOgorICAgICAgICAoSXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChJc1dy
YXBwZXJUeXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAoSlNW
YWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9y
SGVscGVyTWV0aG9kcyk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBmaWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICog
aHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0Zsb2F0MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQ2
NEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9VaW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
VWludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhDbGFt
cGVkQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBwYWdlL0NyeXB0by5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRyYWN0
S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKiB0ZXN0aW5nL01v
Y2tDRE0uY3BwOgorCiAyMDEzLTA4LTE0ICBSb2IgQnVpcyAgPHJ3bGJ1aXNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBc3NlcnRpb24gZmFpbHVyZSBpbiBSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9y
Qm94U2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00OTksMzEgKzQ5
OSwxOSBAQCBzZXQoV2ViQ29yZV9JRExfRklMRVMKICAgICBodG1sL1ZhbGlkaXR5U3RhdGUuaWRs
CiAgICAgaHRtbC9Wb2lkQ2FsbGJhY2suaWRsCiAKLSAgICBodG1sL2NhbnZhcy9BcnJheUJ1ZmZl
ci5pZGwKLSAgICBodG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCiAgICAgaHRtbC9jYW52
YXMvQ2FudmFzR3JhZGllbnQuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwKICAgICBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5pZGwKLSAgICBodG1sL2NhbnZhcy9EYXRhVmlldy5pZGwKICAgICBodG1sL2NhbnZhcy9E
T01QYXRoLmlkbAogICAgIGh0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmlkbAogICAgIGh0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwKLSAgICBodG1sL2NhbnZhcy9G
bG9hdDMyQXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAotICAgIGh0
bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwK
LSAgICBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCiAgICAgaHRtbC9jYW52YXMvT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRsCiAg
ICAgaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9P
RVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhV
aW50LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFz
L1VpbnQzMkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCi0gICAgaHRt
bC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3Rp
dmVJbmZvLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbAogICAgIGh0bWwvY2Fu
dmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM4MiwzMSArMzgyLDE5IEBAIEJJTkRJTkdf
SURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVGltZVJhbmdlcy5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL1ZvaWRD
YWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwgXAogICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaWRsIFwKICAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0NhbnZhc1Byb3h5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9ET01QYXRoLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbCBcCi0gICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvSW50MTZBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50MzJBcnJh
eS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRsIFwKICAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9VaW50MTZBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWlu
dDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRs
IFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmlkbCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCw2IEBAIHdlYmNv
cmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JQ
cm90b2NvbFZlcnNpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Fic3RyYWN0V29y
a2VyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Fic3RyYWN0V29ya2VyLmggXAot
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlci5jcHAgXAotCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlci5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
QXJyYXlCdWZmZXJWaWV3LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVm
ZmVyVmlldy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXR0ci5jcHAgXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNBdHRyLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNB
dWRpb0J1ZmZlci5jcHAgXApAQCAtMTU2LDggKzE1Miw2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNl
cyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RhdGFUcmFuc2Zlckl0ZW0uaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmNwcCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmggXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNEYXRhVmlldy5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNEYXRhVmlldy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RlbGF5Tm9kZS5j
cHAgXApAQCAtMjg4LDEwICsyODIsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyQ2FsbGJhY2suaCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0ZpbGVXcml0ZXJTeW5jLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0ZpbGVXcml0ZXJTeW5jLmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGbG9h
dDMyQXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmxvYXQzMkFycmF5Lmgg
XAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGbG9hdDY0QXJyYXkuY3BwIFwKLQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTRmxvYXQ2NEFycmF5LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNGb2N1c0V2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvY3VzRXZl
bnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRMb2FkZXIuY3BwIFwKQEAgLTQ4
OSwxMiArNDc5LDYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJ
bnQxNkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDE2QXJyYXkuaCBc
Ci0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDMyQXJyYXkuY3BwIFwKLQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTSW50MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
SW50OEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDhBcnJheS5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHAgXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTY3JpcHRQcm9jZXNzb3JOb2RlLmggXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBcCkBAIC03NTksMTQgKzc0
Myw2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1RyZWVXYWxrZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VJRXZlbnQuY3Bw
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVUlFdmVudC5oIFwKLQlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTVWludDE2QXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
VWludDE2QXJyYXkuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQzMkFycmF5LmNw
cCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQzMkFycmF5LmggXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNVaW50OEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1VpbnQ4QXJyYXkuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQ4Q2xhbXBl
ZEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWYWxpZGl0eVN0YXRlLmNwcCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1ZhbGlkaXR5U3RhdGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU1ZvaWRDYWxsYmFjay5jcHAgXApAQCAtMTU0MywzMSArMTUxOSwxOSBAQCBkb21f
YmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL2h0bWwvVGltZVJhbmdlcy5pZGwgXAogCSQo
V2ViQ29yZSkvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL1ZvaWRD
YWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsIFwK
LQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwgXAogCSQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1By
b3h5LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbCBcCiAJJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9ET01QYXRoLmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRE
cmF3QnVmZmVycy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXku
aWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwgXAotCSQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvSW50MzJBcnJheS5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50OEFycmF5Lmlk
bCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCBc
CiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRsIFwKIAkkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaWRsIFwKIAkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2Nh
bnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9V
aW50MTZBcnJheS5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRs
IFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2Nh
bnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDLmlkbCBcCkBAIC0yMzM0LDkgKzIyOTgsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9CdWZmZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwIFwKQEAgLTIzODgsNyArMjM1MCw2IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dTaGVsbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuaCBcCi0JU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Q3VzdG9tLmNwcCBcCkBAIC0yNTQxLDYgKzI1MDIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmggXAorCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgXApAQCAtMzMxOSw4ICszMjgyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuaCBcCi0JU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9ET01QYXRoLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRVhURHJhd0J1ZmZlcnMuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEyICsyOSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuY3BwCiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAg
ICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCi0gICAgYmluZGluZ3MvanMvSlNBcnJheUJ1
ZmZlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0Jsb2JD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNDREFUQVNlY3Rpb25DdXN0b20uY3BwCi0gICAg
YmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0NTU0Zv
bnRGYWNlUnVsZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0NTU0ltcG9ydFJ1bGVDdXN0
b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNDU1NNZWRpYVJ1bGVDdXN0b20uY3BwCkBAIC0xNTAs
NiArMTQ4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMv
U2NyaXB0U3RhdGUuY3BwCiAgICAgYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCiAgICAgYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorICAgIGJpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKIAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNw
cAogICAgIGJyaWRnZS9OUF9qc29iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw2IEBAIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBL
TlNfNVJhbmdlRVAKIF9fWk43V2ViQ29yZTEyZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3b3JrU3Rv
cmFnZVNlc3Npb25FUktOU180S1VSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyZ2ND
b250cm9sbGVyRXYKIF9fWk43V2ViQ29yZTEyaWNvbkRhdGFiYXNlRXYKLV9fWk43V2ViQ29yZTEy
dG9VaW50OEFycmF5RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUx
MHJvb3RPYmplY3RFdgogX19aTjdXZWJDb3JlMTNBWE9iamVjdENhY2hlMThyb290T2JqZWN0Rm9y
RnJhbWVFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTIxZ0FjY2Vzc2li
aWxpdHlFbmFibGVkRQpAQCAtMjg4LDcgKzI4Nyw2IEBAIF9fWk43V2ViQ29yZTEzY3JlYXRlV3Jh
cHBlckVQTjNKU0M5RXhlY1MKIF9fWk43V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTEzbGlzdERpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0VTM18KIF9f
Wk43V2ViQ29yZTEzcG9pbnRlckN1cnNvckV2Ci1fX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZmZXJF
TjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNz
b2NpYXRlZEVsZW1lbnRFCiBfX1pON1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1
ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNo
ZWRSZXNvdXJjZUNsaWVudEUKQEAgLTkwNyw3ICs5MDUsNiBAQCBfX1pON1dlYkNvcmU0UGF0aEMx
RXYKIF9fWk43V2ViQ29yZTRQYXRoRDFFdgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90
ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29yZTRjb3JlRVAyOE5TVVJMQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UKLV9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9i
YWxPYmplY3RFUE5TMF8xMUFycmF5QnVmZmVyRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBDbGllbnRSZWN0RQogX19aTjdX
ZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNf
MTNET01TdHJpbmdMaXN0RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNf
MTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTRDbGllbnRSZWN0TGlzdEUKQEAgLTI3NDMsNyArMjc0
MCw2IEBAIF9fWk43V2ViQ29yZTE2SFRNTE1lZGlhRWxlbWVudDE2cmV0dXJuVG8KIF9fWk5LN1dl
YkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxMmlzRnVsbHNjcmVlbkV2CiBfX1pON1dlYkNvcmUxMFRp
bWVSYW5nZXMzYWRkRWRkCiBfX1pON1dlYkNvcmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVl
RQotX19aTjdXZWJDb3JlMTR0b0Zsb2F0MzJBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJD
b3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBU
aW1lUmFuZ2VzRQogX19aTks3V2ViQ29yZTEwVGltZVJhbmdlczduZWFyZXN0RWQKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
RGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZu
ZGVmIFdlYkNvcmVfRldEX0RhdGFWaWV3X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRGF0YVZpZXdf
aAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBA
QAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgV2ViQ29yZV9G
V0RfSlNBcnJheUJ1ZmZlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZl
ci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0Rf
SlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmll
d19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pTRGF0YVZpZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZX
RF9KU0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0RhdGFWaWV3Lmg+Cisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNU
eXBlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU1R5cGVkQXJyYXlzX2gKKyNk
ZWZpbmUgV2ViQ29yZV9GV0RfSlNUeXBlZEFycmF5c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNUeXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBX
ZWJDb3JlX0ZXRF9UeXBlZEFycmF5Q29udHJvbGxlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBA
CisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlJbmxpbmVzc19oCisjZGVmaW5lIFdlYkNv
cmVfRldEX1R5cGVkQXJyYXlJbmxpbmVzc19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlw
ZWRBcnJheUlubGluZXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVk
QXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDEyIEBACiAjZGVmaW5lIFJlYWx0aW1l
QW5hbHlzZXJfaAogCiAjaW5jbHVkZSAiQXVkaW9BcnJheS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
RmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgRmxvYXQzMkFycmF5Owot
Y2xhc3MgVWludDhBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRp
b0J1czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvagkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc0MjgsNiArMTc0MjgsMjAg
QEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xq
c1xXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzIn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJv
fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
Ij4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQyLDYgKzI0Miw4IEBACiAJCTBDNDUzNDI3
MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEM0NTM0MjgxMENE
QkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAv
KiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi87IH07CiAJCTBGMDkwODdGMTQ0NEZEQjIwMDAy
ODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU3MTQxNTE0MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhl
bWUuY3BwICovOyB9OworCQkwRjA5OUQwODE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwICovOyB9OworCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRF
MEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi87IH07CiAJCTBGMTMx
NjNFMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0
IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi87IH07CiAJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0Mw
NCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVyc01hYy5tbSAqLzsgfTsKQEAgLTgyOCwxMSArODMwLDYgQEAKIAkJMkU3NTg0MUYxMjc3
OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAv
KiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3
Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkU5NEY0MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5j
cHAgKi87IH07CiAJCTJFOTRGNDNDMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5
MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLzsgfTsKLQkJMkU5N0NDRUExMjkzOUNC
ODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAg
Ki87IH07Ci0JCTJFOTdDQ0VCMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NDRTgxMjkzOUNCODAw
QzVDOEZGIC8qIERhdGFWaWV3LmggKi87IH07Ci0JCTJFOTdDQ0Y3MTI5M0E0M0EwMEM1QzhGRiAv
KiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9t
LmNwcCAqLzsgfTsKLQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkQx
MjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OwotCQkyRTk3Q0U3MDEyOTNB
RDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
aCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICov
OyB9OwogCQkyRUI0QkNEMjEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0Qw
MTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OwogCQkyRUI0
QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4
ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi87IH07CkBAIC0xMjg4LDggKzEyODUsNiBAQAog
CQk0OUIzNzYwRDE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFE
IC8qIEFycmF5VmFsdWUuaCAqLzsgfTsKIAkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovOyB9
OwogCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLzsgfTsKLQkJNDlDN0I5OTUxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAg
Ki87IH07Ci0JCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODMxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi87IH07CiAJCTQ5QzdCOTk3MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgKi87IH07CiAJCTQ5QzdCOTk4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCAq
LzsgfTsKIAkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg4MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi87IH07CkBAIC0xMzUwLDIyICsx
MzQ1LDYgQEAKIAkJNDlFQ0VCNkUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjQx
NDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25z
LmNwcCAqLzsgfTsKIAkJNDlFQ0VCNzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNF
QjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIu
Y3BwICovOyB9OwotCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgfTsKLQkJNDlFRUNGMDIxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zs
b2F0MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjAzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IH07Ci0J
CTQ5RUVDRjA0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjYxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLzsg
fTsKLQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGODEwNTA3MEM0
MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDcxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5o
ICovOyB9OwotCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZBMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwOTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
NDlFRUNGMEExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkMxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAq
LzsgfTsKLQkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkUxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwRDEwNTA3
MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2
QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi87IH07
Ci0JCTQ5RUVDRjFDMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGMUExMDUwNzJG
MzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlFRUQxNDIxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKIAkJNDlFRUQxNDMxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oICovOyB9OwogCQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcCAqLzsgfTsKQEAgLTE4MjcsOCArMTgwNiw2IEBACiAJCTZFNjdEMkE2
MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3
IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25z
M0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2
N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovOyB9OwotCQk2RUJDNUVB
RjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8q
IEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsKLQkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8q
IEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsg
fTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5
MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCAqLzsgfTsKIAkJNkVCRjBFNDkxMkE4
OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDYxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1Rl
eHR1cmVGbG9hdC5oICovOyB9OwogCQk2RUJGMEU1NDEyQTg5Mjk4MDBEQjE3MDkgLyogV2ViR0xF
eHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVCRjBFNTIxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmNwcCAqLzsgfTsK
QEAgLTI1ODksNyArMjU2Niw2IEBACiAJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01L
ZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi87
IH07CiAJCTg2MUMyRUE0MTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYxQzJFQTMx
M0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50TG9hZFRpbWluZy5jcHAgKi87IH07CiAJCTg2MUMy
RUE2MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYxQzJFQTUxM0ZCNEZGRjAwMDYy
QUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgKi87IH07Ci0JCTg2MjQzRDAxMTFCQzMxRjcw
MENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpT
QXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi87IH07CiAJCTg2NTEyRURFMTU0QTJBRUYwMEE5MDQy
NiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLzsgfTsKIAkJODY1MTJFREYxNTRBMkFFRjAwQTkw
NDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTEyRURDMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmggKi87IH07CiAJCTg2QkE3NjZFMTY2NDI3QTgwMDVCRTVE
MSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2QkE3NjZEMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1
ZXN0LmNwcCAqLzsgfTsKQEAgLTI3MDMsOCArMjY3OSw2IEBACiAJCTkwMDE3NzQxMTJFMDM0Nzgw
MDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwogCQk5MDAxNzg4MDEyRTAzNzA3MDA2NDg0NjIg
LyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3ODdFMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0
YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovOyB9OwogCQk5MDAxNzg4MTEyRTAzNzA3MDA2NDg0NjIg
LyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFu
ZGFyZERlcml2YXRpdmVzLmggKi87IH07Ci0JCTkxMDg5RDMyMTRDMzM2MDAwMDVBRkM0OSAvKiBK
U1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJh
eS5oICovOyB9OwotCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRB
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi87IH07
CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdF
RTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAv
KiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NjU1LDcgKzQ2MjksNiBAQAog
CQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NEIyRTE0
MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggKi87IH07CiAJCUJD
Mjc0QjMxMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzRCMzAxNDBF
QkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgKi87IH07CiAJCUJD
Mjc1Qjc5MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1Qjc4MTFDNUQxQzMw
MEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLzsgfTsKLQkJQkMyNzVDQjMxMUM1
RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8q
IEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovOyB9OwogCQlCQzI5OTM1RDE3QTFERDU4MDBCQ0U4
ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMyOTkzNUMxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBl
LmNwcCAqLzsgfTsKIAkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggKi87IH07CiAJ
CUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkNCRjdBMTQwRjFE
NTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCAqLzsgfTsKQEAgLTY0ODAsNiAr
NjQ1Myw4IEBACiAJCTBDM0YxRjU5MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
OyBwYXRoID0gY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEM0NTM0MjUxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3Jt
TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJH
TFVuaWZvcm1Mb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUz
NDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEx
QTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNBRmls
dGVycy5oOyBwYXRoID0gY2EvUGxhdGZvcm1DQUZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxMzE2M0YxNkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJz
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1D
QUZpbHRlcnNNYWMubW07IHBhdGggPSBjYS9tYWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTM0LDEyICs3MTA5LDYgQEAKIAkJMkU3NTg0
MUMxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBwYXRoID0g
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaWxlUmVhZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmls
ZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpbGVSZWFkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRTcxMjkzOUNCODAwQzVDOEZG
IC8qIERhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERh
dGFWaWV3LmNwcDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhVmlldy5oOyBwYXRoID0gY2FudmFzL0Rh
dGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U5MTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGF0YVZpZXcu
aWRsOyBwYXRoID0gY2FudmFzL0RhdGFWaWV3LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkU5N0NDRjYxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlld0N1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAv
KiBKU0RhdGFWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0U2RTEyOTNB
RDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0RhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQTc2ODAz
MEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50Lmg7IHBhdGgg
PSB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhh
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQjRCQ0QxMTIxRjAzRTMw
MEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03NjU0LDggKzc2MjMsNiBAQAogCQk0OUIzNzYwQjE1QzZDNjg0MDA1OTEzMUQgLyogQXJy
YXlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheVZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViR0xCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4
MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkdMQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDhBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEZyYW1lYnVmZmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJv
Z3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUHJv
Z3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjY5LDcgKzc2MzYsNiBA
QAogCQk0OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xCdWZmZXIuY3BwOyBwYXRoID0gY2Fu
dmFzL1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5
QTkxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkdMQnVmZmVyLmg7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUExMDQyRDMyRTAwMDlENDQ3IC8q
IFdlYkdMQnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTEJ1ZmZlci5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFycmF5LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJbnQ4QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0ludDhBcnJheS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAv
KiBXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkdMRnJhbWVidWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0
NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJHTEZyYW1lYnVmZmVyLmg7IHBhdGggPSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCMDEwNDJEMzJFMDAwOUQ0NDcgLyog
V2ViR0xGcmFtZWJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xGcmFtZWJ1
ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC03NzI1LDMwICs3NjkxLDYgQEAKIAkJNDlFQ0VCNjQxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb24uaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuY3BwOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFQ0VCNjYxNDk5NzkwRDAw
Q0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRmlsdGVyT3BlcmF0aW9ucy5oOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZB
QiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEFycmF5QnVm
ZmVyVmlldy5pZGw7IHBhdGggPSBjYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0MxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVm
ZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBBcnJheUJ1ZmZlci5pZGw7IHBhdGggPSBj
YW52YXMvQXJyYXlCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0RDRjEwNTAzQzIzMDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBGbG9hdDMyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0Zsb2F0MzJBcnJheS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAv
KiBJbnQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQzMkFycmF5LmlkbDsg
cGF0aCA9IGNhbnZhcy9JbnQzMkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIEludDE2QXJyYXkuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IEludDE2QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0ludDE2QXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REODEwNTAzQzIzMDAwOTlGQUIg
LyogVWludDhBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDhBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvVWludDhBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gVWludDMyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQzMkFycmF5
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREUxMDUwM0MyNDAwMDk5
RkFCIC8qIFVpbnQxNkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50MTZBcnJh
eS5pZGw7IHBhdGggPSBjYW52YXMvVWludDE2QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJh
eUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNDEwNTA3MEM0
MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDMyQXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlG
QUIgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGODEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSW50MTZBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVaW50OEFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkMxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNVaW50MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVaW50MTZBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWlu
dDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGMTkxMDUwNzJG
MzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNDMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0Ux
MDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyMzgsOSArODE4MCw2IEBACiAJ
CTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
eHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0Qy
QTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDY0QXJy
YXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUJDNUVBRDEzOEI1MEYyMDBB
MENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9h
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPRVNUZXh0dXJlRmxv
YXQuY3BwOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ2MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxv
YXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0Lmg7
IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFQkYwRTQ3MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5pZGw7IHBhdGggPSBjYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Nzgs
NyArODkxNyw2IEBACiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2
ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUtleWJv
YXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MUMyRUEzMTNGQjRG
REQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODYxQzJFQTUxM0ZCNEZGRjAwMDYyQUJCIC8qIFJlc291cmNlTG9hZFRp
bWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxv
YWRUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NjI0M0QwMDExQkMz
MUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREIxNTRBMkFFRTAwQTkwNDI2IC8qIFBlcmZvcm1hbmNl
UmVzb3VyY2VUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2NTEyRURDMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5n
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREQxNTRBMkFFRjAw
QTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTExMyw5ICs5MDUxLDYgQEAKIAkJOTAwMTc3M0YxMkUwMzQ3ODAwNjQ4NDYy
IC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBwYXRoID0gY2FudmFzL09FU1N0YW5kYXJkRGVyaXZh
dGl2ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RTEyRTAzNzA3
MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMDE3ODdGMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkg
LyogSlNVaW50OENsYW1wZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1VpbnQ4Q2xhbXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkx
QTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWlu
dDhDbGFtcGVkQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8q
IFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdl
R3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJD
MDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYx
QjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMzQyLDcgKzExMjc3LDYg
QEAKIAkJQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzRCMzAxNDBFQkVEODAw
RUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI3NUI3ODExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJL
aXRQb2ludEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYktpdFBvaW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMy
NzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBD
b2xvcklucHV0VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
b2xvcklucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjRC
MTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMyQ0JGN0ExNDBGMUQ1ODAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0
RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENv
bnRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDAyNSw4ICsx
Mzk1OSw2IEBACiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTQ5RUVDRENDMTA1MDNDMjMw
MDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8sCi0JCQkJNDlFRUNEQzkxMDUwM0MyMzAwMDk5
RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwgKi8sCiAJCQkJNkU0RTkxQTcxMEY3RkIzMTAwQTI3
NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLywKIAkJCQk2RTRFOTFBODEwRjdG
QjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCAqLywKIAkJCQk0OTQ4NEZC
MzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwICovLApAQCAtMTQwNDcsOSAr
MTM5NzksNiBAQAogCQkJCTQ5NDg0RkJFMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNTdHlsZS5jcHAgKi8sCiAJCQkJNDk0ODRGQzAxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0
eWxlLmggKi8sCi0JCQkJMkU5N0NDRTcxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCAq
LywKLQkJCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCAqLywKLQkJCQky
RTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICovLAogCQkJCUZCOTEzOTIw
MTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi8sCiAJCQkJRkI5MTM5MjExNkFFNEIwQjAw
MUZFNjgyIC8qIERPTVBhdGguaWRsICovLAogCQkJCUEwMjQ1NzRFMTZDRUFBMjcwMDBFNTY3MSAv
KiBFWFREcmF3QnVmZmVycy5jcHAgKi8sCkBAIC0xNDA1OCwxMSArMTM5ODcsNiBAQAogCQkJCTc3
Mjg2OTRCMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3Bw
ICovLAogCQkJCTc3Mjg2OTRDMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCAqLywKIAkJCQk3NzI4Njk0RDE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmlkbCAqLywKLQkJCQk0OUVFQ0RDRjEwNTAzQzIzMDAwOTlGQUIg
LyogRmxvYXQzMkFycmF5LmlkbCAqLywKLQkJCQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyog
RmxvYXQ2NEFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0RENTEwNTAzQzIzMDAwOTlGQUIgLyogSW50
MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDIxMDUwM0MyMzAwMDk5RkFCIC8qIEludDMyQXJy
YXkuaWRsICovLAotCQkJCTQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0NyAvKiBJbnQ4QXJyYXkuaWRs
ICovLAogCQkJCTdFNUQ3QTczMTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50
LmNwcCAqLywKIAkJCQk3RTVEN0E3NDE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4
VWludC5oICovLAogCQkJCTkwMDE3NzNEMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmNwcCAqLywKQEAgLTE0MDc3LDEwICsxNDAwMSw2IEBACiAJCQkJNzdBMTdBNkUx
MkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmNwcCAqLywKIAkJCQk3N0Ex
N0E2RjEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmplY3QuaCAqLywKIAkJCQk3
N0ExN0E3MDEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsICovLAot
CQkJCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8sCi0JCQkJ
NDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUVF
Q0REODEwNTAzQzIzMDAwOTlGQUIgLyogVWludDhBcnJheS5pZGwgKi8sCi0JCQkJOTFBMzkwNTgx
NEMwRjRCOTAwRjY3OTAxIC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmlkbCAqLywKIAkJCQlBN0QyMEY2
QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZvLmggKi8sCiAJCQkJQTdEMjBGM0Ix
MDdGMzczODAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5pZGwgKi8sCiAJCQkJNDlDN0I5QTgx
MDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAqLywKQEAgLTE2NjQ1LDEwICsxNjU2
NSw2IEBACiAJCUE4M0I3OTA4MENDQUZGMkIwMDBCMDgyNSAvKiBIVE1MICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVFQ0VGMjEwNTA3MEM0MDAwOTlG
QUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCi0JCQkJNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKLQkJCQk0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyog
SlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAotCQkJCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAv
KiBKU0FycmF5QnVmZmVyVmlldy5oICovLAogCQkJCUJFOEVGMDNFMTcxQzhGRjkwMDlCNDhDMyAv
KiBKU0F1ZGlvVHJhY2suY3BwICovLAogCQkJCUJFOEVGMDNGMTcxQzhGRjkwMDlCNDhDMyAvKiBK
U0F1ZGlvVHJhY2suaCAqLywKIAkJCQlCRThFRjA0MDE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRp
b1RyYWNrTGlzdC5jcHAgKi8sCkBAIC0xNjY2Miw4ICsxNjU3OCw2IEBACiAJCQkJNDlFRUQxM0Qx
MDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5
RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAg
Ki8sCiAJCQkJNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmggKi8sCi0JCQkJMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcu
Y3BwICovLAotCQkJCTJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggKi8s
CiAJCQkJMkUwODg4RDIxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwICovLAog
CQkJCTJFMDg4OEQzMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmggKi8sCiAJCQkJ
RkI5MTM5MjkxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0aC5jcHAgKi8sCkBAIC0xNjY3OCwx
MCArMTY1OTIsNiBAQAogCQkJCTZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdC
dWZmZXJzLmggKi8sCiAJCQkJNzcyODY5ODExNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywKIAkJCQk3NzI4Njk4MjE0RkQ5QURBMDBGNDg0REMg
LyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAqLywKLQkJCQk0OUVFQ0VGNDEwNTA3
MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUY1MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAotCQkJCTZFQkM1RUFEMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8sCi0JCQkJNkVCQzVFQUUxMzhCNTBGMjAw
QTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJQkM5N0U0MTAxMDkxNTRGQTAwMTBE
MzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uY3BwICovLAogCQkJCUJDOTdFNDExMTA5MTU0RkEw
MDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmggKi8sCiAJCQkJMUE0QTJERUIwQTFCODUy
QTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuY3BwICovLApAQCAtMTY4MzUsMTIgKzE2
NzQ1LDYgQEAKIAkJCQlFNDQ2MTQwRjBDRDY4MjY5MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVt
ZW50LmggKi8sCiAJCQkJQTc3OTc5MjQwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmNw
cCAqLywKIAkJCQlBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCAqLywK
LQkJCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLywKLQkJ
CQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi8sCi0JCQkJNDlF
RUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNF
RjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovLAotCQkJCTQ5QzdCOTgyMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlDN0I5ODMxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi8sCiAJCQkJQ0QyN0Y2RTIxNDU3Njc1ODAwNzgy
MDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmNwcCAqLywKIAkJCQlDRDI3RjZFMzE0NTc2NzU4MDA3
ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIuaCAqLywKIAkJCQlFNDQ2MTQxMDBDRDY4MjY5MDBG
QURBNzUgLyogSlNNZWRpYUVycm9yLmNwcCAqLywKQEAgLTE2ODczLDE0ICsxNjc3Nyw2IEBACiAJ
CQkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovLAogCQkJCTA3
ODQ2MzQwMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuY3BwICovLAogCQkJCTA3ODQ2
MzQxMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQuaCAqLywKLQkJCQk0OUVFQ0VGRTEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkYxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLywKLQkJCQk0OUVFQ0VGQzEwNTA3MEM0
MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkQxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLywKLQkJCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50OEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIg
LyogSlNVaW50OEFycmF5LmggKi8sCi0JCQkJOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpT
VWludDhDbGFtcGVkQXJyYXkuY3BwICovLAotCQkJCTkxMDg5RDMwMTRDMzM1Q0QwMDVBRkM0OSAv
KiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMTVDNzcwOTIxMDBEM0NBODAwNUJBMjY3
IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi8sCiAJCQkJMTVDNzcwOTExMDBEM0NBODAwNUJBMjY3
IC8qIEpTVmFsaWRpdHlTdGF0ZS5oICovLAogCQkJCUJFOEVGMDQ2MTcxQzkwMTQwMDlCNDhDMyAv
KiBKU1ZpZGVvVHJhY2suY3BwICovLApAQCAtMTg3ODAsNiArMTg2NzYsOCBAQAogCQkJCUE3NUU0
OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICovLAogCQkJ
CUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLywK
IAkJCQlCQzUzRDkxMDExNDMxMENDMDAwRDgxN0UgLyogV2ViQ29yZUpTQ2xpZW50RGF0YS5oICov
LAorCQkJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwICovLAorCQkJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKIAkJCQlFMUE2NDNGQzBFQzA5N0EwMDA3Nzk2NjggLyog
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJRTFBNjQzRjEwRUMwOTcyNTAwNzc5
NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlGMzQ3NDJFNjEzNDM2MzUw
MDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwICovLApAQCAtMTg4MzUsOCAr
MTg3MzMsNiBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCQzI3NUNCMjExQzVFODVD
MDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgKi8sCi0JCQkJODYyNDNEMDAxMUJD
MzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi8sCiAJCQkJQkMyRUQ2
QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAgKi8sCiAJCQkJQ0RERTY5MUQx
NzFERjg5MTAwQTQ0RDg5IC8qIEpTQXVkaW9CdWZmZXJDdXN0b20uY3BwICovLAogCQkJCUZERUFB
QUVGMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAg
Ki8sCkBAIC0xODg2Miw3ICsxODc1OCw2IEBACiAJCQkJQUQ3MjZGRUExNkQ5RjQwQjAwM0E0RTZE
IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5oICovLAogCQkJCUUxQUQxNEU3MTI5NzM3
NzQwMEFDQTk4OSAvKiBKU0NTU1N0eWxlUnVsZUN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyMEZCN0Uw
QzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20uY3BwICovLAotCQkJCTJFOTdDQ0Y2
MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLywKIAkJCQk0MTYyQTQ1
MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5j
cHAgKi8sCiAJCQkJMzFGQjFBNkIxMjBBNUQ2OTAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZl
bnRDdXN0b20uY3BwICovLAogCQkJCTU5MEUxQjRBMTFFNEVGNzAwMDY5Rjc4NCAvKiBKU0Rldmlj
ZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwICovLApAQCAtMjEzMjEsNyArMjEyMTYsNiBAQAog
CQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEzMTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVy
SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8qIERh
dGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0NFQjEyOTM5Q0I4
MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NzMyQjBCMTM2QTE2
MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNE
QjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMTgzMCw2ICsyMTcyNCw3IEBACiAJCQkJODkzQzQ4MEYxMjQ4QkQzQTAwMkIzRDg2
IC8qIEZpbGVFbnRyeVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2QzgzMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREYzNjlGMTIyQzk0
QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjA5OUQw
OTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUzQ0Q3MDAwQzc0RjkgLyogRmlsZUljb25Mb2FkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJFMTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyMzksOSArMjIxMzQsNiBAQAogCQkJCTFD
ODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0ExMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlz
ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyog
SlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMUMxMDUwNzJGMzAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjI0M0QwMTEx
QkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzAyLDcgKzIyMTk0LDYgQEAKIAkJCQkxQUU4
MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmll
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUQyMTJC
MDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFGQjFB
NjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjIzNzUsOCArMjIyNjYsNiBAQAogCQkJCTg5ODc4NUIzMTIyQ0EyQTcwMDNBQUJEQSAv
KiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZEQTg0NEUxMjI0
QTA3MTAwNjBEMDA2IC8qIEpTRmlsZVdyaXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODkzQzQ3
QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyN0IxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9j
dXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJEQzAxNkI3RjM4RTAwQ0JBM0ZDIC8q
IEpTRm9udExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQUMxMkIwM0VFMTAwM0E1
ODNBIC8qIEpTR2Fpbk5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0NzcsOSArMjIzNjYsNiBA
QAogCQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0EwRTc2REIxMEJGMDU5ODAwQTAyNzZFIC8qIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcxRjEwQzAwREIxMDBBMDI3NkUgLyogSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA3MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA1
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5
QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRF
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RjQ1NDMwRjdDM0I1RjAwRDdDMUZCIC8qIEpT
TGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI3MjksMTAgKzIyNjE1LDYg
QEAKIAkJCQlFMTdCNDkyMTE2QTlCOEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNzUwRDVEMEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJ
RXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDkxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTEwODlEMzIx
NEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUFBQTRGQUQyMTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNUM3NzA5MzEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCRThFRjA0QjE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRl
b1RyYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzMyLDcgKzI0NjE0LDYgQEAKIAkJCQk5N0JD
NkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0
cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYg
LyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3MzJCMEExMzZBMTYxRDAwNUM4
RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI1MTI1
MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1
NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI1Mzg4LDkgKzI1MjY5LDYgQEAKIAkJCQkxQzgxQkEwOTBFOTczNDgzMDAyNjZF
MDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MThGODgw
NDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGREExNUVDOTEyQjAzRjUwMDAzQTU4M0EgLyogSlNBbmFseXNlck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyNzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJy
YXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMUIxMDUwNzJGMzAw
MDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYz
MURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMy
RUQ2QkMwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGREExNUU5RDEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1NDcwLDggKzI1MzQ4LDYgQEAKIAkJCQkxQUU4MkY4RjBDQUFGQTlEMDAy
MjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTlERDY5QTExOTAy
OUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkyRTk3Q0NGNzEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyog
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYy
QTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVEMTEyQjAzRjk0MDAzQTU4M0EgLyogSlNE
ZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTU0Myw4ICsyNTQxOSw2IEBACiAJCQkJ
ODk4Nzg1RjQxMjJFMUVBQzAwM0FBQkRBIC8qIEpTRmlsZVJlYWRlclN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODk4Nzg1QjIxMjJDQTJBNzAwM0FBQkRBIC8qIEpTRmlsZVN5c3RlbUNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5M0M0N0JCMTIzOEEwQTkwMDJCM0Q4NiAvKiBK
U0ZpbGVXcml0ZXJDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwMjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkVC
QzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUI2RDlEMjdDMTRFQUMwODYwMDkwRDc1RSAvKiBKU0ZvY3VzRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkRBMTVFQUIxMkIwM0VFMTAwM0E1ODNBIC8qIEpTR2Fpbk5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MERBNjMwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTYwMyw2ICsyNTQ3Nyw3IEBACiAJCQkJQTYx
NDhBNzgxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdlbkVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUFFMkFCMjEwQTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExhYmVsRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMzBBMUNFNjNCMDBCNDJCMjUgLyogSlNI
VE1MTGVnZW5kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjA5OUQwODE3Qjk2OEEx
MDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTJBQjI1MEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMSUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMTAwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQUQxMzlCMTI5NUQ5MjYwMEFDQTk4OSAv
KiBKU0hUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjU3LDkg
KzI1NTMyLDYgQEAKIAkJCQlGMzE2Mzk2RTEzMjk0ODc2MDBBNjQ5Q0IgLyogSlNJbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0EwRTc3MUUxMEMwMERCMTAwQTAy
NzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdB
NzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQx
NkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjA0MTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5OTUxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUQxMERD
RkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUM1RkFFRTcwRENGREE2ODAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlENDA5REEyQjQ4MDA5NjMzQTUgLyog
SlNLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU5NDEsMTAgKzI1ODEzLDYg
QEAKIAkJCQkxQTc1MEQ1QzBBOTBERUUxMDAwRkYyMTUgLyogSlNUcmVlV2Fsa2VyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDAwOURBMkI0ODAwOTYzM0E1IC8q
IEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwQzEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwQTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTkxMDg5RDMzMTRDMzM2MDUwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUFBQTRGQUQzMTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJUmVxdWVz
dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAv
KiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkU4RUYwNEExNzFDOTAx
NDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIEpTRE9N
V3JhcHBlcjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiAKLXR5cGVkZWYgSGFzaE1hcDx2b2lk
KiwgSlNDOjpXZWFrPEpTRE9NV3JhcHBlcj4gPiBET01PYmplY3RXcmFwcGVyTWFwOwordHlwZWRl
ZiBIYXNoTWFwPHZvaWQqLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4gPiBET01PYmplY3RXcmFw
cGVyTWFwOwogdHlwZWRlZiBKU0M6OldlYWtHQ01hcDxTdHJpbmdJbXBsKiwgSlNDOjpKU1N0cmlu
ZywgUHRySGFzaDxTdHJpbmdJbXBsKj4gPiBKU1N0cmluZ0NhY2hlOwogCiBjbGFzcyBET01XcmFw
cGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFwcGVyV29ybGQ+IHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5
QnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLQotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwotCi0gICAgaW50
IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDApCi0gICAgICAg
IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7IC8vIE5hTi8raW5mLy1p
bmYgcmV0dXJucyAwLCB0aGlzIGlzIGludGVuZGVkIGJ5IFdlYklETAotICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChsZW5ndGggPj0gMCkKLSAgICAgICAgYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSwgMSk7Ci0g
ICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBl
bm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
c09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBidWZmZXIu
Z2V0KCkpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZl
clZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpT
QXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKLSNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXJf
aAotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlw
ZWRBcnJheUJhc2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hh
ciogdG9vTGFyZ2VTaXplID0gIlNpemUgaXMgdG9vIGxhcmdlIChvciBpcyBuZWdhdGl2ZSkuIjsK
LQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgY29weVR5cGVkQXJyYXlCdWZm
ZXIoQyogdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIHNvdXJjZSwgdW5zaWduZWQgc291cmNlTGVu
Z3RoLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBz
b3VyY2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgQVNTRVJUKHNvdXJjZVR5cGUgIT0g
QXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpOwotCi0gICAgaWYgKHRhcmdldC0+Z2V0VHlw
ZSgpID09IHNvdXJjZVR5cGUpIHsKLSAgICAgICAgaWYgKCF0YXJnZXQtPnNldChzdGF0aWNfY2Fz
dDxDKj4oc291cmNlKSwgb2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0YXJnZXQtPmNoZWNrSW5ib3VuZERh
dGEob2Zmc2V0LCBzb3VyY2VMZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKHNvdXJjZVR5cGUpIHsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDg6
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFy
cmF5QmFzZTxzaWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4OgotICAgIGNhc2UgQXJyYXlC
dWZmZXJWaWV3OjpUeXBlVWludDhDbGFtcGVkOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zm
c2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj4gKj4oc291
cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmll
dzo6VHlwZUludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGlj
X2Nhc3Q8VHlwZWRBcnJheUJhc2U8c2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2Ogot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJh
eUJhc2U8dW5zaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQzMjoKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0
LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPGludD4gKj4o
c291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVy
Vmlldzo6VHlwZVVpbnQzMjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJj
ZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0
YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGludD4gKj4oc291cmNlKS0+aXRlbShp
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0
MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBl
ZEFycmF5QmFzZTxmbG9hdD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0NjQ6Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+
c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxkb3VibGU+ICo+
KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBDLCB0eXBlbmFtZSBUPgotYm9vbCBzZXRXZWJHTEFycmF5V2l0aFR5cGVkQXJyYXlBcmd1bWVu
dChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQyogaW1wbCkKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiBhcnJheSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBcnJheUJ1ZmZlclZp
ZXc6OlZpZXdUeXBlIGFycmF5VHlwZSA9IGFycmF5LT5nZXRUeXBlKCk7Ci0gICAgaWYgKGFycmF5
VHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID09IDIpCi0gICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIo
ZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgw
KSktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIo
ZXhlYyk7Ci0KLSAgICBpZiAoIShjb3B5VHlwZWRBcnJheUJ1ZmZlcjxDLCBUPihpbXBsLCBhcnJh
eS5nZXQoKSwgbGVuZ3RoLCBvZmZzZXQpKSkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UuIikpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1KU0M6OkpTVmFs
dWUgc2V0V2ViR0xBcnJheUhlbHBlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQyogaW1wbCkKLXsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTQzo6
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0K
LSAgICBpZiAoc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYywg
aW1wbCkpCi0gICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdMPD5BcnJheSBhcnJheSwgW09wdGlv
bmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAg
ICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5jZTxsb25nPiBhcnJheSwgW09wdGlvbmFsXSBpbiB1
bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0gSlND
Ojphc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldCA9
IDA7Ci0gICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMikKLSAgICAgICAgICAg
IG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIHVpbnQz
Ml90IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmICghaW1wbC0+Y2hlY2tJbmJvdW5kRGF0
YShvZmZzZXQsIGxlbmd0aCkpCi0gICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91dCBvZiByYW5nZS4iKSk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgICAgICBpbXBsLT5zZXQo
aSArIG9mZnNldCwgdi50b051bWJlcihleGVjKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHJldHVy
biBKU0M6OnRocm93VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFyZ3VtZW50Iik7Ci19Ci0KLS8v
IFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlDb25zdHJ1Y3RvcnMuCi0vLyBJZiB0
aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUgdGhyb3duIGEgSmF2YVNjcmlwdCBl
eGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotUGFzc1JlZlB0cjxDPiBj
b25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoVHlwZWRBcnJheUFyZ3VtZW50KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNvdXJjZSA9IHRvQXJy
YXlCdWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHNvdXJjZVR5cGUg
PSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBpZiAoc291cmNlVHlwZSA9PSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVEYXRhVmlldykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1aW50MzJfdCBsZW5n
dGggPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0gICAgUmVmUHRyPEM+IGFycmF5
ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwotICAgIGlmICghYXJyYXkpIHsKLSAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6
ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgaWYgKCEoY29weVR5cGVk
QXJyYXlCdWZmZXI8QywgVD4oYXJyYXkuZ2V0KCksIHNvdXJjZS5nZXQoKSwgbGVuZ3RoLCAwKSkp
IHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xh
cmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFy
cmF5OwotfQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0
b3JzLgotLy8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBh
IEphdmFTY3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBh
c3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5QnVmZmVyQXJndW1l
bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIgPSB0b0FycmF5QnVmZmVyKGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVjKSA6IDA7Ci0g
ICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA+IDIpCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMp
OwotICAgIGVsc2UgewotICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0
KSAlIHNpemVvZihUKSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMg
bm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4iKSk7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSBvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgIH0KLSAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpj
cmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwot
ICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBh
c3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIC8vIFRoZXJlIGFyZSAzIGNvbnN0cnVjdG9yczoKLSAgICAvLwotICAgIC8vICAx
KSAoaW4gaW50IHNpemUpCi0gICAgLy8gIDIpIChpbiBBcnJheUJ1ZmZlciBidWZmZXIsIFtPcHRp
b25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBpbnQgbGVuZ3RoKQot
ICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4pIC0gVGhpcyBlbmRzIHVwIGJlaW5nIGEgSlMgImFy
cmF5LWxpa2UiIG9iamVjdAotICAgIC8vICAgIAotICAgIC8vIEZvciB0aGUgMCBhcmdzIGNhc2Us
IGp1c3QgY3JlYXRlIGEgemVyby1sZW5ndGggdmlldy4gV2UgY291bGQKLSAgICAvLyBjb25zaWRl
ciByYWlzaW5nIGEgU3ludGF4RXJyb3IgZm9yIHRoaXMgY2FzZSwgYnV0IG5vdCBhbGwKLSAgICAv
LyBKYXZhU2NyaXB0IERPTSBiaW5kaW5ncyBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiAibmV3Ci0g
ICAgLy8gPFR5cGU+QXJyYXkoKSIgYW5kIHdoYXQgb2NjdXJzIHdoZW4gYSBwcmV2aW91c2x5LWNv
bnN0cnVjdGVkCi0gICAgLy8gQXJyYXlCdWZmZXJWaWV3IGlzIHJldHVybmVkIHRvIEphdmFTY3Jp
cHQ7IGUuZy4sIGZyb20KLSAgICAvLyAiYXJyYXkuc3Vic2V0KCkiLgotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gQzo6Y3JlYXRlKDApOwotICAgIAot
ICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSkgewotICAgICAgICAvLyBJbnZhbGlk
IGZpcnN0IGFyZ3VtZW50Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkg
ewotICAgICAgICBSZWZQdHI8Qz4gdmlldyA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhB
cnJheUJ1ZmZlckFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAgICAgICBpZiAodmlldykKLSAgICAg
ICAgICAgIHJldHVybiB2aWV3OwotICAgIAotICAgICAgICB2aWV3ID0gY29uc3RydWN0QXJyYXlC
dWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYg
KHZpZXcpCi0gICAgICAgICAgICByZXR1cm4gdmlldzsKLQotICAgICAgICBKU0M6OkpTT2JqZWN0
KiBzcmNBcnJheSA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgdWludDMy
X3QgbGVuZ3RoID0gc3JjQXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIFJlZlB0cjxDPiBhcnJheSA9IEM6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICAgICAgaWYgKCFhcnJheSkgewotICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6
ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU0M6OkpT
VmFsdWUgdiA9IHNyY0FycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICBhcnJheS0+c2V0
KGksIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhcnJheTsK
LSAgICB9Ci0KLSAgICBpbnQgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKLSAgICBSZWZQdHI8Qz4gcmVzdWx0OwotICAgIGlmIChsZW5ndGggPj0gMCkKLSAgICAgICAg
cmVzdWx0ID0gQzo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpKTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBKU1R5cGUsIHR5cGVuYW1lIFdlYkNvcmVUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1
ZSB0b0pTQXJyYXlCdWZmZXJWaWV3KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBXZWJDb3JlVHlwZSogb2JqZWN0KQotewotICAgIGlmICghb2Jq
ZWN0KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLQotICAgIGlmIChKU0RPTVdyYXBw
ZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChvYmplY3QtPmJ5dGVMZW5ndGgoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8SlNUeXBlPihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1
c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEz
IEBACiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCiAKICNpbmNsdWRlICJBdWRpb0J1ZmZlci5o
IgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0F1ZGlvQnVmZmVyLmgi
CiAjaW5jbHVkZSAiSlNBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJKU09mZmxpbmVBdWRpb0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUu
Y3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jp
bmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiRE9NV3JhcHBlcldvcmxkLmNwcCIKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmNwcCIKICNp
bmNsdWRlICJHQ0NvbnRyb2xsZXIuY3BwIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDdXN0b20u
Y3BwIgogI2luY2x1ZGUgIkpTQXR0ckN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNBdWRpb1RyYWNr
Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0F1ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcCIKQEAgLTcw
LDcgKzY5LDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAi
SlNET01XaW5kb3dTaGVsbC5jcHAiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmNwcCIKLSNpbmNs
dWRlICJKU0RhdGFWaWV3Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RldmljZU9yaWVudGF0aW9uRXZlbnRD
dXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0b20uY3BwIgpAQCAtMTcwLDUgKzE2
OCw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuY3BwIgogI2luY2x1ZGUgIlNjcmlwdFN0
YXRlLmNwcCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIgorI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZp
c2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTQgQEAKICNpbmNsdWRlICJCbG9iLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGlj
dGlvbmFyeS5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIldlYktpdEJsb2JCdWls
ZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAg
ICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBl
ciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBydWxlKTsK
KyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBydWxlKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCF2YWx1ZS0+aXNDU1NP
TVNhZmUoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3
cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHZhbHVlKTsKKyAg
ICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCB2YWx1ZSk7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgIkpT
Q3J5cHRvLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtNDEsMTIgKzQxLDEyIEBAIEpT
VmFsdWUgSlNDcnlwdG86OmdldFJhbmRvbVZhbHVlcyhFeGVjU3QKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogCiAg
ICAgSlNWYWx1ZSBidWZmZXIgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBBcnJheUJ1ZmZlclZp
ZXcqIGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcik7CisgICAgUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXco
YnVmZmVyKTsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykKICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgp
LT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LCBlYyk7CisgICAgaW1wbCgpLT5nZXRS
YW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LmdldCgpLCBlYyk7CiAKICAgICBpZiAoZWMpIHsK
ICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTUgKzMxLDIxIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFw
cGFibGUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRv
ci5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMu
aD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9v
a3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRlIDxy
dW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL051bGxQ
dHIuaD4KQEAgLTEyOCw2ICsxMzQsMTYgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAg
cmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1
cmU8V3JhcHBlckNsYXNzPihleGVjLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwogICAgIH0KIAorICAgIGlubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQs
IEpTQzo6QXJyYXlCdWZmZXIqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLT52bSgpLT5tX3R5cGVkQXJyYXlDb250
cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7CisgICAgfQorICAgIAorICAgIGlubGluZSB2
b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVm
ZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiB3b3JsZDsKKyAgICB9CisKICAgICBpbmxpbmUg
SlNET01XcmFwcGVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZv
aWQqKSB7IHJldHVybiAwOyB9CiAgICAgaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQqLCB2b2lkKiwgSlNET01XcmFwcGVyKiwgSlNDOjpXZWFrSGFuZGxl
T3duZXIqLCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICBpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciop
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzksNiArMTU1LDEzIEBAIGNsYXNzIERPTVN0cmluZ0xp
c3Q7CiAgICAgICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsKICAgICB9CiAKKyAgICBp
bmxpbmUgSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOworICAgIH0KKwogICAgIGlubGluZSBib29s
IHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgU2NyaXB0V3Jh
cHBhYmxlKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxl
T3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkKICAgICB7CiAgICAgICAgIGlmICgh
d29ybGQtPmlzTm9ybWFsKCkpCkBAIC0xNDcsNiArMTcwLDE0IEBAIGNsYXNzIERPTVN0cmluZ0xp
c3Q7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIGlubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAo
IXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
b21PYmplY3QtPm1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3
cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKICAgICBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciog
d3JhcHBlcikKICAgICB7CiAgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCkBAIC0xNTUs
MjQgKzE4NiwzMiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0RPTVdy
YXBwZXIqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3Mq
IGRvbU9iamVjdCkKKyAgICBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpT
QXJyYXlCdWZmZXIqIHdyYXBwZXIpCiAgICAgewotICAgICAgICBpZiAoSlNET01XcmFwcGVyKiB3
cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0KSkKKyAgICAg
ICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdv
cmxkLCBET01DbGFzcyogZG9tT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKEpTQzo6SlNPYmpl
Y3QqIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QpKQog
ICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJldHVybiB3b3JsZC0+bV93cmFw
cGVycy5nZXQoZG9tT2JqZWN0KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9N
Q2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBE
T01DbGFzcyogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNh
Y2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBX
cmFwcGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBKU0M6OldlYWtIYW5kbGVPd25l
ciogb3duZXIgPSB3cmFwcGVyT3duZXIod29ybGQsIGRvbU9iamVjdCk7CiAgICAgICAgIHZvaWQq
IGNvbnRleHQgPSB3cmFwcGVyQ29udGV4dCh3b3JsZCwgZG9tT2JqZWN0KTsKICAgICAgICAgaWYg
KHNldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIs
IGNvbnRleHQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0M6OlBhc3NXZWFrPEpT
RE9NV3JhcHBlcj4gcGFzc1dlYWsod3JhcHBlciwgb3duZXIsIGNvbnRleHQpOworICAgICAgICBK
U0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250
ZXh0KTsKICAgICAgICAgd2Vha0FkZCh3b3JsZC0+bV93cmFwcGVycywgKHZvaWQqKWRvbU9iamVj
dCwgcGFzc1dlYWspOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4g
aW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xh
c3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hl
V3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFw
cGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTk1LDcgKzIzNCw3IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgewogICAgICAgICBp
ZiAoIWRvbU9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29y
bGQoZXhlYyksIGRvbU9iamVjdCkpCisgICAgICAgIGlmIChKU0M6OkpTT2JqZWN0KiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvbU9iamVjdCkpCiAgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8V3Jh
cHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QsIGRvbU9iamVjdCk7CiAgICAgfQpAQCAtMzIz
LDYgKzM2MiwyNSBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgIH0KIAorICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciog
YnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlz
dGluZ1dyYXBwZXI8SlNDOjpKU0FycmF5QnVmZmVyPihleGVjLCBidWZmZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYnVmZmVyLT5yZWYoKTsKKyAgICAgICAgSlNDOjpK
U0FycmF5QnVmZmVyKiB3cmFwcGVyID0gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoZXhlYy0+
dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBidWZmZXIpOworICAg
ICAgICBjYWNoZVdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBidWZmZXIsIHdyYXBwZXIpOwor
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAgIHsKKyAgICAgICAgaWYgKCF2aWV3
KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiB2aWV3
LT53cmFwKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiAgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFQ+IHB0cikKICAg
ICB7CkBAIC0zNzYsNiArNDM0LDMyIEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAKICAgICBKU0M6
OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAKKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyVmlldz4gdG9BcnJheUJ1ZmZlclZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSlNDOjpKU0FycmF5QnVmZmVyVmlldyogd3JhcHBlciA9IEpTQzo6anNEeW5h
bWljQ2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odmFsdWUpOworICAgICAgICBpZiAoIXdy
YXBwZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmlt
cGwoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+
IHRvSW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5
cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0
cjxKU0M6OkludDE2QXJyYXk+IHRvSW50MTZBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZhbHVlKTsgfQor
ICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9JbnQzMkFycmF5KEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMy
QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50OEFycmF5
PiB0b1VpbnQ4QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZl
VHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1VpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xh
bXBlZEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDE2
QXJyYXk+IHRvVWludDE2QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
TmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5l
IFBhc3NSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VaW50MzJBcnJheShKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9y
Pih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9G
bG9hdDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVm
UHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odmFs
dWUpOyB9CisgICAgCisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpEYXRhVmlldz4gdG9EYXRh
VmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OkpTRGF0YVZpZXcq
IHdyYXBwZXIgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0RhdGFWaWV3Kj4odmFsdWUpOwor
ICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIHdyYXBwZXItPnR5cGVkSW1wbCgpOworICAgIH0KKwogICAgIHRlbXBsYXRlPGNsYXNzIFQ+
IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKIAogICAgIHRlbXBsYXRlPD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJEYXRhVmlldy5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmll
d0hlbHBlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51bSBEYXRhVmlld0FjY2Vzc1R5cGUg
ewotICAgIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyLAotICAgIEFjY2Vzc0RhdGFWaWV3
TWVtYmVyQXNGbG9hdDY0Ci19OwotCi1KU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBEYXRhVmlldyogb2JqZWN0KQotewotICAgIHJl
dHVybiB3cmFwPEpTRGF0YVZpZXc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNvbnN0
cnVjdEpTRGF0YVZpZXcoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVu
dCgwKS5pc051bGwoKSB8fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBSZWZQdHI8RGF0YVZpZXc+IHZp
ZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudDxEYXRh
VmlldywgY2hhcj4oZXhlYyk7Ci0gICAgaWYgKCF2aWV3LmdldCgpKSB7Ci0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotCi0gICAgSlNEYXRhVmlld0NvbnN0cnVj
dG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcio+KGV4ZWMt
PmNhbGxlZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhl
YywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIHZpZXcuZ2V0KCkpKSk7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlIGdldERhdGFWaWV3TWVtYmVyKEV4ZWNTdGF0ZSogZXhlYywgRGF0YVZpZXcq
IGltcCwgRGF0YVZpZXdBY2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+IDEgJiYgKHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0
MzIgfHwgdHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NCkpIHsKLSAgICAgICAg
bGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgcmVzdWx0OwotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzI6Ci0gICAgY2FzZSBB
Y2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NDogewotICAgICAgICBkb3VibGUgdmFsdWUgPSAo
dHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMikgPyBpbXAtPmdldEZsb2F0MzIo
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYykgOiBpbXAtPmdldEZsb2F0NjQoYnl0ZU9mZnNl
dCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci0gICAgICAgIHJlc3VsdCA9IHN0ZDo6aXNuYW4odmFsdWUp
ID8ganNOYU4oKSA6IGpzTnVtYmVyKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfSBkZWZh
dWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotSlNWYWx1ZSBKU0RhdGFWaWV3OjpnZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZ2V0RGF0YVZpZXdNZW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8RGF0YVZpZXcqPihp
bXBsKCkpLCBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMik7Ci19Ci0KLUpTVmFsdWUgSlNE
YXRhVmlldzo6Z2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldERh
dGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PERhdGFWaWV3Kj4oaW1wbCgpKSwgQWNjZXNz
RGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5o
IgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogI2luY2x1ZGUgIkpTVHJhY2tDdXN0b20uaCIKLSNp
bmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8
aGVhcC9TdHJvbmdJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50
OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEpTVmFs
dWUgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiAKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogCiAgICAgTG9jYXRpb24qIGxvY2F0aW9uID0gZnJhbWUtPmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLT5sb2NhdGlvbigpOwotICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRD
YWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgbG9jYXRpb24pKQorICAgIGlmIChKU09i
amVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBsb2Nh
dGlvbikpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgSlNMb2NhdGlvbioganNMb2Nh
dGlvbiA9IEpTTG9jYXRpb246OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNMb2NhdGlvbj4oZXhl
YywgZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwgbG9jYXRpb24pOwpAQCAtODMsNyAr
ODMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVy
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvY3VtZW50
KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxk
KGV4ZWMpLCBkb2N1bWVudCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghZXZlbnQpCiAgICAgICAg
IHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hl
ZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBldmVudCk7CisgICAgSlNPYmplY3QqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZXZlbnQpOwogICAgIGlm
ICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBACiAjaW5jbHVkZSAiSlNGaWxlUmVh
ZGVyLmgiCiAKICNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5j
cHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWNvbGxlY3Rp
b24pCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBjb2xsZWN0aW9uKTsKKyAg
ICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCBjb2xsZWN0aW9uKTsKIAogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBl
cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIEpTSFRNTFRlbXBsYXRlRWxlbWVu
dDo6Y29udGVudChFCiAgICAgSFRNTFRlbXBsYXRlRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8
SFRNTFRlbXBsYXRlRWxlbWVudCo+KGltcGwoKSk7CiAgICAgRG9jdW1lbnRGcmFnbWVudCogY29u
dGVudCA9IGltcC0+Y29udGVudCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0
Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNvbnRlbnQpOworICAgIEpTT2JqZWN0
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNvbnRlbnQp
OwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTVWludDhDbGFt
cGVkQXJyYXkuaCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYQogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihj
dXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0YSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgaW1hZ2VEYXRhKTsKICAgICBpZiAo
d3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE5ICs0
NiwxMSBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRl
ICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVk
ZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIK
LSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKLSNp
bmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpT
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKLSNpbmNsdWRlICJKU1VpbnQxNkFy
cmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJh
eS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBAIC02Nyw4ICs1OSwxMSBAQAogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlz
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg+Cisj
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VFdmVu
dC5oIgogCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC0z
OSw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNz
YWdlUG9ydC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlm
IChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgb2JqZWN0KSkKKyAgICBpZiAoSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFw
cGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAKICAgICBzd2l0Y2ggKG9iamVjdC0+cGF0aFNlZ1R5cGUoKSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJl
dHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdy
YXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKKyAgICBKU09iamVjdCogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsK
ICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgCiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICAgIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVu
dFdvcmxkKGV4ZWMpLCB0cmFjayk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOwogICAgIGlmICh3cmFwcGVyKQogICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE0
IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRVhURHJhd0J1
ZmZlcnMuaCIKICNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2lu
Y2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5o
IgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiSlNJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5k
ZXhVaW50LmgiCiAjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVk
ZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKICNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQu
aCIKICNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNVaW50
MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTV2ViR0xC
dWZmZXIuaCIKICNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKICNpbmNs
dWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgpAQCAtODUsMTAgKzgxLDkgQEAK
ICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5Lmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlz
Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAogI2lmIEVOQUJMRShWSURFTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVl
c3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCAr
MzgsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNB
cnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAi
SlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NV2lu
ZG93Q3VzdG9tLmgiCkBAIC01MCw2ICs0OCw4IEBACiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3Rh
Y2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCkBAIC0xMjcsOSArMTI3LDEwIEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2Vu
ZChFeGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0RPTUZvcm1EYXRhKHZhbCks
IGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXI6OmluZm8o
KSkpCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1ZmZlcih2YWwpLCBlYyk7Ci0g
ICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhKU0FycmF5QnVmZmVyVmlldzo6aW5mbygpKSkK
LSAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0FycmF5QnVmZmVyVmlldyh2YWwpLCBlYyk7Ci0g
ICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXJW
aWV3OjppbmZvKCkpKSB7CisgICAgICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB2aWV3
ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsKTsKKyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2aWV3
LmdldCgpLCBlYyk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHZh
bC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjUgKzMyLDEzIEBACiAj
aW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgog
I2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5j
bHVkZSAiSlNGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVk
ZSAiSlNGbG9hdDY0QXJyYXkuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUg
IkpTSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpT
SW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTTmF2
aWdhdG9yLmgiCi0jaW5jbHVkZSAiSlNVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMy
QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4Q2xh
bXBlZEFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNjMsMTIgKzUxLDE3IEBA
CiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
aD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHAuaD4KICNpbmNsdWRl
IDxydW50aW1lL1JlZ0V4cE9iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVk
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNzIyLDQ3ICsxNzE1LDYgQEAgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VgogICAgIG1fYmxvYlVSTHMuc3dhcChibG9i
VVJMcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldXRlclZpZXcoSlNDZWxsKiBqc1ZpZXcpCi17Ci0g
ICAgaWYgKCFqc1ZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBzd2l0Y2ggKGpzVmll
dy0+Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRB
cnJheU5vbmU6Ci0gICAgICAgIC8vIFRoaXMgY291bGQgYmUgYSBEYXRhVmlldywgZm9yIGV4YW1w
bGUuIEFzc3VtZSB0aGF0IHRoZXJlIGFyZSB2aWV3cyB0aGF0IHRoZQotICAgICAgICAvLyBERkcg
ZG9lc24ndCBjYXJlIGFib3V0LgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5
SW50ODoKLSAgICAgICAganNDYXN0PEpTSW50OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVu
Z3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAg
ICAgICBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUludDMyOgotICAgICAgICBqc0Nh
c3Q8SlNJbnQzMkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICBqc0Nhc3Q8SlNVaW50
OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAganNDYXN0PEpTVWludDhD
bGFtcGVkQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MTZB
cnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4o
anNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
VHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KGpzVmll
dyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVk
QXJyYXlGbG9hdDY0OgotICAgICAgICBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihqc1ZpZXcpLT5t
X3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25QdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJh
bnNmZXJBcnJheUJ1ZmZlcnMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBBcnJheUJ1ZmZlckFycmF5
JiBhcnJheUJ1ZmZlcnMsIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlJiBjb2RlKQogewpAQCAtMTc3
OSwyNiArMTczMSwxNSBAQCBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlC
CiAKICAgICBIYXNoU2V0PEpTQzo6QXJyYXlCdWZmZXIqPiB2aXNpdGVkOwogICAgIGZvciAoc2l6
ZV90IGFycmF5QnVmZmVySW5kZXggPSAwOyBhcnJheUJ1ZmZlckluZGV4IDwgYXJyYXlCdWZmZXJz
LnNpemUoKTsgYXJyYXlCdWZmZXJJbmRleCsrKSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiA+IG5ldXRlcmVkVmlld3M7Ci0KICAgICAgICAgaWYgKHZpc2l0ZWQuY29u
dGFpbnMoYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB2aXNpdGVkLmFkZChhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJ
bmRleF0uZ2V0KCkpOwogCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gYXJyYXlCdWZmZXJzW2FycmF5
QnVmZmVySW5kZXhdLT50cmFuc2Zlcihjb250ZW50cy0+YXQoYXJyYXlCdWZmZXJJbmRleCksIG5l
dXRlcmVkVmlld3MpOworICAgICAgICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1
ZmZlckluZGV4XS0+dHJhbnNmZXIoY29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpKTsKICAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgIGNvZGUgPSBWYWxpZGF0aW9uRXJyb3I7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gVGhlIHZpZXdzIG1heSBoYXZlIGJlZW4gbmV1dGVyZWQsIGJ1dCB0aGVpciB3cmFwcGVy
cyBhbHNvIG5lZWQgdG8gYmUgbmV1dGVyZWQsIHRvby4KLSAgICAgICAgZm9yIChzaXplX3Qgdmll
d0luZGV4ID0gbmV1dGVyZWRWaWV3cy5zaXplKCk7IHZpZXdJbmRleC0tOykgewotICAgICAgICAg
ICAgQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbmV1dGVyZWRWaWV3c1t2aWV3SW5kZXhdLmdldCgp
OwotICAgICAgICAgICAgZm9yIChzaXplX3Qgd29ybGRJbmRleCA9IHdvcmxkcy5zaXplKCk7IHdv
cmxkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0g
d29ybGRzW3dvcmxkSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgICAgIG5ldXRlclZpZXcoZ2V0
Q2FjaGVkV3JhcHBlcih3b3JsZCwgdmlldykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBjb250ZW50cy5yZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBw
ZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRPTU9iamVjdEhhc2hUYWJsZU1hcC5oIgorI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NSw2ICs3Niw3IEBAIGlubGluZSB2b2lk
IGluaXROb3JtYWxXb3JsZENsaWVudERhdGEoSlMKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3
ZWJDb3JlSlNDbGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0NsaWVudERhdGE7CiAgICAgdm0tPmNs
aWVudERhdGEgPSB3ZWJDb3JlSlNDbGllbnREYXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50
ZXIuCiAgICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJX
b3JsZDo6Y3JlYXRlKHZtLCB0cnVlKTsKKyAgICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9
IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlIDxoZWFwL1Bhc3NX
ZWFrLmg+CisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1f
b3duZXIoKQoreworfQorV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxK
U0FycmF5QnVmZmVyKj4oCisgICAgICAgIFdlYkNvcmU6OnRvSlMoZXhlYywganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgbmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganND
YXN0PEpTQXJyYXlCdWZmZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIGlmICghanNB
cnJheUJ1ZmZlci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQXJyYXlCdWZmZXIqIHJvb3QgPSBqc0FycmF5QnVmZmVyLT5pbXBsKCk7CisgICAgcmV0
dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QpOworfQorCit2b2lkIFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSgKKyAgICBI
YW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIEpTQXJyYXlCdWZm
ZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5h
c0NlbGwoKSk7CisgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdy
YXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc0FycmF5
QnVmZmVyLT5pbXBsKCksIGpzQXJyYXlCdWZmZXIpOworICAgIGpzQXJyYXlCdWZmZXItPmltcGwo
KS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyX2gKKworI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyIDogcHVibGljIEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgfldlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNDOjpKU0FycmF5QnVmZmVyKiB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZm
ZXIqKTsKKyAgICAKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKCkgeyBy
ZXR1cm4gJm1fb3duZXI7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3du
ZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpOworICAgIH07CisKKyAgICBKU0FycmF5QnVmZmVyT3duZXIgbV9vd25lcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcl9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDIxICsx
ODAsMjIgQEAgc3ViIEZvckFsbFBhcmVudHMKIAogICAgIG15ICRyZWN1cnNlOwogICAgICRyZWN1
cnNlID0gc3ViIHsKKyAgICAgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgICAg
IG15ICRjdXJyZW50SW50ZXJmYWNlID0gc2hpZnQ7CiAKICAgICAgICAgZm9yIChAeyRjdXJyZW50
SW50ZXJmYWNlLT5wYXJlbnRzfSkgewogICAgICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAk
XzsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVy
ZmFjZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0g
JG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJG91dGVySW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7
CiAKICAgICAgICAgICAgIGlmICgkYmVmb3JlUmVjdXJzaW9uKSB7CiAgICAgICAgICAgICAgICAg
JiRiZWZvcmVSZWN1cnNpb24oJHBhcmVudEludGVyZmFjZSkgZXEgJ3BydW5lJyBhbmQgbmV4dDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICYkcmVjdXJzZSgkcGFyZW50SW50ZXJmYWNlKTsK
KyAgICAgICAgICAgICYkcmVjdXJzZSgkb3V0ZXJJbnRlcmZhY2UsICRwYXJlbnRJbnRlcmZhY2Up
OwogICAgICAgICAgICAgJiRhZnRlclJlY3Vyc2lvbigkcGFyZW50SW50ZXJmYWNlKSBpZiAkYWZ0
ZXJSZWN1cnNpb247CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgJiRyZWN1cnNlKCRpbnRlcmZh
Y2UpOworICAgICYkcmVjdXJzZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlKTsKIH0KIAogc3ViIEZp
bmRTdXBlck1ldGhvZApAQCAtMjM4LDYgKzIzOSw3IEBAIHN1YiBJRExGaWxlRm9ySW50ZXJmYWNl
CiBzdWIgUGFyc2VJbnRlcmZhY2UKIHsKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkg
JG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsK
IAogICAgIHJldHVybiB1bmRlZiBpZiAkaW50ZXJmYWNlTmFtZSBlcSAnT2JqZWN0JzsKQEAgLTI0
OCw3ICsyNTAsNyBAQCBzdWIgUGFyc2VJbnRlcmZhY2UKIAogICAgICMgU3RlcCAjMTogRmluZCB0
aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRoICdpbnRlcmZhY2UnCiAgICAgbXkgJGZpbGVuYW1l
ID0gJG9iamVjdC0+SURMRmlsZUZvckludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSkKLSAgICAgICAg
b3IgZGllKCJDb3VsZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFj
ZU5hbWVcIiFcbiIpOworICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBmaWxlIGZv
ciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiLCByZWFjaGFibGUgZnJvbSBcIiIgLiAkb3V0
ZXJJbnRlcmZhY2UtPm5hbWUgLiAiXCIhXG4iKTsKIAogICAgIHByaW50ICIgIHwgIHw+ICBQYXJz
aW5nIHBhcmVudCBJREwgXCIkZmlsZW5hbWVcIiBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5h
bWVcIlxuIiBpZiAkdmVyYm9zZTsKIApAQCAtMjc3LDYgKzI3OSwxMCBAQCBzdWIgU2tpcEluY2x1
ZGVIZWFkZXIKIAogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdOdW1iZXIuaCBkb2VzIG5vdCBleGlz
dC4KICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICAKKyAgICAjIFR5
cGVkIGFycmF5cyBhbHJlYWR5IGluY2x1ZGVkIGJ5IEpTRE9NQmluZGluZy5oLgorICAgIHJldHVy
biAxIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOworICAgIAogICAgIHJldHVy
biAwOwogfQogCkBAIC0zNjgsNyArMzc0LDcgQEAgc3ViIElzVHlwZWRBcnJheVR5cGUKICAgICBy
ZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJBcnJheUJ1ZmZlciIpIG9yICgkdHlwZSBlcSAiQXJyYXlC
dWZmZXJWaWV3IikpOwogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIlVpbnQ4QXJyYXkiKSBv
ciAoJHR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MTZBcnJh
eSIpIG9yICgkdHlwZSBlcSAiVWludDMyQXJyYXkiKSk7CiAgICAgcmV0dXJuIDEgaWYgKCgkdHlw
ZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVx
ICJJbnQzMkFycmF5IikpOwotICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJh
eSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5IikpOworICAgIHJldHVybiAxIGlmICgoJHR5
cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5Iikgb3IgKCR0
eXBlIGVxICJEYXRhVmlldyIpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjA5LDYgKzYxNSw3
IEBAIHN1YiBJc1dyYXBwZXJUeXBlCiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+R2V0U2VxdWVu
Y2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0VudW1UeXBlKCR0eXBl
KTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJl
dHVybiAwIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAw
IGlmICR3ZWJDb3JlVHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJh
bnkiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3
ICsyMTcsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgbXkgJGluY2x1ZGVzUmVmID0g
c2hpZnQ7CiAKICAgICByZXR1cm4gaWYgU2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwotCisgICAg
CiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwog
ICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4K
ICAgICBpZiAoJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKQEAgLTIyNSw4ICsyMjUsNiBA
QCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKU0N1c3Rv
bVhQYXRoTlNSZXNvbHZlci5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCRpc0NhbGxiYWNrICYmICRj
b2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkgewogICAgICAgICAkaW5jbHVkZXNS
ZWYtPnsiSlMke3R5cGV9LmgifSA9IDE7Ci0gICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklz
VHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICRpbmNsdWRlc1JlZi0+eyI8cnVudGlt
ZS8ke3R5cGV9Lmg+In0gPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgZGVmYXVsdCwgaW5j
bHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyIke3R5cGV9
LmgifSA9IDE7CkBAIC02ODIsMTEgKzY4MCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0K
IAogICAgIGlmICgkaGFzUGFyZW50ICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgewotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzVHlwZWRBcnJheVR5cGUoJGludGVyZmFjZU5hbWUpKSB7Ci0gICAgICAgICAgICAkaGVh
ZGVySW5jbHVkZXN7IjxydW50aW1lLyRpbnRlcmZhY2VOYW1lLmg+In0gPSAxOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0g
PSAxOwotICAgICAgICB9CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUu
aCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU09i
amVjdC5oPiJ9ID0gMTsKQEAgLTk2NSwyMiArOTU5LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7CiAgICAgfQogCi0gICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5
cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlciIp
KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjoiKTsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQ4IikgaWYgJGltcGxUeXBlIGVxICJJ
bnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDE2
IikgaWYgJGltcGxUeXBlIGVxICJJbnQxNkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlR5cGVkQXJyYXlJbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MzJBcnJheSI7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDgiKSBpZiAkaW1wbFR5
cGUgZXEgIlVpbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhDbGFtcGVkQXJyYXkiOwot
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQxNiIpIGlmICRpbXBs
VHlwZSBlcSAiVWludDE2QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlw
ZWRBcnJheVVpbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDMyQXJyYXkiOwotICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0MzIiKSBpZiAkaW1wbFR5cGUgZXEg
IkZsb2F0MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5
RmxvYXQ2NCIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQ2NEFycmF5IjsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIjtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IGludHB0cl90IG1fc3RvcmFnZUxlbmd0aDtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHZvaWQqIG1fc3RvcmFnZTtcbiIpOwotICAgIH0KLQogICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRp
bnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xODY5LDEyICsxODQ3LDYgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lk
ICR7Y2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZm
ZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3Io
JHtjbGFzc05hbWV9OjppbmZvKCksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3Rv
cmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVk
QXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBs
KCktPmxlbmd0aCgpO1xuIik7Ci0gICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAifVxuXG4iKTsKICAgICB9CkBAIC0yMzc0LDcgKzIzNDYsMTEgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRj
b2RlR2VuZXJhdG9yLT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNl
TmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBhcmd1bWVudHMsICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSkgYW5kIG5vdCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUg
ZXEgIkFycmF5QnVmZmVyIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlLmdldCgpIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRCeSJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwpA
QCAtMjUyNiwxMyArMjUwMiw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgaWYgKCRpc0N1c3RvbSkgewogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVu
Y3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZSBlcSAic2V0IiBhbmQgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVk
QXJyYXkifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
c2V0V2ViR0xBcnJheUhlbHBlcjwkaW1wbFR5cGUsICR2aWV3VHlwZT4oZXhlYywgY2FzdGVkVGhp
cy0+aW1wbCgpKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAkaW1wbFR5cGUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzLT5p
bXBsKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW1w
bC0+aXNSZWFkT25seSgpKSB7XG4iKTsKQEAgLTMwODcsNyArMzA1Niw3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5v
ZGVGaWx0ZXIiIHx8ICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXJnVHlwZSkg
YW5kIG5vdCAkYXJnVHlwZSBlcSAiQXJyYXlCdWZmZXIiKSkgewogICAgICAgICAgICAgcHVzaCBA
YXJndW1lbnRzLCAiJG5hbWUuZ2V0KCkiOwogICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGludGVyZmFjZU5h
bWUgPX4gL0xpc3QkLykgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5hbWUtPnBy
b3BlcnR5UmVmZXJlbmNlKCkiOwpAQCAtMzM2OSw2ICszMzM4LDcgQEAgc3ViIEdldE5hdGl2ZVR5
cGUKICAgICBteSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJHR5cGUpOwogICAgIHJldHVybiAiJHtzdmdOYXRpdmVUeXBlfSoiIGlmICRz
dmdOYXRpdmVUeXBlOwogICAgIHJldHVybiAiUmVmUHRyPERPTVN0cmluZ0xpc3Q+IiBpZiAkdHlw
ZSBlcSAiRE9NU3RyaW5nTGlzdCI7CisgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlmICRj
b2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSBhbmQgbm90ICR0eXBlIGVxICJB
cnJheUJ1ZmZlciI7CiAgICAgcmV0dXJuICRuYXRpdmVUeXBleyR0eXBlfSBpZiBleGlzdHMgJG5h
dGl2ZVR5cGV7JHR5cGV9OwogCiAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5H
ZXRBcnJheVR5cGUoJHR5cGUpOwpAQCAtMzUwOCw2ICszNDc4LDEwIEBAIHN1YiBKU1ZhbHVlVG9O
YXRpdmUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NU3RyaW5nTGlzdC5oIiwgJGNv
bmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICJ0b0RPTVN0cmluZ0xpc3QoZXhlYywgJHZhbHVl
KSI7CiAgICAgfQorICAgIAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlw
ZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOworICAgIH0KIAog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJIVE1MT3B0aW9uRWxlbWVudC5oIiwgJGNvbmRpdGlvbmFs
KSBpZiAkdHlwZSBlcSAiSFRNTE9wdGlvbkVsZW1lbnQiOwogICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJFdmVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZlbnQiOwpAQCAtMzU3Nyw3
ICszNTUxLDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4g
ImpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KLQorICAgIAogICAgIG15
ICRnbG9iYWxPYmplY3Q7CiAgICAgaWYgKCR0aGlzVmFsdWUpIHsKICAgICAgICAgJGdsb2JhbE9i
amVjdCA9ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSI7CkBAIC0zNjE4LDE0ICszNTkyLDEy
IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICBy
ZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCkiOworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICAjIERvIG5vdGhpbmcgLSBhbGwg
aGVhZGVycyBhcmUgYWxyZWFkeSBpbmNsdWRlZC4KICAgICB9IGVsc2UgewogICAgICAgICAjIERl
ZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdpdGggc2FtZSBuYW1lLgogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxydW50aW1lLyR0eXBlLmg+IiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVH
ZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiBu
b3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfQor
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90
ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAgfQogCiAgICAg
cmV0dXJuICR2YWx1ZSBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUp
OwpAQCAtNDEwOCwzMCArNDA4MCw2IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNpZiAo
JGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRB
cnJheSIpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oIn0gPSAxOwotICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNz
TmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9yID0g
anNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7Ci0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRpbnRlcmZhY2VOYW1l
PiBhcnJheSA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwgJHZpZXdU
eXBlPihleGVjKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
ICghYXJyYXkuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLlxuIik7Ci0gICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCAke2ludGVyZmFjZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1lfT4oZXhl
YywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjppbmRleFNldHRlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpbXBsKCktPnNldChpbmRleCwgdmFsdWUudG9O
dW1iZXIoZXhlYykpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
fVxuXG4iKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0
cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CiAg
ICAgICAgICAgICBteSAkb3ZlcmxvYWRlZEluZGV4U3RyaW5nID0gIiI7CiAgICAgICAgICAgICBp
ZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZGVk
SW5kZXh9ID4gMCkgewpAQCAtNDIxMCw3ICs0MTU4LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0
b3JIZWxwZXJNZXRob2RzCiAKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJh
dGluZ05hbWVkQ29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAi
JHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRsZWFzdENvbnN0cnVjdG9yTGVuZ3Ro
ID0gMDsKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50
ZXJmYWNlLCAiRXZlbnQiKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRl
KCRpbnRlcmZhY2UsICJUeXBlZEFycmF5IikpIHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklz
Q29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewogICAgICAgICAkbGVh
c3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDE7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgbXkgQGNvbnN0cnVjdG9y
cyA9IEB7JGludGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsNyArOTgsNyBAQCB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXIqIGFy
CiAgICAgYXBwZW5kQnl0ZXNEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5i
eXRlTGVuZ3RoKCkpOwogfQogCi12b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXJW
aWV3KiBhcnJheUJ1ZmZlclZpZXcpCit2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldykKIHsKICAgICBIaXN0b2dyYW1TdXBw
b3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5CbG9iLmNvbnN0cnVjdG9yLkFycmF5
QnVmZmVyT3JWaWV3IiwgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJWaWV3LCBCbG9iQ29uc3Ry
dWN0b3JBcnJheUJ1ZmZlck9yVmlld01heCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBTdHJpbmcmIGVuZGluZyk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgdm9pZCBhcHBlbmQoSlND
OjpBcnJheUJ1ZmZlciopOwotICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7
CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4pOwogI2Vu
ZGlmCiAKICAgICBQYXNzUmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRs
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1
ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBH
ZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGwsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IodW5zaWduZWQg
bG9uZyBsZW5ndGgpLAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25O
YW1lc3BhY2U9SlNDLAotICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKLV0gaW50ZXJmYWNl
IEFycmF5QnVmZmVyIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRl
TGVuZ3RoOwotICAgIEFycmF5QnVmZmVyIHNsaWNlKGxvbmcgYmVnaW4sIG9wdGlvbmFsIGxvbmcg
ZW5kKTsKLX07Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVy
Vmlldy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXJWaWV3LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotWwotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxl
cywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEFycmF5QnVm
ZmVyVmlldyB7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEFycmF5QnVmZmVyIGJ1ZmZlcjsKLSAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0OwotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci19OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFW
aWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAgIGNoYXIg
Ynl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
UmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3Ro
LCBzaXplb2YodWludDhfdCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAg
aWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0
ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRM
ZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBpZiAoY2hl
Y2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQotCi1EYXRh
Vmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBi
eXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1
ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQotewotfQot
Ci1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYg
Q1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0
dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNo
YXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAg
ICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBw
KQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRl
c0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0gICAgc3dh
cEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0
cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAg
KyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVz
KHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIq
IHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYgKCFuZWVk
VG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNo
IChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRz
KHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlwQnl0ZXNG
b3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJl
eW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxv
YWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24g
YXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgotICAgIFZh
bHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlw
Qnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAg
IHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRh
Vmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVP
ZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3Rs
eSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQg
ZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsK
LSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBW
YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShzdGF0aWNf
Y2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMs
IHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+
KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBn
ZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0
YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zm
c2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0
dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0K
LXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVp
bnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZp
ZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGlu
dDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50
OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2
YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERh
dGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12
b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFs
dWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRh
PHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZv
aWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGlu
dDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBE
YXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBi
b29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50
MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERh
dGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4o
Ynl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3
OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRl
T2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6Om5l
dXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5n
dGggPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFW
aWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3IDogcHVi
bGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4g
MDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7
IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDMyX3Qg
Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90IGdldEludDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAg
IHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwg
ZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2
NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0Rmxv
YXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5z
aWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQot
ICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4
X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90
IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAot
ICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQzMih1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0
VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZz
ZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91Ymxl
IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRGF0
YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwot
Ci1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkg
Y29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCAr
IHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9p
ZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19OwotCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldv
cmtlckdsb2JhbFNjb3BlLAotICAgIEN1c3RvbUNvbnN0cnVjdG9yKEFycmF5QnVmZmVyIGJ1ZmZl
ciwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCB1bnNpZ25lZCBs
b25nIGJ5dGVMZW5ndGgpLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1Rh
YmxlcwotXSBpbnRlcmZhY2UgRGF0YVZpZXcgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIC8vIEFs
bCB0aGVzZSBtZXRob2RzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IHdvdWxkIHJlYWQgb3Ig
d3JpdGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHZpZXcuCi0KLSAgICBbUmFpc2VzRXhjZXB0aW9u
XSBieXRlIGdldEludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBvY3RldCBnZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwotCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBnZXRJbnQxNih1bnNp
Z25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIHNob3J0IGdl
dFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxl
RW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGxvbmcg
Z2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRs
ZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB1bnNp
Z25lZCBsb25nIGdldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJv
b2xlYW4gbGl0dGxlRW5kaWFuKTsKLQotICAgIC8vIFVzZSBjdXN0b20gY29kZSB0byBoYW5kbGUg
TmFOIGNhc2UuCi0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBi
b29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgW1JhaXNlc0V4Y2VwdGlv
bl0gdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgYnl0ZSB2YWx1ZSk7Ci0g
ICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZz
ZXQsIG9jdGV0IHZhbHVlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVl
LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDMy
KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBs
aXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCBzZXRVaW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZh
bHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRl
T2Zmc2V0LCBmbG9hdCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9hdDY0KHVu
c2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxp
dHRsZUVuZGlhbik7Ci19OwotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9h
dDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zs
b2F0MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0Zsb2F0MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldv
cmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAg
ICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAg
ICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWZsb2F0LAotICAgIEltcGxlbWVudGF0aW9uTmFt
ZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgRmxvYXQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsK
LSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDMyQXJyYXkg
c3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGZs
b2F0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0MzJBcnJh
eSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0
KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0g
ICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9h
dDY0QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0Zsb2F0NjRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUs
Ci0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRT
ZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJs
ZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAg
IFR5cGVkQXJyYXk9ZG91YmxlLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBp
bnRlcmZhY2UgRmxvYXQ2NEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNp
Z25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gODsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDY0QXJyYXkgc3ViYXJyYXkoW0RlZmF1
bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGRvdWJsZSAodW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDY0QXJyYXkgYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25n
PiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7
Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCShyZXZp
c2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBH
bG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3Rv
clRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dl
bmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21U
b0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaWdu
ZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIElu
dDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRF
U19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7Ci0gICAgSW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0
aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcg
ZW5kKTsKLQotICAgIGdldHRlciBieXRlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8v
IHZvaWQgc2V0KEludDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQp
OwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRl
ciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0
PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5
cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRp
dmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAot
ICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaG9ydCwKLSAgICBJbXBs
ZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDE2QXJyYXkgOiBBcnJheUJ1
ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAy
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIElu
dDE2QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdl
dHRlciBzaG9ydCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQx
NkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9p
ZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbnQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9aW50LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwot
XSBpbnRlcmZhY2UgSW50MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5z
aWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVs
dD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGxvbmcgKHVuc2lnbmVkIGxvbmcg
aW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAkocmV2aXNpb24g
MTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2Jh
bENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVt
cGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNP
YmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVk
IGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50
OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVT
X1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKLSAgICBVaW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0
aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0
ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4QXJyYXkgYXJy
YXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1
ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZv
aWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFt
cGVkQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Vp
bnQ4Q2xhbXBlZEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldv
cmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAg
ICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAg
ICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50
YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OENsYW1wZWRBcnJheSA6IFVpbnQ4
QXJyYXkgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwot
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4
Q2xhbXBlZEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBz
dGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBs
b25nIGluZGV4KTsKLQotICAgIC8vIEZJWE1FOiBNaXNzaW5nIG90aGVyIHNldHRlcnMhCi0gICAg
Ly8gdm9pZCBzZXQoVWludDhDbGFtcGVkQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250
ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRl
PVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9O
YXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0
LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBzaG9y
dCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQxNkFy
cmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BF
Ul9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKLSAgICBVaW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlv
bmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25l
ZCBzaG9ydCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MTZB
cnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQg
c2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9V
aW50MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
VWludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2Jh
bFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21J
bmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3Rh
dGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50
cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGludCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVz
cGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50MzJBcnJheSBzdWJh
cnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxv
bmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25lZCBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4
KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25l
ZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9w
dGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOCBA
QAogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0
aW9uLmgiCiAKKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJy
YXlQdHIuaD4KQEAgLTM0MTUsNyArMzQxNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZWFkUGl4ZWxzKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBWYWxpZGF0ZSBh
cnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgpIHsKKyAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZl
clZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUxNTYs
NyArNTE1OCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKIAog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6
OlR5cGVVaW50OCkgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBl
VWludDgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1
dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtNTE2NCwxMyArNTE2NiwxMyBAQCBib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV82XzU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJW
aWV3OjpUeXBlVWludDE2KSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6
OlR5cGVVaW50MTYpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9T
SE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAgICBpZiAocGl4
ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQzMikgeworICAgICAg
ICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewogICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZsb2F0
MzJBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9DcnlwdG8uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSw3IEBAIG5hbWVzcGFj
ZSB7CiAKIGJvb2wgaXNJbnRlZ2VyQXJyYXkoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKIHsKLSAg
ICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAg
IHJldHVybiB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDgKLSAgICAgICAgICAgfHwg
dHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OAotICAgICAgICAgICB8fCB0eXBlID09
IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZAotICAgICAgICAgICB8fCB0eXBlID09
IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlVWludDE2Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJW
aWV3OjpUeXBlSW50MzIKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVVaW50MzI7CisgICAgcmV0dXJuIEpTQzo6aXNJbnQoYXJyYXktPmdldFR5cGUoKSk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NiBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgogCiAj
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkRhdGFWaWV3LmgiCiAjaW1wb3J0
ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC00Nyw2ICs0Niw5IEBACiAjaW1wb3J0
ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRl
cmZhY2UuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8cnVudGltZS9EYXRh
Vmlldy5oPgorI2ltcG9ydCA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW1wb3J0IDxydW50aW1l
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQxNkFycmF5Lmg+CiAj
aW1wb3J0IDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQ4QXJy
YXkuaD4KQEAgLTkyMyw4ICs5MjUsOCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgICAgIC8vIFs0IGJ5dGVzOiBrZXlVUkkgc2l6ZV0sIFtrZXlVUkkgc2l6
ZSBieXRlczoga2V5VVJJXQogICAgICAgICB1bnNpZ25lZCBrZXlVUklTaXplID0ga2V5VVJJLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBpbml0
RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoNCArIGtleVVSSVNpemUsIDEpOwotICAg
ICAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFWaWV3OjpjcmVhdGUoaW5p
dERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBp
bml0RGF0YVZpZXctPnNldFVpbnQzMigwLCBrZXlVUklTaXplLCB0cnVlLCBJR05PUkVfRVhDRVBU
SU9OKTsKKyAgICAgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IEpTQzo6
RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVM
ZW5ndGgoKSk7CisgICAgICAgIGluaXREYXRhVmlldy0+c2V0PHVpbnQzMl90PigwLCBrZXlVUklT
aXplLCB0cnVlKTsKIAogICAgICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleVVSSUFycmF5ID0g
VWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgNCwga2V5VVJJLmxlbmd0aCgpKTsK
ICAgICAgICAga2V5VVJJQXJyYXktPnNldFJhbmdlKGtleVVSSS5jaGFyYWN0ZXJzKCksIGtleVVS
SS5sZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBjaGFyKSwgMCk7CkBAIC0xMjA0LDEzICsxMjA2
LDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gaW5pdERhdGEtPmJ1ZmZlcigpOwogCiAg
ICAgLy8gVXNlIGEgRGF0YVZpZXcgdG8gcmVhZCB1aW50MzIgdmFsdWVzIGZyb20gdGhlIGJ1ZmZl
ciwgYXMgVWludDMyQXJyYXkgcmVxdWlyZXMgdGhlIHJlYWRzIGJlIGFsaWduZWQgb24gNC1ieXRl
IGJvdW5kYXJpZXMuIAotICAgIFJlZlB0cjxEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0gRGF0YVZp
ZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgo
KSk7CisgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IEpTQzo6RGF0YVZp
ZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgo
KSk7CiAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBib29sIHN0YXR1cyA9IHRydWU7CiAKLSAgICB1aW50MzJfdCBrZXlVUklMZW5ndGggPSBp
bml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBr
ZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAm
c3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5VVJJ
TGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8IG9mZnNldCAr
IGtleVVSSUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlVUklBcnJheSA9IFVpbnQxNkFycmF5Ojpj
cmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5VVJJTGVuZ3RoKTsKQEAgLTEyMjAsOSAr
MTIyMiw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBr
ZXlVUkkgPSBTdHJpbmcoa2V5VVJJQXJyYXktPmRhdGEoKSwga2V5VVJJTGVuZ3RoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zmc2V0ICs9IGtleVVSSUxlbmd0aDsKIAotICAgIHVp
bnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVl
LCBlYyk7CisgICAgdWludDMyX3Qga2V5SURMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50
MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAo
ZWMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCisgICAgaWYg
KCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5SURBcnJh
eSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5SURMZW5n
dGgpOwpAQCAtMTIzMiw5ICsxMjM0LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOgogICAgIGtleUlEID0gU3RyaW5nKGtleUlEQXJyYXktPmRhdGEoKSwga2V5SURM
ZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgICBvZmZzZXQgKz0ga2V5SURMZW5n
dGg7CiAKLSAgICB1aW50MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0
VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGNlcnRpZmljYXRlTGVuZ3Ro
ID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAg
ICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGNlcnRpZmljYXRlTGVuZ3Ro
ID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8IG9mZnNldCArIGNlcnRp
ZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBjZXJ0aWZpY2F0ZSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwg
b2Zmc2V0LCBjZXJ0aWZpY2F0ZUxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCShyZXZp
c2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ3VzdG9tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNyw5IEBACiAjaW5j
bHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBVaW50OENs
YW1wZWRBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXN0b21GaWx0
ZXJSZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAxNTQwNjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5C
bHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIlJlbmRl
clRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKKyNpbmNsdWRlIDxydW50
aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ0RNLmgiCiAjaW5jbHVkZSAiTWVkaWFLZXlFcnJvci5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlw
ZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDY4KQorKysgU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBl
ZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBZb3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEpT
VWludDhBcnJheSBhbnltb3JlIGlmIHlvdSBqdXN0IHdhbnQgdG8KKyAgICAgICAgdW53cmFwIG9u
ZTsgSlNET01CaW5kaW5nIGdpdmVzIHlvdSBhbGwgb2YgdGhlIHRoaW5ncyB5b3UgbmVlZC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgor
CiAyMDEzLTA4LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04gKHIxNTM4NzcpOiBQbHVnaW4gc2Nhbm5pbmcgc2xvd3MgY3JlYXRp
b24gb2YgV2ViVmlld3MKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5k
b3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTTm90aWZpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9KU1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+
CkluZGV4OiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmlsdGVyCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAs
NiBAQCBfWk43V2ViQ29yZTlGcmFtZVZpZXcxN3NldFRyYWNrc1JlcGFpbnRzCiBfWk5LN1dlYkNv
cmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNBc1RleHRFdjsKIF9aTjdXZWJDb3JlNHRvSlNF
UE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTjNXVEYxMUFycmF5QnVm
ZmVyRTsKIF9aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjZyZWxvYWRFYjsKLV9aTjdXZWJDb3JlMTN0
b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFOwogX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRD
MUVSS05TXzExTGF5b3V0UG9pbnRFampqajsKIF9aTjdXZWJDb3JlMTVIaXRUZXN0TG9jYXRpb24x
MnJlY3RGb3JQb2ludEVSS05TXzExTGF5b3V0UG9pbnRFampqajsKIF9aTjdXZWJDb3JlMjFTZXJp
YWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVJLTjNXVEY2U3RyaW5nRTsKQEAgLTMwNyw4ICszMDYs
NiBAQCBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RGNlZlCiBfWk43V2ViQ29y
ZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxqMEVOUzFf
MTVDcmFzaE9uT3ZlcmZsb3dFRUU7CiBfWk43V2ViQ29yZTEwVGltZVJhbmdlczNhZGRFZGQ7CiBf
Wk43V2ViQ29yZTEydG9UaW1lUmFuZ2VzRU4zSlNDN0pTVmFsdWVFOwotX1pON1dlYkNvcmUxNHRv
RmxvYXQzMkFycmF5RU4zSlNDN0pTVmFsdWVFOwotX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhl
Y1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOUzBfMTFBcnJheUJ1ZmZlckU7CiBfWk43
V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5T
XzEwVGltZVJhbmdlc0U7CiBfWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM3bmVhcmVzdEVkOwogX1pO
SzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTlyZWN0QmFzZWRUZXN0UmVzdWx0RXY7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTQwNjgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wOC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbDoK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10
cmFuc2Zlci1vZi1jb250cm9sLmpzOgorICAgICAgICAoY2hlY2tWaWV3KToKKyAgICAgICAgKiBm
YXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sOgorICAgICAgICAq
IGZhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLmh0bWw6CisgICAgICAgICogd2ViZ2wvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvYXJyYXktdW5pdC10
ZXN0cy5odG1sOgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlL3R5cGVkYXJyYXlzL2RhdGEtdmlldy10ZXN0Lmh0bWw6CisKIDIwMTMtMDgtMTQg
IEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzExOTUyMD4gUkVHUkVTU0lPTigxNTQwNjIpOiBmYXN0L3JlcGFpbnQvY2FyZXQt
anVtcC1iZXR3ZWVuLW5vZGVzLmh0bWwgZmxha2VzIG9uIGJvdHMuCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtaW52YWxpZC1hcmd1bWVudHMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNl
dC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50cy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMjcgKzIsMjcgQEAgVmVyaWZpZXMgdGhh
dCBhdHRlbXB0aW5nIHRvIHNldCBpbnZhbGlkIAogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CiAKLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3Qg
ZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJh
eS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlz
IG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxs
byB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQuCi1Q
QVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBlZEFy
cmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZhbGlk
IGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJh
eS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4K
LVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwg
MSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1Q
QVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXkuc2V0
KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQg
b2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29y
bGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFTUyB0
eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
SW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJheS5z
ZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBhcmd1
bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHR5cGVkQXJyYXkuc2V0
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBl
ZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BB
U1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBv
YmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBv
dXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRBcnJheS5z
ZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3QgYXJndW1l
bnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwg
MSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0
IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50Lgor
UEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5
LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29u
c2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1MgdHlw
ZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBhdCBsZWFz
dCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3Qu
CitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2Yg
Ym91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRBcnJheS5zZXQoJ2hl
bGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3QgYXJndW1lbnQgc2hv
dWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBs
ZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0
eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBG
aXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChv
dGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGlu
ZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFBBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1vdXQtb2Yt
Ym91bmRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDI2ICs0LDI2IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEEKIAogUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzMzNTIgOiBQYXNzaW5nIGFycmF5IHRoYXQgaXMgdG9vIGxhcmdl
IHRvIHNldCBtZXRob2Qgb2YgV2ViR0xBcnJheXMgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
CiBUZXN0aW5nIEludDhBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJH
TEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBp
cyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVu
Z3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50OEFycmF5Ci1QQVNTIHdlYkdMQXJy
YXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91
dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdMQXJyYXku
c2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rp
bmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdlYkdMQXJy
YXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNp
c3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0aW5nIElu
dDE2QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJheS5zZXQo
WzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJh
bmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9m
IGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0
IG9mIGJvdW5kcy4KIFRlc3RpbmcgVWludDE2QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQs
IDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdl
Li4KLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVd
LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZz
ZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQs
IDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBv
ZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFRlc3RpbmcgSW50MzJBcnJheQot
UEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0p
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFT
UyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBS
YW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgor
UEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRz
LgogVGVzdGluZyBVaW50MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3
ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRl
eCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVu
Z3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQg
bGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBGbG9hdDMyQXJyYXkKLVBBU1Mgd2Vi
R0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXgg
aXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xB
cnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29u
c2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2Vi
R0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2Ug
Y29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUyMCArMSw1IEBACi1WZXJpZmllcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbmV3IGFy
cmF5LWxpa2Ugb2JqZWN0cyBpbiB0aGUgVHlwZWRBcnJheSBzcGVjCi0KLU9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KLQotUEFTUyB0ZXN0U2xpY2UKLXRlc3QgaW5oZXJpdGFuY2UgaGllcmFyY2h5
IG9mIHR5cGVkIGFycmF5IHZpZXdzCi1QQVNTIEFycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZl
IFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlIGFuZCBzaG91bGQgYmUgZGVm
aW5lZAotUEFTUyBuZXcgSW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlz
IHRydWUKLVBBU1MgbmV3IFVpbnQ4QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcg
aXMgdHJ1ZQotUEFTUyBuZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1
ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgSW50MTZBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5
QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50MTZBcnJheSgxKSBpbnN0YW5jZW9mIEFy
cmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBJbnQzMkFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IFVpbnQzMkFycmF5KDEpIGluc3RhbmNl
b2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEZsb2F0MzJBcnJheSgxKSBpbnN0
YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBGbG9hdDY0QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgRGF0YVZpZXcobmV3
IEFycmF5QnVmZmVyKDgpKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNT
IG5ldyBBcnJheUJ1ZmZlclZpZXcoKSB0aHJldyBUeXBlRXJyb3IKLVBBU1MgbmV3IFVpbnQ4Q2xh
bXBlZEFycmF5KDEpIGluc3RhbmNlb2YgVWludDhBcnJheSBpcyB0cnVlCi1QQVNTIHRlc3QgRmxv
YXQzMkFycmF5IFNldEFuZEdldFBvczEwVG9OZWcxMAotUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBD
b25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBD
b25zdHJ1Y3RXaXRoVHlwZWRBcnJheU9mU2lnbmVkVmFsdWVzCi1UZXN0aW5nIEZsb2F0MzJBcnJh
eSBHZXRXaXRoT3V0T2ZSYW5nZUluZGljZXMKLVBBU1MgYXJyYXlbMl0gaXMgdW5kZWZpbmVkLgot
UEFTUyBhcnJheVstMV0gaXMgdW5kZWZpbmVkLgotUEFTUyBhcnJheVsweDIwMDAwMDAwXSBpcyB1
bmRlZmluZWQuCi1QQVNTIHRlc3QgRmxvYXQzMkFycmF5IE9mZnNldHNBbmRTaXplcwotUEFTUyB0
ZXN0IEZsb2F0MzJBcnJheSBTZXRGcm9tVHlwZWRBcnJheQotUEFTUyBuZWdhdGl2ZVRlc3QgRmxv
YXQzMkFycmF5IFNldEZyb21UeXBlZEFycmF5Ci1QQVNTIHRlc3QgRmxvYXQzMkFycmF5IFNldEZy
b21BcnJheQotUEFTUyBuZWdhdGl2ZVRlc3QgRmxvYXQzMkFycmF5IFNldEZyb21BcnJheQotUEFT
UyB0ZXN0IEZsb2F0MzJBcnJheSBTdWJhcnJheQotUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBTdWJh
cnJheSBvZmZzZXQgYW5kIGxlbmd0aCBjbGFtcGluZwotUEFTUyBuZWdhdGl2ZVRlc3QgRmxvYXQz
MkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgRmxvYXQzMkFycmF5IFNldEJvdW5kYXJ5Q29uZGl0
aW9ucwotUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBDb25zdHJ1Y3Rpb25Cb3VuZGFyeUNvbmRpdGlv
bnMKLVBBU1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0MzJBcnJheSB3aXRoIG51bGwgYnVmZmVyIHRo
cmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgRmxvYXQzMkFycmF5IHdpdGggKG51
bGwgYnVmZmVyLCAwKSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0
MzJBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uCi1QQVNTIENv
bnN0cnVjdGlvbiBvZiBGbG9hdDMyQXJyYXkgd2l0aCBleGNlcHRpb24tdGhyb3dpbmcgYXJyYXkt
bGlrZSBvYmplY3QgZGlkbid0IGNyYXNoIHVuZXhwZWN0ZWRseQotUEFTUyBDb25zdHJ1Y3Rpb24g
b2YgRmxvYXQzMkFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG51bWJlciBvZiBlbGVtZW50cyB0aHJl
dyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0MzJBcnJheSB3aXRoIG91
dC1vZi1yYW5nZSBvZmZzZXQgdGhyZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBv
ZiBBcnJheUJ1ZmZlciB3aXRoIG5lZ2F0aXZlIHNpemUgdGhyZXcgZXhjZXB0aW9uCi1QQVNTIENv
bnN0cnVjdGlvbiBvZiBGbG9hdDMyQXJyYXkgd2l0aCBuZWdhdGl2ZSBzaXplIHRocmV3IGV4Y2Vw
dGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgRmxvYXQzMkFycmF5IHdpdGggbmVnYXRpdmUgb3V0
LW9mLXJhbmdlIHZhbHVlcyB0aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9m
IEZsb2F0MzJBcnJheSB3aXRoIHVuYWxpZ25lZCBvZmZzZXQgdGhyZXcgYW4gZXhjZXB0aW9uCi1Q
QVNTIENvbnN0cnVjdGlvbiBvZiBGbG9hdDMyQXJyYXkgd2l0aCB1bmFsaWduZWQgbGVuZ3RoIHRo
cmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBGbG9hdDMyQXJyYXkg
dGhyZXcgZXhjZXB0aW9uCi1QQVNTIEFycmF5IGxlbmd0aHMgbWF0Y2hlZCB3aXRoIGV4cGxpY2l0
IGFuZCBpbXBsaWNpdCBjcmVhdGlvbiBvZiBBcnJheUJ1ZmZlcgotUEFTUyBuZXcgRmxvYXQzMkFy
cmF5KG5ldyBBcnJheUJ1ZmZlcigxOCksIDAsIDIpIHN1Y2NlZWRlZAotVGVzdGluZyBzdWJhcnJh
eSBvZiBGbG9hdDMyQXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKLVBB
U1MgYXJyYXkuc3ViYXJyYXkoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXpl
KSAtIDQKLVBBU1MgYXJyYXkuc3ViYXJyYXkoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAwCi1Q
QVNTIGFycmF5Lmxlbmd0aCBpcyAwCi1UZXN0aW5nIHN1YmFycmF5IHdpdGggZGVmYXVsdCBpbnB1
dHMgb2YgRmxvYXQzMkFycmF5Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1Q
QVNTIGFycmF5LnN1YmFycmF5KDApLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgYXJy
YXkuc3ViYXJyYXkoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKLVBBU1MgYXJyYXku
c3ViYXJyYXkoLTIpLmxlbmd0aCBpcyAyCi1QQVNTIGFycmF5LnN1YmFycmF5KC0yMTQ3NDgzNjQ4
KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCi1QQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZy
b20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGlu
ZyBGbG9hdDMyQXJyYXkgZnJvbSBGbG9hdDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0
IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIG5l
Z2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20g
RmxvYXQzMkFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGlu
ZyBGbG9hdDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIC0wIG9mZnNldAotUEFTUyBTZXR0aW5nIEZs
b2F0MzJBcnJheSBmcm9tIEZsb2F0MzJBcnJheSB3aXRoIC0wIG9mZnNldAotUEFTUyBTZXR0aW5n
IEZsb2F0MzJBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1QQVNTIFNldHRp
bmcgRmxvYXQzMkFycmF5IGZyb20gRmxvYXQzMkFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1Q
QVNTIFNldHRpbmcgRmxvYXQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZz
ZXQKLVBBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBGbG9hdDMyQXJyYXkgd2l0aCBub24t
aW50ZWdlciBvZmZzZXQKLVBBU1MgU2V0dGluZyBGbG9hdDMyQXJyYXkgZnJvbSBmYWtlIGFycmF5
IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAotUEFTUyBhcnJheS5nZXQgaXMgdW5kZWZp
bmVkLgotUEFTUyBhcnJheS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0aW9uLgotUEFTUyB0ZXN0IHN0
b3JpbmcgTmFOIGluIEZsb2F0MzJBcnJheQotUEFTUyB0ZXN0IEZsb2F0NjRBcnJheSBTZXRBbmRH
ZXRQb3MxMFRvTmVnMTAKLVBBU1MgdGVzdCBGbG9hdDY0QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5
T2ZTaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBGbG9hdDY0QXJyYXkgQ29uc3RydWN0V2l0aFR5cGVk
QXJyYXlPZlNpZ25lZFZhbHVlcwotVGVzdGluZyBGbG9hdDY0QXJyYXkgR2V0V2l0aE91dE9mUmFu
Z2VJbmRpY2VzCi1QQVNTIGFycmF5WzJdIGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXlbLTFdIGlz
IHVuZGVmaW5lZC4KLVBBU1MgYXJyYXlbMHgyMDAwMDAwMF0gaXMgdW5kZWZpbmVkLgotUEFTUyB0
ZXN0IEZsb2F0NjRBcnJheSBPZmZzZXRzQW5kU2l6ZXMKLVBBU1MgdGVzdCBGbG9hdDY0QXJyYXkg
U2V0RnJvbVR5cGVkQXJyYXkKLVBBU1MgbmVnYXRpdmVUZXN0IEZsb2F0NjRBcnJheSBTZXRGcm9t
VHlwZWRBcnJheQotUEFTUyB0ZXN0IEZsb2F0NjRBcnJheSBTZXRGcm9tQXJyYXkKLVBBU1MgbmVn
YXRpdmVUZXN0IEZsb2F0NjRBcnJheSBTZXRGcm9tQXJyYXkKLVBBU1MgdGVzdCBGbG9hdDY0QXJy
YXkgU3ViYXJyYXkKLVBBU1MgdGVzdCBGbG9hdDY0QXJyYXkgU3ViYXJyYXkgb2Zmc2V0IGFuZCBs
ZW5ndGggY2xhbXBpbmcKLVBBU1MgbmVnYXRpdmVUZXN0IEZsb2F0NjRBcnJheSBTdWJhcnJheQot
UEFTUyB0ZXN0IEZsb2F0NjRBcnJheSBTZXRCb3VuZGFyeUNvbmRpdGlvbnMKLVBBU1MgdGVzdCBG
bG9hdDY0QXJyYXkgQ29uc3RydWN0aW9uQm91bmRhcnlDb25kaXRpb25zCi1QQVNTIENvbnN0cnVj
dGlvbiBvZiBGbG9hdDY0QXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNlcHRpb24KLVBB
U1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0NjRBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwgMCkgdGhy
ZXcgZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBGbG9hdDY0QXJyYXkgd2l0aCAobnVs
bCBidWZmZXIsIDAsIDApIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgRmxv
YXQ2NEFycmF5IHdpdGggZXhjZXB0aW9uLXRocm93aW5nIGFycmF5LWxpa2Ugb2JqZWN0IGRpZG4n
dCBjcmFzaCB1bmV4cGVjdGVkbHkKLVBBU1MgQ29uc3RydWN0aW9uIG9mIEZsb2F0NjRBcnJheSB3
aXRoIG91dC1vZi1yYW5nZSBudW1iZXIgb2YgZWxlbWVudHMgdGhyZXcgYW4gZXhjZXB0aW9uCi1Q
QVNTIENvbnN0cnVjdGlvbiBvZiBGbG9hdDY0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0
IHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgQXJyYXlCdWZmZXIgd2l0
aCBuZWdhdGl2ZSBzaXplIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgRmxv
YXQ2NEFycmF5IHdpdGggbmVnYXRpdmUgc2l6ZSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3Ry
dWN0aW9uIG9mIEZsb2F0NjRBcnJheSB3aXRoIG5lZ2F0aXZlIG91dC1vZi1yYW5nZSB2YWx1ZXMg
dGhyZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBGbG9hdDY0QXJyYXkgd2l0
aCB1bmFsaWduZWQgb2Zmc2V0IHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24g
b2YgRmxvYXQ2NEFycmF5IHdpdGggdW5hbGlnbmVkIGxlbmd0aCB0aHJldyBhbiBleGNlcHRpb24K
LVBBU1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgRmxvYXQ2NEFycmF5IHRocmV3IGV4Y2VwdGlvbgot
UEFTUyBBcnJheSBsZW5ndGhzIG1hdGNoZWQgd2l0aCBleHBsaWNpdCBhbmQgaW1wbGljaXQgY3Jl
YXRpb24gb2YgQXJyYXlCdWZmZXIKLVBBU1MgbmV3IEZsb2F0NjRBcnJheShuZXcgQXJyYXlCdWZm
ZXIoMzYpLCAwLCAyKSBzdWNjZWVkZWQKLVRlc3Rpbmcgc3ViYXJyYXkgb2YgRmxvYXQ2NEFycmF5
Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNTIGFycmF5LnN1YmFycmF5
KDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5
LnN1YmFycmF5KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAotUEFTUyBhcnJheS5sZW5ndGgg
aXMgMAotVGVzdGluZyBzdWJhcnJheSB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mIEZsb2F0NjRBcnJh
eQotUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQotUEFTUyBhcnJheS5zdWJhcnJh
eSgwKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCi1QQVNTIGFycmF5LnN1YmFycmF5KDIpLmxl
bmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCi1QQVNTIGFycmF5LnN1YmFycmF5KC0yKS5sZW5n
dGggaXMgMgotUEFTUyBhcnJheS5zdWJhcnJheSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAv
IHR5cGVTaXplKQotUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0
LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZy
b20gRmxvYXQ2NEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNT
IFNldHRpbmcgRmxvYXQ2NEFycmF5IGZyb20gYXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2Fz
IGNhdWdodAotUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBmcm9tIEZsb2F0NjRBcnJheSB3aXRo
IG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZy
b20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGluZyBGbG9hdDY0QXJyYXkgZnJvbSBG
bG9hdDY0QXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGluZyBGbG9hdDY0QXJyYXkgZnJv
bSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0aW5nIEZsb2F0NjRBcnJheSBm
cm9tIEZsb2F0NjRBcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0aW5nIEZsb2F0
NjRBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0Ci1QQVNTIFNldHRpbmcg
RmxvYXQ2NEFycmF5IGZyb20gRmxvYXQ2NEFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0Ci1Q
QVNTIFNldHRpbmcgRmxvYXQ2NEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVu
Z3RoIHdhcyBjYXVnaHQKLVBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXku
c2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4KLVBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBGbG9h
dDY0QXJyYXkKLVBBU1MgdGVzdCBJbnQ4QXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCi1QQVNT
IHRlc3QgSW50OEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCi1QQVNTIHRl
c3QgSW50OEFycmF5IENvbnN0cnVjdFdpdGhUeXBlZEFycmF5T2ZTaWduZWRWYWx1ZXMKLVBBU1Mg
dGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0aW9uIGJlaGF2aW9yIGZvciBJbnQ4QXJyYXkKLVRl
c3RpbmcgSW50OEFycmF5IEdldFdpdGhPdXRPZlJhbmdlSW5kaWNlcwotUEFTUyBhcnJheVsyXSBp
cyB1bmRlZmluZWQuCi1QQVNTIGFycmF5Wy0xXSBpcyB1bmRlZmluZWQuCi1QQVNTIGFycmF5WzB4
MjAwMDAwMDBdIGlzIHVuZGVmaW5lZC4KLVBBU1MgdGVzdCBJbnQ4QXJyYXkgT2Zmc2V0c0FuZFNp
emVzCi1QQVNTIHRlc3QgSW50OEFycmF5IFNldEZyb21UeXBlZEFycmF5Ci1QQVNTIG5lZ2F0aXZl
VGVzdCBJbnQ4QXJyYXkgU2V0RnJvbVR5cGVkQXJyYXkKLVBBU1MgdGVzdCBJbnQ4QXJyYXkgU2V0
RnJvbUFycmF5Ci1QQVNTIG5lZ2F0aXZlVGVzdCBJbnQ4QXJyYXkgU2V0RnJvbUFycmF5Ci1QQVNT
IHRlc3QgSW50OEFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgSW50OEFycmF5IFN1YmFycmF5IG9m
ZnNldCBhbmQgbGVuZ3RoIGNsYW1waW5nCi1QQVNTIG5lZ2F0aXZlVGVzdCBJbnQ4QXJyYXkgU3Vi
YXJyYXkKLVBBU1MgdGVzdCBJbnQ4QXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCi1QQVNTIHRl
c3QgSW50OEFycmF5IENvbnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyBDb25zdHJ1
Y3Rpb24gb2YgSW50OEFycmF5IHdpdGggbnVsbCBidWZmZXIgdGhyZXcgZXhjZXB0aW9uCi1QQVNT
IENvbnN0cnVjdGlvbiBvZiBJbnQ4QXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDApIHRocmV3IGV4
Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50OEFycmF5IHdpdGggKG51bGwgYnVmZmVy
LCAwLCAwKSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDhBcnJheSB3
aXRoIGV4Y2VwdGlvbi10aHJvd2luZyBhcnJheS1saWtlIG9iamVjdCBkaWRuJ3QgY3Jhc2ggdW5l
eHBlY3RlZGx5Ci1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQ4QXJyYXkgd2l0aCBvdXQtb2YtcmFu
Z2UgbnVtYmVyIG9mIGVsZW1lbnRzIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rp
b24gb2YgSW50OEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB0aHJldyBhbiBleGNlcHRp
b24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEFycmF5QnVmZmVyIHdpdGggbmVnYXRpdmUgc2l6ZSB0
aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDhBcnJheSB3aXRoIG5lZ2F0
aXZlIHNpemUgdGhyZXcgZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQ4QXJyYXkg
d2l0aCBuZWdhdGl2ZSBvdXQtb2YtcmFuZ2UgdmFsdWVzIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFT
UyBBcnJheSBsZW5ndGhzIG1hdGNoZWQgd2l0aCBleHBsaWNpdCBhbmQgaW1wbGljaXQgY3JlYXRp
b24gb2YgQXJyYXlCdWZmZXIKLVRlc3Rpbmcgc3ViYXJyYXkgb2YgSW50OEFycmF5Ci1QQVNTIGFy
cmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNTIGFycmF5LnN1YmFycmF5KDQsIDB4M0ZG
RkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnN1YmFycmF5
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAotVGVzdGluZyBzdWJhcnJheSB3aXRoIGRlZmF1
bHQgaW5wdXRzIG9mIEludDhBcnJheQotUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6
ZQotUEFTUyBhcnJheS5zdWJhcnJheSgwKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCi1QQVNT
IGFycmF5LnN1YmFycmF5KDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCi1QQVNTIGFy
cmF5LnN1YmFycmF5KC0yKS5sZW5ndGggaXMgMgotUEFTUyBhcnJheS5zdWJhcnJheSgtMjE0NzQ4
MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQotUEFTUyBTZXR0aW5nIEludDhBcnJheSBm
cm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRp
bmcgSW50OEFycmF5IGZyb20gSW50OEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMg
Y2F1Z2h0Ci1QQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBuZWdhdGl2ZSBv
ZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIEludDhBcnJheSB3
aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgSW50OEFycmF5IGZy
b20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBJbnQ4
QXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGluZyBJbnQ4QXJyYXkgZnJvbSBhcnJheSB3
aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIEludDhBcnJh
eSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0aW5nIEludDhBcnJheSBmcm9tIGFycmF5
IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50OEFycmF5IGZyb20gSW50
OEFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50OEFycmF5IGZy
b20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKLVBBU1MgYXJyYXku
Z2V0IGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXkuc2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4K
LVBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBJbnQ4QXJyYXkKLVBBU1MgdGVzdCBJbnQxNkFycmF5
IFNldEFuZEdldFBvczEwVG9OZWcxMAotUEFTUyB0ZXN0IEludDE2QXJyYXkgQ29uc3RydWN0V2l0
aEFycmF5T2ZTaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBJbnQxNkFycmF5IENvbnN0cnVjdFdpdGhU
eXBlZEFycmF5T2ZTaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0
aW9uIGJlaGF2aW9yIGZvciBJbnQxNkFycmF5Ci1UZXN0aW5nIEludDE2QXJyYXkgR2V0V2l0aE91
dE9mUmFuZ2VJbmRpY2VzCi1QQVNTIGFycmF5WzJdIGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXlb
LTFdIGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXlbMHgyMDAwMDAwMF0gaXMgdW5kZWZpbmVkLgot
UEFTUyB0ZXN0IEludDE2QXJyYXkgT2Zmc2V0c0FuZFNpemVzCi1QQVNTIHRlc3QgSW50MTZBcnJh
eSBTZXRGcm9tVHlwZWRBcnJheQotUEFTUyBuZWdhdGl2ZVRlc3QgSW50MTZBcnJheSBTZXRGcm9t
VHlwZWRBcnJheQotUEFTUyB0ZXN0IEludDE2QXJyYXkgU2V0RnJvbUFycmF5Ci1QQVNTIG5lZ2F0
aXZlVGVzdCBJbnQxNkFycmF5IFNldEZyb21BcnJheQotUEFTUyB0ZXN0IEludDE2QXJyYXkgU3Vi
YXJyYXkKLVBBU1MgdGVzdCBJbnQxNkFycmF5IFN1YmFycmF5IG9mZnNldCBhbmQgbGVuZ3RoIGNs
YW1waW5nCi1QQVNTIG5lZ2F0aXZlVGVzdCBJbnQxNkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3Qg
SW50MTZBcnJheSBTZXRCb3VuZGFyeUNvbmRpdGlvbnMKLVBBU1MgdGVzdCBJbnQxNkFycmF5IENv
bnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MTZB
cnJheSB3aXRoIG51bGwgYnVmZmVyIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24g
b2YgSW50MTZBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwgMCkgdGhyZXcgZXhjZXB0aW9uCi1QQVNT
IENvbnN0cnVjdGlvbiBvZiBJbnQxNkFycmF5IHdpdGggKG51bGwgYnVmZmVyLCAwLCAwKSB0aHJl
dyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDE2QXJyYXkgd2l0aCBleGNlcHRp
b24tdGhyb3dpbmcgYXJyYXktbGlrZSBvYmplY3QgZGlkbid0IGNyYXNoIHVuZXhwZWN0ZWRseQot
UEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MTZBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBudW1iZXIg
b2YgZWxlbWVudHMgdGhyZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQx
NkFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB0aHJldyBhbiBleGNlcHRpb24KLVBBU1Mg
Q29uc3RydWN0aW9uIG9mIEFycmF5QnVmZmVyIHdpdGggbmVnYXRpdmUgc2l6ZSB0aHJldyBleGNl
cHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDE2QXJyYXkgd2l0aCBuZWdhdGl2ZSBzaXpl
IHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MTZBcnJheSB3aXRoIG5l
Z2F0aXZlIG91dC1vZi1yYW5nZSB2YWx1ZXMgdGhyZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENvbnN0
cnVjdGlvbiBvZiBJbnQxNkFycmF5IHdpdGggdW5hbGlnbmVkIG9mZnNldCB0aHJldyBhbiBleGNl
cHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDE2QXJyYXkgd2l0aCB1bmFsaWduZWQgbGVu
Z3RoIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBJbnQxNkFy
cmF5IHRocmV3IGV4Y2VwdGlvbgotUEFTUyBBcnJheSBsZW5ndGhzIG1hdGNoZWQgd2l0aCBleHBs
aWNpdCBhbmQgaW1wbGljaXQgY3JlYXRpb24gb2YgQXJyYXlCdWZmZXIKLVBBU1MgbmV3IEludDE2
QXJyYXkobmV3IEFycmF5QnVmZmVyKDkpLCAwLCAyKSBzdWNjZWVkZWQKLVRlc3Rpbmcgc3ViYXJy
YXkgb2YgSW50MTZBcnJheQotUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQotUEFT
UyBhcnJheS5zdWJhcnJheSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
IC0gNAotUEFTUyBhcnJheS5zdWJhcnJheSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKLVBB
U1MgYXJyYXkubGVuZ3RoIGlzIDAKLVRlc3Rpbmcgc3ViYXJyYXkgd2l0aCBkZWZhdWx0IGlucHV0
cyBvZiBJbnQxNkFycmF5Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNT
IGFycmF5LnN1YmFycmF5KDApLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgYXJyYXku
c3ViYXJyYXkoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKLVBBU1MgYXJyYXkuc3Vi
YXJyYXkoLTIpLmxlbmd0aCBpcyAyCi1QQVNTIGFycmF5LnN1YmFycmF5KC0yMTQ3NDgzNjQ4KS5s
ZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCi1QQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9tIGFy
cmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgSW50
MTZBcnJheSBmcm9tIEludDE2QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVn
aHQKLVBBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20gYXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZz
ZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBJbnQxNkFycmF5IHdp
dGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZy
b20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGluZyBJbnQxNkFycmF5IGZyb20gSW50
MTZBcnJheSB3aXRoIC0wIG9mZnNldAotUEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBhcnJh
eSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0aW5nIEludDE2QXJyYXkgZnJvbSBJbnQx
NkFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50MTZBcnJheSBmcm9t
IGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50MTZBcnJheSBm
cm9tIEludDE2QXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKLVBBU1MgU2V0dGluZyBJbnQx
NkFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKLVBB
U1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXkuc2V0KDAsIDEpIHRocmV3IGV4
Y2VwdGlvbi4KLVBBU1MgdGVzdCBzdG9yaW5nIE5hTiBpbiBJbnQxNkFycmF5Ci1QQVNTIHRlc3Qg
SW50MzJBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKLVBBU1MgdGVzdCBJbnQzMkFycmF5IENv
bnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCi1QQVNTIHRlc3QgSW50MzJBcnJheSBDb25z
dHJ1Y3RXaXRoVHlwZWRBcnJheU9mU2lnbmVkVmFsdWVzCi1QQVNTIHRlc3QgaW50ZWdyYWwgYXJy
YXkgdHJ1bmNhdGlvbiBiZWhhdmlvciBmb3IgSW50MzJBcnJheQotVGVzdGluZyBJbnQzMkFycmF5
IEdldFdpdGhPdXRPZlJhbmdlSW5kaWNlcwotUEFTUyBhcnJheVsyXSBpcyB1bmRlZmluZWQuCi1Q
QVNTIGFycmF5Wy0xXSBpcyB1bmRlZmluZWQuCi1QQVNTIGFycmF5WzB4MjAwMDAwMDBdIGlzIHVu
ZGVmaW5lZC4KLVBBU1MgdGVzdCBJbnQzMkFycmF5IE9mZnNldHNBbmRTaXplcwotUEFTUyB0ZXN0
IEludDMyQXJyYXkgU2V0RnJvbVR5cGVkQXJyYXkKLVBBU1MgbmVnYXRpdmVUZXN0IEludDMyQXJy
YXkgU2V0RnJvbVR5cGVkQXJyYXkKLVBBU1MgdGVzdCBJbnQzMkFycmF5IFNldEZyb21BcnJheQot
UEFTUyBuZWdhdGl2ZVRlc3QgSW50MzJBcnJheSBTZXRGcm9tQXJyYXkKLVBBU1MgdGVzdCBJbnQz
MkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgSW50MzJBcnJheSBTdWJhcnJheSBvZmZzZXQgYW5k
IGxlbmd0aCBjbGFtcGluZwotUEFTUyBuZWdhdGl2ZVRlc3QgSW50MzJBcnJheSBTdWJhcnJheQot
UEFTUyB0ZXN0IEludDMyQXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCi1QQVNTIHRlc3QgSW50
MzJBcnJheSBDb25zdHJ1Y3Rpb25Cb3VuZGFyeUNvbmRpdGlvbnMKLVBBU1MgQ29uc3RydWN0aW9u
IG9mIEludDMyQXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29u
c3RydWN0aW9uIG9mIEludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDApIHRocmV3IGV4Y2Vw
dGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MzJBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwg
MCwgMCkgdGhyZXcgZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQzMkFycmF5IHdp
dGggZXhjZXB0aW9uLXRocm93aW5nIGFycmF5LWxpa2Ugb2JqZWN0IGRpZG4ndCBjcmFzaCB1bmV4
cGVjdGVkbHkKLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFu
Z2UgbnVtYmVyIG9mIGVsZW1lbnRzIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rp
b24gb2YgSW50MzJBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgdGhyZXcgYW4gZXhjZXB0
aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBBcnJheUJ1ZmZlciB3aXRoIG5lZ2F0aXZlIHNpemUg
dGhyZXcgZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQzMkFycmF5IHdpdGggbmVn
YXRpdmUgc2l6ZSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEludDMyQXJy
YXkgd2l0aCBuZWdhdGl2ZSBvdXQtb2YtcmFuZ2UgdmFsdWVzIHRocmV3IGFuIGV4Y2VwdGlvbgot
UEFTUyBDb25zdHJ1Y3Rpb24gb2YgSW50MzJBcnJheSB3aXRoIHVuYWxpZ25lZCBvZmZzZXQgdGhy
ZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBJbnQzMkFycmF5IHdpdGggdW5h
bGlnbmVkIGxlbmd0aCB0aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIGh1
Z2UgSW50MzJBcnJheSB0aHJldyBleGNlcHRpb24KLVBBU1MgQXJyYXkgbGVuZ3RocyBtYXRjaGVk
IHdpdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IGNyZWF0aW9uIG9mIEFycmF5QnVmZmVyCi1QQVNT
IG5ldyBJbnQzMkFycmF5KG5ldyBBcnJheUJ1ZmZlcigxOCksIDAsIDIpIHN1Y2NlZWRlZAotVGVz
dGluZyBzdWJhcnJheSBvZiBJbnQzMkFycmF5Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5
cGVTaXplCi1QQVNTIGFycmF5LnN1YmFycmF5KDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIg
LyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnN1YmFycmF5KDQsIC0yMTQ3NDgzNjQ4KS5sZW5n
dGggaXMgMAotUEFTUyBhcnJheS5sZW5ndGggaXMgMAotVGVzdGluZyBzdWJhcnJheSB3aXRoIGRl
ZmF1bHQgaW5wdXRzIG9mIEludDMyQXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlw
ZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoMCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQot
UEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gMgotUEFT
UyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKLVBBU1MgYXJyYXkuc3ViYXJyYXkoLTIx
NDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgU2V0dGluZyBJbnQzMkFy
cmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1Mg
U2V0dGluZyBJbnQzMkFycmF5IGZyb20gSW50MzJBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIEludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIG5l
Z2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgSW50MzJBcnJheSBmcm9tIElu
dDMyQXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIElu
dDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIC0wIG9mZnNldAotUEFTUyBTZXR0aW5nIEludDMyQXJy
YXkgZnJvbSBJbnQzMkFycmF5IHdpdGggLTAgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50MzJBcnJh
eSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgSW50MzJBcnJh
eSBmcm9tIEludDMyQXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKLVBBU1MgU2V0dGluZyBJbnQz
MkFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKLVBBU1MgU2V0dGluZyBJ
bnQzMkFycmF5IGZyb20gSW50MzJBcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAotUEFTUyBT
ZXR0aW5nIEludDMyQXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2Fz
IGNhdWdodAotUEFTUyBhcnJheS5nZXQgaXMgdW5kZWZpbmVkLgotUEFTUyBhcnJheS5zZXQoMCwg
MSkgdGhyZXcgZXhjZXB0aW9uLgotUEFTUyB0ZXN0IHN0b3JpbmcgTmFOIGluIEludDMyQXJyYXkK
LVBBU1MgdGVzdCBVaW50OEFycmF5IFNldEFuZEdldDEwVG8xCi1QQVNTIHRlc3QgVWludDhBcnJh
eSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlVuc2lnbmVkVmFsdWVzCi1QQVNTIHRlc3QgVWludDhBcnJh
eSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJheU9mVW5zaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBpbnRl
Z3JhbCBhcnJheSB0cnVuY2F0aW9uIGJlaGF2aW9yIGZvciBVaW50OEFycmF5Ci1UZXN0aW5nIFVp
bnQ4QXJyYXkgR2V0V2l0aE91dE9mUmFuZ2VJbmRpY2VzCi1QQVNTIGFycmF5WzJdIGlzIHVuZGVm
aW5lZC4KLVBBU1MgYXJyYXlbLTFdIGlzIHVuZGVmaW5lZC4KLVBBU1MgYXJyYXlbMHgyMDAwMDAw
MF0gaXMgdW5kZWZpbmVkLgotUEFTUyB0ZXN0IFVpbnQ4QXJyYXkgT2Zmc2V0c0FuZFNpemVzCi1Q
QVNTIHRlc3QgVWludDhBcnJheSBTZXRGcm9tVHlwZWRBcnJheQotUEFTUyBuZWdhdGl2ZVRlc3Qg
VWludDhBcnJheSBTZXRGcm9tVHlwZWRBcnJheQotUEFTUyB0ZXN0IFVpbnQ4QXJyYXkgU2V0RnJv
bUFycmF5Ci1QQVNTIG5lZ2F0aXZlVGVzdCBVaW50OEFycmF5IFNldEZyb21BcnJheQotUEFTUyB0
ZXN0IFVpbnQ4QXJyYXkgU3ViYXJyYXkKLVBBU1MgdGVzdCBVaW50OEFycmF5IFN1YmFycmF5IG9m
ZnNldCBhbmQgbGVuZ3RoIGNsYW1waW5nCi1QQVNTIG5lZ2F0aXZlVGVzdCBVaW50OEFycmF5IFN1
YmFycmF5Ci1QQVNTIHRlc3QgVWludDhBcnJheSBTZXRCb3VuZGFyeUNvbmRpdGlvbnMKLVBBU1Mg
dGVzdCBVaW50OEFycmF5IENvbnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyBDb25z
dHJ1Y3Rpb24gb2YgVWludDhBcnJheSB3aXRoIG51bGwgYnVmZmVyIHRocmV3IGV4Y2VwdGlvbgot
UEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDhBcnJheSB3aXRoIChudWxsIGJ1ZmZlciwgMCkgdGhy
ZXcgZXhjZXB0aW9uCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBVaW50OEFycmF5IHdpdGggKG51bGwg
YnVmZmVyLCAwLCAwKSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4
QXJyYXkgd2l0aCBleGNlcHRpb24tdGhyb3dpbmcgYXJyYXktbGlrZSBvYmplY3QgZGlkbid0IGNy
YXNoIHVuZXhwZWN0ZWRseQotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDhBcnJheSB3aXRoIG91
dC1vZi1yYW5nZSBudW1iZXIgb2YgZWxlbWVudHMgdGhyZXcgYW4gZXhjZXB0aW9uCi1QQVNTIENv
bnN0cnVjdGlvbiBvZiBVaW50OEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB0aHJldyBh
biBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEFycmF5QnVmZmVyIHdpdGggbmVnYXRp
dmUgc2l6ZSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4QXJyYXkg
d2l0aCBuZWdhdGl2ZSBzaXplIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2Yg
VWludDhBcnJheSB3aXRoIG5lZ2F0aXZlIG91dC1vZi1yYW5nZSB2YWx1ZXMgdGhyZXcgYW4gZXhj
ZXB0aW9uCi1QQVNTIEFycmF5IGxlbmd0aHMgbWF0Y2hlZCB3aXRoIGV4cGxpY2l0IGFuZCBpbXBs
aWNpdCBjcmVhdGlvbiBvZiBBcnJheUJ1ZmZlcgotVGVzdGluZyBzdWJhcnJheSBvZiBVaW50OEFy
cmF5Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNTIGFycmF5LnN1YmFy
cmF5KDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFy
cmF5LnN1YmFycmF5KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAotVGVzdGluZyBzdWJhcnJh
eSB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mIFVpbnQ4QXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlz
IDMyIC8gdHlwZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoMCkubGVuZ3RoIGlzICgzMiAvIHR5
cGVTaXplKQotUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
IC0gMgotUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKLVBBU1MgYXJyYXkuc3Vi
YXJyYXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgU2V0dGlu
ZyBVaW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVn
aHQKLVBBU1MgU2V0dGluZyBVaW50OEFycmF5IGZyb20gVWludDhBcnJheSB3aXRoIG91dC1vZi1y
YW5nZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBhcnJh
eSB3aXRoIG5lZ2F0aXZlIG9mZnNldCB3YXMgY2F1Z2h0Ci1QQVNTIFNldHRpbmcgVWludDhBcnJh
eSBmcm9tIFVpbnQ4QXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBT
ZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBhcnJheSB3aXRoIC0wIG9mZnNldAotUEFTUyBTZXR0aW5n
IFVpbnQ4QXJyYXkgZnJvbSBVaW50OEFycmF5IHdpdGggLTAgb2Zmc2V0Ci1QQVNTIFNldHRpbmcg
VWludDhBcnJheSBmcm9tIGFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1QQVNTIFNldHRpbmcg
VWludDhBcnJheSBmcm9tIFVpbnQ4QXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKLVBBU1MgU2V0
dGluZyBVaW50OEFycmF5IGZyb20gYXJyYXkgd2l0aCBub24taW50ZWdlciBvZmZzZXQKLVBBU1Mg
U2V0dGluZyBVaW50OEFycmF5IGZyb20gVWludDhBcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNl
dAotUEFTUyBTZXR0aW5nIFVpbnQ4QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBs
ZW5ndGggd2FzIGNhdWdodAotUEFTUyBhcnJheS5nZXQgaXMgdW5kZWZpbmVkLgotUEFTUyBhcnJh
eS5zZXQoMCwgMSkgdGhyZXcgZXhjZXB0aW9uLgotUEFTUyB0ZXN0IHN0b3JpbmcgTmFOIGluIFVp
bnQ4QXJyYXkKLVBBU1MgdGVzdCBVaW50OENsYW1wZWRBcnJheSBTZXRBbmRHZXQxMFRvMQotUEFT
UyB0ZXN0IFVpbnQ4Q2xhbXBlZEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5zaWduZWRWYWx1
ZXMKLVBBU1MgdGVzdCBVaW50OENsYW1wZWRBcnJheSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJheU9m
VW5zaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0aW9uIGJlaGF2
aW9yIGZvciBVaW50OENsYW1wZWRBcnJheQotVGVzdGluZyBVaW50OENsYW1wZWRBcnJheSBHZXRX
aXRoT3V0T2ZSYW5nZUluZGljZXMKLVBBU1MgYXJyYXlbMl0gaXMgdW5kZWZpbmVkLgotUEFTUyBh
cnJheVstMV0gaXMgdW5kZWZpbmVkLgotUEFTUyBhcnJheVsweDIwMDAwMDAwXSBpcyB1bmRlZmlu
ZWQuCi1QQVNTIHRlc3QgVWludDhDbGFtcGVkQXJyYXkgT2Zmc2V0c0FuZFNpemVzCi1QQVNTIHRl
c3QgVWludDhDbGFtcGVkQXJyYXkgU2V0RnJvbVR5cGVkQXJyYXkKLVBBU1MgbmVnYXRpdmVUZXN0
IFVpbnQ4Q2xhbXBlZEFycmF5IFNldEZyb21UeXBlZEFycmF5Ci1QQVNTIHRlc3QgVWludDhDbGFt
cGVkQXJyYXkgU2V0RnJvbUFycmF5Ci1QQVNTIG5lZ2F0aXZlVGVzdCBVaW50OENsYW1wZWRBcnJh
eSBTZXRGcm9tQXJyYXkKLVBBU1MgdGVzdCBVaW50OENsYW1wZWRBcnJheSBTdWJhcnJheQotUEFT
UyB0ZXN0IFVpbnQ4Q2xhbXBlZEFycmF5IFN1YmFycmF5IG9mZnNldCBhbmQgbGVuZ3RoIGNsYW1w
aW5nCi1QQVNTIG5lZ2F0aXZlVGVzdCBVaW50OENsYW1wZWRBcnJheSBTdWJhcnJheQotUEFTUyB0
ZXN0IFVpbnQ4Q2xhbXBlZEFycmF5IFNldEJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyB0ZXN0IFVp
bnQ4Q2xhbXBlZEFycmF5IENvbnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyBDb25z
dHJ1Y3Rpb24gb2YgVWludDhDbGFtcGVkQXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNl
cHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IHdpdGggKG51bGwg
YnVmZmVyLCAwKSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xh
bXBlZEFycmF5IHdpdGggKG51bGwgYnVmZmVyLCAwLCAwKSB0aHJldyBleGNlcHRpb24KLVBBU1Mg
Q29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IHdpdGggZXhjZXB0aW9uLXRocm93aW5n
IGFycmF5LWxpa2Ugb2JqZWN0IGRpZG4ndCBjcmFzaCB1bmV4cGVjdGVkbHkKLVBBU1MgQ29uc3Ry
dWN0aW9uIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG51bWJlciBvZiBl
bGVtZW50cyB0aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xh
bXBlZEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB0aHJldyBhbiBleGNlcHRpb24KLVBB
U1MgQ29uc3RydWN0aW9uIG9mIEFycmF5QnVmZmVyIHdpdGggbmVnYXRpdmUgc2l6ZSB0aHJldyBl
eGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IHdpdGggbmVn
YXRpdmUgc2l6ZSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQ4Q2xh
bXBlZEFycmF5IHdpdGggbmVnYXRpdmUgb3V0LW9mLXJhbmdlIHZhbHVlcyB0aHJldyBhbiBleGNl
cHRpb24KLVBBU1MgQXJyYXkgbGVuZ3RocyBtYXRjaGVkIHdpdGggZXhwbGljaXQgYW5kIGltcGxp
Y2l0IGNyZWF0aW9uIG9mIEFycmF5QnVmZmVyCi1UZXN0aW5nIHN1YmFycmF5IG9mIFVpbnQ4Q2xh
bXBlZEFycmF5Ci1QQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNTIGFycmF5
LnN1YmFycmF5KDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1Q
QVNTIGFycmF5LnN1YmFycmF5KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAotVGVzdGluZyBz
dWJhcnJheSB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mIFVpbnQ4Q2xhbXBlZEFycmF5Ci1QQVNTIGFy
cmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCi1QQVNTIGFycmF5LnN1YmFycmF5KDApLmxlbmd0
aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgYXJyYXkuc3ViYXJyYXkoMikubGVuZ3RoIGlzICgz
MiAvIHR5cGVTaXplKSAtIDIKLVBBU1MgYXJyYXkuc3ViYXJyYXkoLTIpLmxlbmd0aCBpcyAyCi1Q
QVNTIGFycmF5LnN1YmFycmF5KC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
Ci1QQVNTIFNldHRpbmcgVWludDhDbGFtcGVkQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1y
YW5nZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQ4Q2xhbXBlZEFycmF5IGZy
b20gVWludDhDbGFtcGVkQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQK
LVBBU1MgU2V0dGluZyBVaW50OENsYW1wZWRBcnJheSBmcm9tIGFycmF5IHdpdGggbmVnYXRpdmUg
b2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0dGluZyBVaW50OENsYW1wZWRBcnJheSBmcm9tIFVp
bnQ4Q2xhbXBlZEFycmF5IHdpdGggbmVnYXRpdmUgb2Zmc2V0IHdhcyBjYXVnaHQKLVBBU1MgU2V0
dGluZyBVaW50OENsYW1wZWRBcnJheSBmcm9tIGFycmF5IHdpdGggLTAgb2Zmc2V0Ci1QQVNTIFNl
dHRpbmcgVWludDhDbGFtcGVkQXJyYXkgZnJvbSBVaW50OENsYW1wZWRBcnJheSB3aXRoIC0wIG9m
ZnNldAotUEFTUyBTZXR0aW5nIFVpbnQ4Q2xhbXBlZEFycmF5IGZyb20gYXJyYXkgd2l0aCBib3Vu
ZGFyeSBvZmZzZXQKLVBBU1MgU2V0dGluZyBVaW50OENsYW1wZWRBcnJheSBmcm9tIFVpbnQ4Q2xh
bXBlZEFycmF5IHdpdGggYm91bmRhcnkgb2Zmc2V0Ci1QQVNTIFNldHRpbmcgVWludDhDbGFtcGVk
QXJyYXkgZnJvbSBhcnJheSB3aXRoIG5vbi1pbnRlZ2VyIG9mZnNldAotUEFTUyBTZXR0aW5nIFVp
bnQ4Q2xhbXBlZEFycmF5IGZyb20gVWludDhDbGFtcGVkQXJyYXkgd2l0aCBub24taW50ZWdlciBv
ZmZzZXQKLVBBU1MgU2V0dGluZyBVaW50OENsYW1wZWRBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0
aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0Ci1QQVNTIGFycmF5LmdldCBpcyB1bmRlZmluZWQu
Ci1QQVNTIGFycmF5LnNldCgwLCAxKSB0aHJldyBleGNlcHRpb24uCi1QQVNTIHRlc3Qgc3Rvcmlu
ZyBOYU4gaW4gVWludDhDbGFtcGVkQXJyYXkKLVBBU1MgdGVzdCBVaW50MTZBcnJheSBTZXRBbmRH
ZXQxMFRvMQotUEFTUyB0ZXN0IFVpbnQxNkFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5zaWdu
ZWRWYWx1ZXMKLVBBU1MgdGVzdCBVaW50MTZBcnJheSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJheU9m
VW5zaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBpbnRlZ3JhbCBhcnJheSB0cnVuY2F0aW9uIGJlaGF2
aW9yIGZvciBVaW50MTZBcnJheQotVGVzdGluZyBVaW50MTZBcnJheSBHZXRXaXRoT3V0T2ZSYW5n
ZUluZGljZXMKLVBBU1MgYXJyYXlbMl0gaXMgdW5kZWZpbmVkLgotUEFTUyBhcnJheVstMV0gaXMg
dW5kZWZpbmVkLgotUEFTUyBhcnJheVsweDIwMDAwMDAwXSBpcyB1bmRlZmluZWQuCi1QQVNTIHRl
c3QgVWludDE2QXJyYXkgT2Zmc2V0c0FuZFNpemVzCi1QQVNTIHRlc3QgVWludDE2QXJyYXkgU2V0
RnJvbVR5cGVkQXJyYXkKLVBBU1MgbmVnYXRpdmVUZXN0IFVpbnQxNkFycmF5IFNldEZyb21UeXBl
ZEFycmF5Ci1QQVNTIHRlc3QgVWludDE2QXJyYXkgU2V0RnJvbUFycmF5Ci1QQVNTIG5lZ2F0aXZl
VGVzdCBVaW50MTZBcnJheSBTZXRGcm9tQXJyYXkKLVBBU1MgdGVzdCBVaW50MTZBcnJheSBTdWJh
cnJheQotUEFTUyB0ZXN0IFVpbnQxNkFycmF5IFN1YmFycmF5IG9mZnNldCBhbmQgbGVuZ3RoIGNs
YW1waW5nCi1QQVNTIG5lZ2F0aXZlVGVzdCBVaW50MTZBcnJheSBTdWJhcnJheQotUEFTUyB0ZXN0
IFVpbnQxNkFycmF5IFNldEJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyB0ZXN0IFVpbnQxNkFycmF5
IENvbnN0cnVjdGlvbkJvdW5kYXJ5Q29uZGl0aW9ucwotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWlu
dDE2QXJyYXkgd2l0aCBudWxsIGJ1ZmZlciB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0
aW9uIG9mIFVpbnQxNkFycmF5IHdpdGggKG51bGwgYnVmZmVyLCAwKSB0aHJldyBleGNlcHRpb24K
LVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGggKG51bGwgYnVmZmVyLCAwLCAw
KSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGgg
ZXhjZXB0aW9uLXRocm93aW5nIGFycmF5LWxpa2Ugb2JqZWN0IGRpZG4ndCBjcmFzaCB1bmV4cGVj
dGVkbHkKLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGggb3V0LW9mLXJhbmdl
IG51bWJlciBvZiBlbGVtZW50cyB0aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9u
IG9mIFVpbnQxNkFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB0aHJldyBhbiBleGNlcHRp
b24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIEFycmF5QnVmZmVyIHdpdGggbmVnYXRpdmUgc2l6ZSB0
aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGggbmVn
YXRpdmUgc2l6ZSB0aHJldyBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFy
cmF5IHdpdGggbmVnYXRpdmUgb3V0LW9mLXJhbmdlIHZhbHVlcyB0aHJldyBhbiBleGNlcHRpb24K
LVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGggdW5hbGlnbmVkIG9mZnNldCB0
aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9mIFVpbnQxNkFycmF5IHdpdGgg
dW5hbGlnbmVkIGxlbmd0aCB0aHJldyBhbiBleGNlcHRpb24KLVBBU1MgQ29uc3RydWN0aW9uIG9m
IGh1Z2UgVWludDE2QXJyYXkgdGhyZXcgZXhjZXB0aW9uCi1QQVNTIEFycmF5IGxlbmd0aHMgbWF0
Y2hlZCB3aXRoIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBjcmVhdGlvbiBvZiBBcnJheUJ1ZmZlcgot
UEFTUyBuZXcgVWludDE2QXJyYXkobmV3IEFycmF5QnVmZmVyKDkpLCAwLCAyKSBzdWNjZWVkZWQK
LVRlc3Rpbmcgc3ViYXJyYXkgb2YgVWludDE2QXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMy
IC8gdHlwZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlz
ICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc3ViYXJyYXkoNCwgLTIxNDc0ODM2NDgp
Lmxlbmd0aCBpcyAwCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyAwCi1UZXN0aW5nIHN1YmFycmF5IHdp
dGggZGVmYXVsdCBpbnB1dHMgb2YgVWludDE2QXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMy
IC8gdHlwZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoMCkubGVuZ3RoIGlzICgzMiAvIHR5cGVT
aXplKQotUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0g
MgotUEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKLVBBU1MgYXJyYXkuc3ViYXJy
YXkoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgU2V0dGluZyBV
aW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0
Ci1QQVNTIFNldHRpbmcgVWludDE2QXJyYXkgZnJvbSBVaW50MTZBcnJheSB3aXRoIG91dC1vZi1y
YW5nZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gYXJy
YXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQxNkFy
cmF5IGZyb20gVWludDE2QXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFT
UyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0
dGluZyBVaW50MTZBcnJheSBmcm9tIFVpbnQxNkFycmF5IHdpdGggLTAgb2Zmc2V0Ci1QQVNTIFNl
dHRpbmcgVWludDE2QXJyYXkgZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBT
ZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gVWludDE2QXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQK
LVBBU1MgU2V0dGluZyBVaW50MTZBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zm
c2V0Ci1QQVNTIFNldHRpbmcgVWludDE2QXJyYXkgZnJvbSBVaW50MTZBcnJheSB3aXRoIG5vbi1p
bnRlZ2VyIG9mZnNldAotUEFTUyBTZXR0aW5nIFVpbnQxNkFycmF5IGZyb20gZmFrZSBhcnJheSB3
aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKLVBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5l
ZC4KLVBBU1MgYXJyYXkuc2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4KLVBBU1MgdGVzdCBzdG9y
aW5nIE5hTiBpbiBVaW50MTZBcnJheQotUEFTUyB0ZXN0IFVpbnQzMkFycmF5IFNldEFuZEdldDEw
VG8xCi1QQVNTIHRlc3QgVWludDMyQXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZh
bHVlcwotUEFTUyB0ZXN0IFVpbnQzMkFycmF5IENvbnN0cnVjdFdpdGhUeXBlZEFycmF5T2ZVbnNp
Z25lZFZhbHVlcwotUEFTUyB0ZXN0IGludGVncmFsIGFycmF5IHRydW5jYXRpb24gYmVoYXZpb3Ig
Zm9yIFVpbnQzMkFycmF5Ci1UZXN0aW5nIFVpbnQzMkFycmF5IEdldFdpdGhPdXRPZlJhbmdlSW5k
aWNlcwotUEFTUyBhcnJheVsyXSBpcyB1bmRlZmluZWQuCi1QQVNTIGFycmF5Wy0xXSBpcyB1bmRl
ZmluZWQuCi1QQVNTIGFycmF5WzB4MjAwMDAwMDBdIGlzIHVuZGVmaW5lZC4KLVBBU1MgdGVzdCBV
aW50MzJBcnJheSBPZmZzZXRzQW5kU2l6ZXMKLVBBU1MgdGVzdCBVaW50MzJBcnJheSBTZXRGcm9t
VHlwZWRBcnJheQotUEFTUyBuZWdhdGl2ZVRlc3QgVWludDMyQXJyYXkgU2V0RnJvbVR5cGVkQXJy
YXkKLVBBU1MgdGVzdCBVaW50MzJBcnJheSBTZXRGcm9tQXJyYXkKLVBBU1MgbmVnYXRpdmVUZXN0
IFVpbnQzMkFycmF5IFNldEZyb21BcnJheQotUEFTUyB0ZXN0IFVpbnQzMkFycmF5IFN1YmFycmF5
Ci1QQVNTIHRlc3QgVWludDMyQXJyYXkgU3ViYXJyYXkgb2Zmc2V0IGFuZCBsZW5ndGggY2xhbXBp
bmcKLVBBU1MgbmVnYXRpdmVUZXN0IFVpbnQzMkFycmF5IFN1YmFycmF5Ci1QQVNTIHRlc3QgVWlu
dDMyQXJyYXkgU2V0Qm91bmRhcnlDb25kaXRpb25zCi1QQVNTIHRlc3QgVWludDMyQXJyYXkgQ29u
c3RydWN0aW9uQm91bmRhcnlDb25kaXRpb25zCi1QQVNTIENvbnN0cnVjdGlvbiBvZiBVaW50MzJB
cnJheSB3aXRoIG51bGwgYnVmZmVyIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24g
b2YgVWludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDApIHRocmV3IGV4Y2VwdGlvbgotUEFT
UyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCAobnVsbCBidWZmZXIsIDAsIDApIHRo
cmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCBleGNl
cHRpb24tdGhyb3dpbmcgYXJyYXktbGlrZSBvYmplY3QgZGlkbid0IGNyYXNoIHVuZXhwZWN0ZWRs
eQotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2UgbnVt
YmVyIG9mIGVsZW1lbnRzIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2Yg
VWludDMyQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHRocmV3IGFuIGV4Y2VwdGlvbgot
UEFTUyBDb25zdHJ1Y3Rpb24gb2YgQXJyYXlCdWZmZXIgd2l0aCBuZWdhdGl2ZSBzaXplIHRocmV3
IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCBuZWdhdGl2
ZSBzaXplIHRocmV3IGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkg
d2l0aCBuZWdhdGl2ZSBvdXQtb2YtcmFuZ2UgdmFsdWVzIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFT
UyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCB1bmFsaWduZWQgb2Zmc2V0IHRocmV3
IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgVWludDMyQXJyYXkgd2l0aCB1bmFs
aWduZWQgbGVuZ3RoIHRocmV3IGFuIGV4Y2VwdGlvbgotUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVn
ZSBVaW50MzJBcnJheSB0aHJldyBleGNlcHRpb24KLVBBU1MgQXJyYXkgbGVuZ3RocyBtYXRjaGVk
IHdpdGggZXhwbGljaXQgYW5kIGltcGxpY2l0IGNyZWF0aW9uIG9mIEFycmF5QnVmZmVyCi1QQVNT
IG5ldyBVaW50MzJBcnJheShuZXcgQXJyYXlCdWZmZXIoMTgpLCAwLCAyKSBzdWNjZWVkZWQKLVRl
c3Rpbmcgc3ViYXJyYXkgb2YgVWludDMyQXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8g
dHlwZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgz
MiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc3ViYXJyYXkoNCwgLTIxNDc0ODM2NDgpLmxl
bmd0aCBpcyAwCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyAwCi1UZXN0aW5nIHN1YmFycmF5IHdpdGgg
ZGVmYXVsdCBpbnB1dHMgb2YgVWludDMyQXJyYXkKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8g
dHlwZVNpemUKLVBBU1MgYXJyYXkuc3ViYXJyYXkoMCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXpl
KQotUEFTUyBhcnJheS5zdWJhcnJheSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gMgot
UEFTUyBhcnJheS5zdWJhcnJheSgtMikubGVuZ3RoIGlzIDIKLVBBU1MgYXJyYXkuc3ViYXJyYXko
LTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKLVBBU1MgU2V0dGluZyBVaW50
MzJBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0Ci1Q
QVNTIFNldHRpbmcgVWludDMyQXJyYXkgZnJvbSBVaW50MzJBcnJheSB3aXRoIG91dC1vZi1yYW5n
ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQzMkFycmF5IGZyb20gYXJyYXkg
d2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBTZXR0aW5nIFVpbnQzMkFycmF5
IGZyb20gVWludDMyQXJyYXkgd2l0aCBuZWdhdGl2ZSBvZmZzZXQgd2FzIGNhdWdodAotUEFTUyBT
ZXR0aW5nIFVpbnQzMkFycmF5IGZyb20gYXJyYXkgd2l0aCAtMCBvZmZzZXQKLVBBU1MgU2V0dGlu
ZyBVaW50MzJBcnJheSBmcm9tIFVpbnQzMkFycmF5IHdpdGggLTAgb2Zmc2V0Ci1QQVNTIFNldHRp
bmcgVWludDMyQXJyYXkgZnJvbSBhcnJheSB3aXRoIGJvdW5kYXJ5IG9mZnNldAotUEFTUyBTZXR0
aW5nIFVpbnQzMkFycmF5IGZyb20gVWludDMyQXJyYXkgd2l0aCBib3VuZGFyeSBvZmZzZXQKLVBB
U1MgU2V0dGluZyBVaW50MzJBcnJheSBmcm9tIGFycmF5IHdpdGggbm9uLWludGVnZXIgb2Zmc2V0
Ci1QQVNTIFNldHRpbmcgVWludDMyQXJyYXkgZnJvbSBVaW50MzJBcnJheSB3aXRoIG5vbi1pbnRl
Z2VyIG9mZnNldAotUEFTUyBTZXR0aW5nIFVpbnQzMkFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRo
IGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKLVBBU1MgYXJyYXkuZ2V0IGlzIHVuZGVmaW5lZC4K
LVBBU1MgYXJyYXkuc2V0KDAsIDEpIHRocmV3IGV4Y2VwdGlvbi4KLVBBU1MgdGVzdCBzdG9yaW5n
IE5hTiBpbiBVaW50MzJBcnJheQotVGVzdCBwYXNzZWQuCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTI0OiBTeW50YXhFcnJvcjogVW5leHBl
Y3RlZCBFT0YKK0ZBSUwgc3VjY2Vzc2Z1bGx5UGFyc2VkIHNob3VsZCBiZSB0cnVlIChvZiB0eXBl
IGJvb2xlYW4pLiBXYXMgdW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCiAKIFRFU1QgQ09N
UExFVEUKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10
ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTksMjYgKzExOSwxMiBAQCBmdW5jdGlvbiB0ZXN0SW5oZXJpdGFuY2VIaWVyYXJjaHkoKSB7CiAK
ICAgdHJ5IHsKICAgICB2YXIgZm9vID0gQXJyYXlCdWZmZXJWaWV3OwotICAgIHRlc3RQYXNzZWQo
J0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5k
ZWQgYXR0cmlidXRlIGFuZCBzaG91bGQgYmUgZGVmaW5lZCcpOwotCi0gICAgc2hvdWxkQmUoJ25l
dyBJbnQ4QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAg
IHNob3VsZEJlKCduZXcgVWludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycs
ICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBJbnQxNkFy
cmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRC
ZSgnbmV3IFVpbnQxNkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUn
KTsKLSAgICBzaG91bGRCZSgnbmV3IEludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZl
clZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDMyQXJyYXkoMSkgaW5zdGFu
Y2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRmxvYXQz
MkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91
bGRCZSgnbmV3IEZsb2F0NjRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0
cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpIGlu
c3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLQotICAgIHNob3VsZFRocm93VHlw
ZUVycm9yKGZ1bmN0aW9uKCkgeyBuZXcgQXJyYXlCdWZmZXJWaWV3KCkgfSwgIm5ldyBBcnJheUJ1
ZmZlclZpZXcoKSIpOworICAgIHRlc3RGYWlsZWQoIkFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUg
dW5kZWZpbmVkIGJ1dCBpcyIpOwogICB9IGNhdGNoIChlKSB7Ci0gICAgdGVzdEZhaWxlZCgnQXJy
YXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBh
dHRyaWJ1dGUgYnV0IHdhcyBub3QgZGVmaW5lZCcpOworICAgIHRlc3RQYXNzZWQoJ0FycmF5QnVm
ZmVyVmlldyBzaG91bGQgYmUgdW5kZWZpbmVkIGFuZCBpcyk7CiAgIH0KIAotICAvLyBUaGVyZSBp
cyBjdXJyZW50bHkgb25seSBvbmUga2luZCBvZiB2aWV3IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90
aGVyCi0gIHNob3VsZEJlKCduZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50
OEFycmF5JywgJ3RydWUnKTsKKyAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBp
bnN0YW5jZW9mIFVpbnQ4QXJyYXknLCBmYWxzZSk7CiB9CiAKIC8vCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RhdGEtdmlldy1jcmFzaC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2RhdGEtdmlldy1jcmFzaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsOCAr
Miw4IEBAIFRlc3QgdGhhdCBEYXRhVmlldyBkb2VzIG5vdCBjcmFzaCB3aXRoIGIKIAogT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgogCi1QQVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVm
ZmVyLCAtNDUwMDAwMDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFNpemUgaXMgdG9v
IGxhcmdlIChvciBpcyBuZWdhdGl2ZSkuLgotUEFTUyB2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5
LmJ1ZmZlciwgLTQ1MDAwMDAwMDAsIDQ1MDAwMDAwMDApIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRpdmUpLi4KK1BBU1MgdmlldyA9IG5l
dyBEYXRhVmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAwKSB0aHJldyBleGNlcHRpb24gUmFu
Z2VFcnJvcjogQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVmZmVyLgor
UEFTUyB2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5LmJ1ZmZlciwgLTQ1MDAwMDAwMDAsIDQ1MDAw
MDAwMDApIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBCeXRlIG9mZnNldCBhbmQgbGVuZ3Ro
IG91dCBvZiByYW5nZSBvZiBidWZmZXIuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Nj
cmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZl
ci10cmFuc2Zlci1vZi1jb250cm9sLmpzCShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2Yt
Y29udHJvbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQCB2YXIgYmFzaWNCdWZm
ZXJUeXBlcyA9CiAgICAgWyJVaW50MzIiLCBVaW50MzJBcnJheSwgNF0sCiAgICAgWyJJbnQ4Iiwg
SW50OEFycmF5LCAxXSwKICAgICBbIlVpbnQ4IiwgVWludDhBcnJheSwgMV0sCisgICAgWyJVaW50
OENsYW1wZWQiLCBVaW50OENsYW1wZWRBcnJheSwgMV0sCiAgICAgWyJJbnQxNiIsIEludDE2QXJy
YXksIDJdLAogICAgIFsiVWludDE2IiwgVWludDE2QXJyYXksIDJdLAogICAgIFsiRmxvYXQzMiIs
IEZsb2F0MzJBcnJheSwgNF0sCkBAIC0yMDAsNyArMjAxLDcgQEAgZnVuY3Rpb24gY2hlY2tWaWV3
KHRlc3ROYW1lLCB0eXBlZEFycmF5VAogICAgIH0KICAgICBpZiAodmlldy5idWZmZXIuYnl0ZUxl
bmd0aCAhPT0gYXJyYXlTaXplIHx8CiAgICAgICAgICghKHZpZXcgaW5zdGFuY2VvZiBEYXRhVmll
dykgJiYgdmlldy5sZW5ndGggIT09IGFycmF5RWZmZWN0aXZlU2l6ZSAvIHZpZXcuQllURVNfUEVS
X0VMRU1FTlQpKSB7Ci0gICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB0
aGUgd3JvbmcgbGVuZ3RoICgiICsgdmlldy5sZW5ndGggKyAiKSIpOworICAgICAgICB0ZXN0RmFp
bGVkKHRlc3ROYW1lICsgIjogdmlldyBoYXMgdGhlIHdyb25nIGxlbmd0aCAoIiArIHZpZXcubGVu
Z3RoICsgIiBpbnN0ZWFkIG9mICIgKyBhcnJheUVmZmVjdGl2ZVNpemUgKyAiIC8gIiArIHZpZXcu
QllURVNfUEVSX0VMRU1FTlQgKyAiKSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmICh2aWV3LmJ5dGVPZmZzZXQgIT09IGFycmF5T2Zmc2V0KSB7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVjdG9y
LWFzLWEtZnVuY3Rpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsMjUgKzMsMTUgQEAgVGhpcyB0ZXN0cyBpZiBUeXBlRXJy
b3IgaXMgdGhyb3duIG9yIG5vdAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mg
QXJyYXlCdWZmZXIoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdBcnJheUJ1ZmZlcigpJykuCiBT
S0lQIEF1ZGlvQ29udGV4dCBpcyBub3QgaW1wbGVtZW50ZWQuCiBQQVNTIEZvcm1EYXRhKCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRm9ybURhdGFDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5j
dGlvbiAoZXZhbHVhdGluZyAnRm9ybURhdGEoKScpLgotUEFTUyBEYXRhVmlldygpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IERhdGFWaWV3Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24g
KGV2YWx1YXRpbmcgJ0RhdGFWaWV3KCknKS4KIFBBU1MgRXZlbnRTb3VyY2UoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBFdmVudFNvdXJjZUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9u
IChldmFsdWF0aW5nICdFdmVudFNvdXJjZSgpJykuCiBQQVNTIEZpbGVSZWFkZXIoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBGaWxlUmVhZGVyQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rp
b24gKGV2YWx1YXRpbmcgJ0ZpbGVSZWFkZXIoKScpLgotUEFTUyBGbG9hdDMyQXJyYXkoKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBGbG9hdDMyQXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBm
dW5jdGlvbiAoZXZhbHVhdGluZyAnRmxvYXQzMkFycmF5KCknKS4KLVBBU1MgRmxvYXQ2NEFycmF5
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmxvYXQ2NEFycmF5Q29uc3RydWN0b3IgaXMg
bm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0Zsb2F0NjRBcnJheSgpJykuCiBQQVNTIEF1ZGlv
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXVkaW9Db25zdHJ1Y3RvciBpcyBub3QgYSBm
dW5jdGlvbiAoZXZhbHVhdGluZyAnQXVkaW8oKScpLgogUEFTUyBJbWFnZSgpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEltYWdlQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1
YXRpbmcgJ0ltYWdlKCknKS4KIFBBU1MgT3B0aW9uKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogT3B0aW9uQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ09wdGlv
bigpJykuCi1QQVNTIEludDE2QXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnQx
NkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0ludDE2QXJy
YXkoKScpLgotUEFTUyBJbnQzMkFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50
MzJBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbnQzMkFy
cmF5KCknKS4KLVBBU1MgSW50OEFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50
OEFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0ludDhBcnJh
eSgpJykuCiBQQVNTIE1lc3NhZ2VDaGFubmVsKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAn
TWVzc2FnZUNoYW5uZWwoKScpLgogUEFTUyBTaGFyZWRXb3JrZXIoKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBTaGFyZWRXb3JrZXJDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZh
bHVhdGluZyAnU2hhcmVkV29ya2VyKCknKS4KLVBBU1MgVWludDE2QXJyYXkoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBVaW50MTZBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9u
IChldmFsdWF0aW5nICdVaW50MTZBcnJheSgpJykuCi1QQVNTIFVpbnQzMkFycmF5KCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogVWludDMyQXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5j
dGlvbiAoZXZhbHVhdGluZyAnVWludDMyQXJyYXkoKScpLgotUEFTUyBVaW50OEFycmF5KCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVWludDhBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1
bmN0aW9uIChldmFsdWF0aW5nICdVaW50OEFycmF5KCknKS4KIFBBU1MgV2ViS2l0Q1NTTWF0cml4
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Ig
aXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1dlYktpdENTU01hdHJpeCgpJykuCiBQQVNT
IFdlYktpdFBvaW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogV2ViS2l0UG9pbnRDb25z
dHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnV2ViS2l0UG9pbnQoKScpLgog
UEFTUyBXZWJTb2NrZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBXZWJTb2NrZXRDb25z
dHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnV2ViU29ja2V0KCknKS4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9u
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVj
dG9yLWFzLWEtZnVuY3Rpb24uaHRtbAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24uaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtNiw3ICs2LDcgQEAKIAogZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgaWYgVHlwZUVy
cm9yIGlzIHRocm93biBvciBub3Qgd2hlbiB3ZSBjYWxsIGEgY29uc3RydWN0b3IgYXMgYSBub3Jt
YWwgZnVuY3Rpb24uIik7CiAKLXZhciB0ZXN0X2NvbnN0cnVjdG9ycyA9IFsiQXJyYXlCdWZmZXIi
LCAiQXVkaW9Db250ZXh0IiwgIkZvcm1EYXRhIiwgIkRhdGFWaWV3IiwgIkV2ZW50U291cmNlIiwg
IkZpbGVSZWFkZXIiLCAiRmxvYXQzMkFycmF5IiwgIkZsb2F0NjRBcnJheSIsICJBdWRpbyIsICJJ
bWFnZSIsICJPcHRpb24iLCAiSW50MTZBcnJheSIsICJJbnQzMkFycmF5IiwgIkludDhBcnJheSIs
ICJNZXNzYWdlQ2hhbm5lbCIsICJTaGFyZWRXb3JrZXIiLCAiVWludDE2QXJyYXkiLCAiVWludDMy
QXJyYXkiLCAiVWludDhBcnJheSIsICJXZWJLaXRDU1NNYXRyaXgiLCAiV2ViS2l0UG9pbnQiLCAi
V2ViU29ja2V0IiwgIldvcmtlciIsICJYTUxIdHRwUmVxdWVzdCIsICJYU0xUUHJvY2Vzc29yIl07
Cit2YXIgdGVzdF9jb25zdHJ1Y3RvcnMgPSBbIkF1ZGlvQ29udGV4dCIsICJGb3JtRGF0YSIsICJF
dmVudFNvdXJjZSIsICJGaWxlUmVhZGVyIiwgIkF1ZGlvIiwgIkltYWdlIiwgIk9wdGlvbiIsICJN
ZXNzYWdlQ2hhbm5lbCIsICJTaGFyZWRXb3JrZXIiLCAiV2ViS2l0Q1NTTWF0cml4IiwgIldlYktp
dFBvaW50IiwgIldlYlNvY2tldCIsICJXb3JrZXIiLCAiWE1MSHR0cFJlcXVlc3QiLCAiWFNMVFBy
b2Nlc3NvciJdOwogCiB0ZXN0X2NvbnN0cnVjdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChjb25zdHJ1
Y3RvcikgewogICAgIGlmIChldmFsKCJ3aW5kb3cuIiArIGNvbnN0cnVjdG9yKSkKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGguaHRtbAkocmV2aXNpb24gMTU0
MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGguaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTksMTQgKzE5LDE0IEBAIHNob3VsZEJlKCdEYXRhVmlldy5sZW5ndGgn
LCAnMScpOwogc2hvdWxkQmUoJ0Vycm9yRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3VsZEJlKCdF
dmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0V2ZW50U291cmNlLmxlbmd0aCcsICcxJyk7
Ci1zaG91bGRCZSgnRmxvYXQzMkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnRmxvYXQ2
NEFycmF5Lmxlbmd0aCcsICcxJyk7CitzaG91bGRCZSgnRmxvYXQzMkFycmF5Lmxlbmd0aCcsICcz
Jyk7CitzaG91bGRCZSgnRmxvYXQ2NEFycmF5Lmxlbmd0aCcsICczJyk7CiBzaG91bGRCZSgnRmls
ZVJlYWRlci5sZW5ndGgnLCAnMCcpOwogc2hvdWxkQmUoJ0ZpbGVSZWFkZXJTeW5jLmxlbmd0aCcs
ICcwJyk7CiBzaG91bGRCZSgnSGFzaENoYW5nZUV2ZW50Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRC
ZSgnSW50MTZBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ0ludDMyQXJyYXkubGVuZ3Ro
JywgJzEnKTsKLXNob3VsZEJlKCdJbnQ4QXJyYXkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdJ
bnQxNkFycmF5Lmxlbmd0aCcsICczJyk7CitzaG91bGRCZSgnSW50MzJBcnJheS5sZW5ndGgnLCAn
MycpOworc2hvdWxkQmUoJ0ludDhBcnJheS5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ0ludGVu
dC5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ01lZGlhQ29udHJvbGxlci5sZW5ndGgnLCAnMCcp
Owogc2hvdWxkQmUoJ01lZGlhU3RyZWFtLmxlbmd0aCcsICcwJyk7CkBAIC00MiwxMCArNDIsMTAg
QEAgc2hvdWxkQmUoJ1NoYXJlZFdvcmtlci5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1N0b3Jh
Z2VFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1RleHRUcmFja0N1ZS5sZW5ndGgnLCAn
MycpOwogc2hvdWxkQmUoJ1RyYWNrRXZlbnQubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdVaW50
MTZBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQzMkFycmF5Lmxlbmd0aCcsICcx
Jyk7Ci1zaG91bGRCZSgnVWludDhBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQ4
Q2xhbXBlZEFycmF5Lmxlbmd0aCcsICcxJyk7CitzaG91bGRCZSgnVWludDE2QXJyYXkubGVuZ3Ro
JywgJzMnKTsKK3Nob3VsZEJlKCdVaW50MzJBcnJheS5sZW5ndGgnLCAnMycpOworc2hvdWxkQmUo
J1VpbnQ4QXJyYXkubGVuZ3RoJywgJzMnKTsKK3Nob3VsZEJlKCdVaW50OENsYW1wZWRBcnJheS5s
ZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ1dlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCcsICcxJyk7
CiBzaG91bGRCZSgnV2ViS2l0QW5pbWF0aW9uRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3VsZEJl
KCdXZWJLaXRDU1NNYXRyaXgubGVuZ3RoJywgJzAnKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVj
dG9ycy1hdHRyaWJ1dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
NTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmli
dXRlcy1kZWRpY2F0ZWQtd29ya2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCwy
MSArNCwxMSBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAog
U3RhcnRpbmcgd29ya2VyOiBzY3JpcHQtdGVzdHMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1
dGVzLmpzCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnQXJyYXlCdWZmZXInKS52YWx1ZSBpcyBBcnJheUJ1ZmZlcgotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFz
T3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9wZXJ0eSgn
c2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dv
cmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZl
cicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLnZhbHVlIGlzIEJsb2IKIFBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0Jsb2InKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
RGF0YVZpZXcnKS52YWx1ZSBpcyBEYXRhVmlldwotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRh
VmlldycpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVl
CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS52YWx1ZSBpcyBEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlJykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0
JykgaXMgZmFsc2UKQEAgLTM5LDMxICsyOSw2IEBAIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3IKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdGaWxlUmVhZGVyU3luYycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ZpbGVSZWFkZXJTeW5jJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJyku
Y29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS52YWx1ZSBpcyBGbG9hdDMyQXJyYXkK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
bG9hdDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXkn
KS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5lbnVtZXJhYmxl
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnRmxvYXQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXkn
KS52YWx1ZSBpcyBGbG9hdDY0QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0
JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
bG9hdDY0QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuY29uZmlndXJh
YmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdJbnQxNkFycmF5JykudmFsdWUgaXMgSW50MTZBcnJheQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dv
cmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykudmFsdWUgaXMgSW50MzJBcnJheQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0lu
dDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuaGFz
T3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdJbnQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS52YWx1ZSBpcyBJ
bnQ4QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJy
YXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5lbnVtZXJhYmxl
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50OEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcp
LnZhbHVlIGlzIE1lc3NhZ2VDaGFubmVsCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS5oYXNPd25Qcm9wZXJ0eSgn
Z2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQpAQCAtNzksMjYgKzQ0LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VSTCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmVudW1lcmFi
bGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVUkwnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykudmFsdWUg
aXMgVWludDE2QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXkn
KS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1Vp
bnQzMkFycmF5JykudmFsdWUgaXMgVWludDMyQXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093blByb3Bl
cnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlz
IGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnVWludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS52YWx1ZSBpcyBVaW50OEFycmF5Ci1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJh
eScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4
QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykudmFsdWUgaXMg
VWludDhDbGFtcGVkQXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQn
KSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZh
bHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnVWludDhDbGFtcGVkQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJy
YXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcpLnZhbHVlIGlzIFdlYlNvY2tldAog
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dl
YlNvY2tldCcpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29u
c3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04LDE2
ICs4LDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsbwogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBbmFseXNlck5vZGUn
KS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykudmFsdWUgaXMgQXJyYXlCdWZmZXIKLVBBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZh
bHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlC
dWZmZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmll
dycpLnZhbHVlIGlzIEFycmF5QnVmZmVyVmlldwotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmlldycpLmhhc093blByb3BlcnR5KCdnZXQn
KSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0FycmF5QnVmZmVyVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmlldycp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdBcnJheUJ1ZmZlclZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0F0dHInKS52YWx1ZSBpcyBB
dHRyCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXR0cicp
Lmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0F0dHInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKQEAgLTI2MywxMSArMjUzLDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsbwogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RP
TVRva2VuTGlzdCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRva2VuTGlzdCcpLmVudW1lcmFi
bGUgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdET01Ub2tlbkxpc3QnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykudmFsdWUgaXMgRGF0YVZpZXcK
LVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycp
Lmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0
YVZpZXcnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScpLnZhbHVl
IGlzIERlbGF5Tm9kZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0RlbGF5Tm9kZScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScpLmhhc093blBy
b3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtMzQ4LDE2ICszMzMsNiBAQCBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVS
ZWFkZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5Jyku
dmFsdWUgaXMgRmxvYXQzMkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNl
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFy
cmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBm
YWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0
MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykudmFsdWUgaXMgRmxvYXQ2NEFycmF5
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFy
cmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRmxvYXQ2NEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
Rm9jdXNFdmVudCcpLnZhbHVlIGlzIEZvY3VzRXZlbnQKIFBBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2ZW50JykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
Rm9jdXNFdmVudCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtNzQ4LDIxICs3
MjMsNiBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuaGFzT3du
UHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ltYWdlRGF0YScpLmNvbmZpZ3Vy
YWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnSW50MTZBcnJheScpLnZhbHVlIGlzIEludDE2QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnSW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5lbnVtZXJh
YmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnSW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLnZhbHVlIGlzIEludDMyQXJy
YXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFy
cmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0
cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFy
cmF5JykudmFsdWUgaXMgSW50OEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNl
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5
JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQot
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnS2V5Ym9hcmRFdmVudCcpLnZhbHVlIGlzIEtleWJvYXJkRXZlbnQKIFBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdLZXlib2FyZEV2ZW50Jyku
aGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnS2V5Ym9hcmRFdmVudCcpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQpAQCAtMTc5OCwyNiArMTc1OCw2IEBAIFBBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdVUkwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5lbnVtZXJhYmxlIGlzIGZh
bHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJyku
Y29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVaW50MTZBcnJheScpLnZhbHVlIGlzIFVpbnQxNkFycmF5Ci1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Q
cm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxz
ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFy
cmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLnZh
bHVlIGlzIFVpbnQzMkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScp
Lmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQot
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OEFycmF5JykudmFsdWUgaXMgVWludDhBcnJheQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Q
cm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNl
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJh
eScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScp
LnZhbHVlIGlzIFVpbnQ4Q2xhbXBlZEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0
JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFy
cmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUK
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXYXZlU2hhcGVy
Tm9kZScpLnZhbHVlIGlzIFdhdmVTaGFwZXJOb2RlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2F2ZVNoYXBlck5vZGUnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0
JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdXYXZlU2hhcGVyTm9kZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtc2hhcmVk
LXdvcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9n
bG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVj
dG9ycy1hdHRyaWJ1dGVzLXNoYXJlZC13b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00LDIxICs0LDExIEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEEKIAogCiBTdGFydGluZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3Jz
LWF0dHJpYnV0ZXMuanMKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLnZhbHVlIGlzIEFycmF5QnVmZmVyCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZm
ZXInKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093blBy
b3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuZW51bWVyYWJsZSBpcyBmYWxzZQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Fy
cmF5QnVmZmVyJykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykudmFsdWUgaXMgQmxvYgogUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2In
KS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVydHkoJ3Nl
dCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQmxvYicpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuY29uZmlndXJhYmxl
IGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdEYXRhVmlldycpLnZhbHVlIGlzIERhdGFWaWV3Ci1QQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9w
ZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0RhdGFWaWV3JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuY29uZmlndXJhYmxl
IGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdFdmVudFNvdXJjZScpLnZhbHVlIGlzIEV2ZW50U291cmNlCiBQQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRXZlbnRTb3VyY2UnKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLmhhc093blByb3BlcnR5
KCdzZXQnKSBpcyBmYWxzZQpAQCAtMzQsMzEgKzI0LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5
bmMnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLnZhbHVlIGlzIEZsb2F0MzJB
cnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0Zsb2F0MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJB
cnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmVudW1l
cmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRB
cnJheScpLnZhbHVlIGlzIEZsb2F0NjRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0Zsb2F0NjRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS52YWx1ZSBpcyBJbnQxNkFycmF5Ci1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJh
eScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2
QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS52YWx1ZSBpcyBJbnQzMkFy
cmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnSW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXkn
KS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuZW51bWVyYWJsZSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0ludDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLnZhbHVl
IGlzIEludDhBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0lu
dDhBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmVudW1l
cmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFu
bmVsJykudmFsdWUgaXMgTWVzc2FnZUNoYW5uZWwKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3Bl
cnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCkBAIC03OSwyNiArNDQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVVJMJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuZW51
bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS52
YWx1ZSBpcyBVaW50MTZBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlz
IGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZB
cnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0
cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnVWludDMyQXJyYXknKS52YWx1ZSBpcyBVaW50MzJBcnJheQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0
JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVaW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLnZhbHVlIGlzIFVpbnQ4QXJyYXkKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
VWludDhBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS52YWx1
ZSBpcyBVaW50OENsYW1wZWRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHko
J2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dv
cmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1w
ZWRBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykudmFsdWUgaXMgV2ViU29j
a2V0CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnV2ViU29ja2V0JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0Jyku
aGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJnbC9y
ZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9hcnJheS11
bml0LXRlc3RzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0
cy5odG1sCShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMv
d2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9hcnJheS11bml0LXRlc3Rz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwyNiArMTQ5LDEzIEBAIGZ1bmN0aW9uIHRlc3RJ
bmhlcml0YW5jZUhpZXJhcmNoeSgpIHsKIAogICB0cnkgewogICAgIHZhciBmb28gPSBBcnJheUJ1
ZmZlclZpZXc7Ci0gICAgdGVzdFBhc3NlZCgnQXJyYXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUg
W05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYW5kIHNob3VsZCBiZSBkZWZp
bmVkJyk7Ci0KLSAgICBzaG91bGRCZSgnbmV3IEludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5
QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50OEFycmF5KDEpIGlu
c3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVp
bnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsK
LSAgICBzaG91bGRCZSgnbmV3IEludDE2QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZp
ZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDE2QXJyYXkoMSkgaW5zdGFuY2Vv
ZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgSW50MzJBcnJh
eSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUo
J25ldyBVaW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7
Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZl
clZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRmxvYXQ2NEFycmF5KDEpIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IERhdGFW
aWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1
ZScpOwotCi0gICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7IG5ldyBBcnJheUJ1
ZmZlclZpZXcoKSB9LCAibmV3IEFycmF5QnVmZmVyVmlldygpIik7CisgICAgdGVzdEZhaWxlZCgi
QXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYnV0IGlzIGRlZmluZWQiKTsKICAg
fSBjYXRjaCAoZSkgewotICAgIHRlc3RGYWlsZWQoJ0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBo
YXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlIGJ1dCB3YXMgbm90IGRl
ZmluZWQnKTsKKyAgICB0ZXN0UGFzc2VkKCJBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVm
aW5lZCBhbmQgaXMiKTsKICAgfQogCiAgIC8vIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBr
aW5kIG9mIHZpZXcgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIKLSAgc2hvdWxkQmUoJ25ldyBV
aW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXknLCAndHJ1ZScpOworICBz
aG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScs
ICdmYWxzZScpOwogfQogCiAvLwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvZGF0YS12aWV3LXRlc3QuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRhLXZpZXctdGVzdC5odG1sCShyZXZpc2lv
biAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxl
cy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRhLXZpZXctdGVzdC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsOSArMjcwLDkgQEAgZnVuY3Rpb24gcnVuQ29uc3RydWN0b3JUZXN0cygpCiAg
ICAgLy8gVXNlIHRyeS9jYXRjaCBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkVGhyb3cgdG8gYXZv
aWQgZGlmZmVyZW50IGV4Y2VwdGlvbiBtZXNzYWdlIGJlaW5nIHJlcG9ydGVkIGZyb20gZGlmZmVy
ZW50IHBsYXRmb3JtLgogICAgIHRyeSB7CiAgICAgICAgIFRlc3RFdmFsKGV4cHIpOwotICAgICAg
ICB0ZXN0RmFpbGVkKGV4cHIgKyAiIGRvZXMgbm90IHRocm93IGV4Y2VwdGlvbiIpOworICAgICAg
ICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHdvcmtzIik7CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAg
ICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHRocmV3IGV4Y2VwdGlvbiIpOworICAgICAgICB0ZXN0RmFp
bGVkKGV4cHIgKyAiIHRocmV3IGV4Y2VwdGlvbiIpOwogICAgIH0KIAogICAgIGRlYnVnKCIiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208784</attachid>
            <date>2013-08-14 19:36:14 -0700</date>
            <delta_ts>2013-08-14 20:06:25 -0700</delta_ts>
            <desc>almost patch for landing</desc>
            <filename>bug-119064-20130814193614.patch</filename>
            <type>text/plain</type>
            <size>740905</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA2
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA4
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJy
YXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50
LgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMu
ZmlsdGVyOgorCiAyMDEzLTA4LTEzICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBVbmljb2RlJ3MgQ0ZMQUdTIGVuZm9yY2UgLURfRk9S
VElGWV9TT1VSQ0U9MiwgLURfUkVFTlRSQU5UPTEsIGNhdXNpbmcgZmF1bHR5IENsYW5nIGJ1aWxk
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQw
IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVHlwZWQgYXJyYXlzIHdlcmUgcHJldmlv
dXNseSBkZWZpY2llbnQgaW4gc2V2ZXJhbCBtYWpvciB3YXlzOgorICAgICAgICAKKyAgICAgICAg
LSBUaGV5IHdlcmUgZGVmaW5lZCBzZXBhcmF0ZWx5IGluIFdlYkNvcmUgYW5kIGluIHRoZSBqc2Mg
c2hlbGwuIFRoZSB0d28KKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgd2VyZSBkaWZmZXJlbnQs
IGFuZCB0aGUganNjIHNoZWxsIG9uZSB3YXMgYmFzaWNhbGx5IHdyb25nLgorICAgICAgICAgIFRo
ZSBXZWJDb3JlIG9uZSB3YXMgcXVpdGUgYXdmdWwsIGFsc28uCisgICAgICAgIAorICAgICAgICAt
IFR5cGVkIGFycmF5cyB3ZXJlIG5vdCB2aXNpYmxlIHRvIHRoZSBKSVQgZXhjZXB0IHRocm91Z2gg
c29tZSB3ZWlyZCBob29rcy4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEpJVCBjb3VsZCBu
b3QgYXNrICJ3aGF0IGlzIHRoZSBTdHJ1Y3R1cmUgdGhhdCB0aGlzIHR5cGVkCisgICAgICAgICAg
YXJyYXkgd291bGQgaGF2ZSBpZiBJIGp1c3QgYWxsb2NhdGVkIGl0IGZyb20gdGhpcyBnbG9iYWwg
b2JqZWN0Ii4gQWxzbywKKyAgICAgICAgICBpdCB3YXMgZGlmZmljdWx0IHRvIHdpcmUgYW55IG9m
IHRoZSB0eXBlZCBhcnJheSBpbnRyaW5zaWNzLCBiZWNhdXNlIG1vc3QKKyAgICAgICAgICBvZiB0
aGUgZnVuY3Rpb25hbGl0eSB3YXNuJ3QgdmlzaWJsZSBhbnl3aGVyZSBpbiBKU0MuCisgICAgICAg
IAorICAgICAgICAtIFR5cGVkIGFycmF5IGFsbG9jYXRpb24gd2FzIGJyYWluLWRlYWQuIEFsbG9j
YXRpbmcgYSB0eXBlZCBhcnJheSBpbnZvbHZlZAorICAgICAgICAgIHR3byBKUyBvYmplY3RzLCB0
d28gR0Mgd2VhayBoYW5kbGVzLCBhbmQgdGhyZWUgbWFsbG9jIGFsbG9jYXRpb25zLgorICAgICAg
ICAKKyAgICAgICAgLSBOZXV0ZXJpbmcuIEl0IGludm9sdmVkIGtlZXBpbmcgdGFicyBvbiBhbGwg
bmF0aXZlIHZpZXdzIGJ1dCBub3QgdGhlIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywgZXZlbiB0
aG91Z2ggdGhlIG5hdGl2ZSB2aWV3cyBjYW4gYXV0b25ldXRlciBqdXN0IGJ5IGFza2luZyB0aGUK
KyAgICAgICAgICBidWZmZXIgaWYgaXQgd2FzIG5ldXRlcmVkIGFueXRpbWUgeW91IHRvdWNoIHRo
ZW07IHdoaWxlIHRoZSBKUyB2aWV3CisgICAgICAgICAgd3JhcHBlcnMgYXJlIHRoZSBvbmVzIHRo
YXQgeW91IHJlYWxseSB3YW50IHRvIHJlYWNoIG91dCB0by4KKyAgICAgICAgCisgICAgICAgIC0g
Q29tbW9uIGNhc2UtaW5nLiBNb3N0IHR5cGVkIGFycmF5cyBoYXZlIG9uZSBidWZmZXIgYW5kIG9u
ZSB2aWV3LCBhbmQKKyAgICAgICAgICB1c3VhbGx5IG5vYm9keSB0b3VjaGVzIHRoZSBidWZmZXIu
IFlldCB3ZSBjcmVhdGVkIGFsbCBvZiB0aGF0IHN0dWZmCisgICAgICAgICAgYW55d2F5LCB1c2lu
ZyBkYXRhIHN0cnVjdHVyZXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSB5b3UgaGFkIGEg
bG90CisgICAgICAgICAgb2Ygdmlld3MuCisgICAgICAgIAorICAgICAgICAtIFNlbWFudGljIGdv
b2ZzLiBUeXBlZCBhcnJheXMgc2hvdWxkLCBpbiB0aGUgZnV0dXJlLCBiZWhhdmUgbGlrZSBFUwor
ICAgICAgICAgIGZlYXR1cmVzIHJhdGhlciB0aGFuIERPTSBmZWF0dXJlcywgZm9yIGV4YW1wbGUg
d2hlbiBpdCBjb21lcyB0byBleGNlcHRpb25zLgorICAgICAgICAgIEZpcmVmb3ggYWxyZWFkeSBk
b2VzIHRoaXMgYW5kIEkgYWdyZWUgd2l0aCB0aGVtLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBjbGVhbnNlcyBvdXIgY29kZWJhc2Ugb2YgdGhlc2Ugc2luczoKKyAgICAgICAgCisgICAg
ICAgIC0gVHlwZWQgYXJyYXlzIGFyZSBhbG1vc3QgZW50aXJlbHkgZGVmaW5lZCBpbiBKU0MuIE9u
bHkgdGhlIGxpZmVjeWNsZQorICAgICAgICAgIG1hbmFnZW1lbnQgb2YgbmF0aXZlIHJlZmVyZW5j
ZXMgdG8gYnVmZmVycyBpcyBsZWZ0IHRvIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICAtIEFs
bG9jYXRpbmcgYSB0eXBlZCBhcnJheSByZXF1aXJlcyBlaXRoZXIgdHdvIEdDIGFsbG9jYXRpb25z
IChhIGNlbGwgYW5kIGEKKyAgICAgICAgICBjb3BpZWQgc3RvcmFnZSB2ZWN0b3IpIG9yIG9uZSBH
QyBhbGxvY2F0aW9uLCBhIG1hbGxvYyBhbGxvY2F0aW9uLCBhbmQgYQorICAgICAgICAgIHdlYWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2l6ZSBhcnJheXMuIFJlbWVtYmVyIHRoYXQgYmVmb3JlCisgICAgICAgICAgaXQg
d2FzIDcgYWxsb2NhdGlvbnMgbm8gbWF0dGVyIHdoYXQuCisgICAgICAgIAorICAgICAgICAtIFR5
cGVkIGFycmF5cyByZXF1aXJlIGp1c3QgNCB3b3JkcyBvZiBvdmVyaGVhZDogU3RydWN0dXJlKiwg
QnV0dGVyZmx5KiwKKyAgICAgICAgICBtb2RlL2xlbmd0aCwgdm9pZCogdmVjdG9yLiBCZWZvcmUg
aXQgd2FzIGEgbG90IG1vcmUgdGhhbiB0aGF0IC0gcmVtZW1iZXIsCisgICAgICAgICAgdGhlcmUg
d2VyZSBmaXZlIGFkZGl0aW9uYWwgb2JqZWN0cyB0aGF0IGRpZCBhYnNvbHV0ZWx5IG5vdGhpbmcg
Zm9yIGFueWJvZHkuCisgICAgICAgIAorICAgICAgICAtIE5hdGl2ZSB2aWV3cyBhcmVuJ3QgdHJh
Y2tlZCBieSB0aGUgYnVmZmVyLCBvciBieSB0aGUgd3JhcHBlcnMuIFRoZXkgYXJlCisgICAgICAg
ICAgdHJhbnNpZW50LiBJbiB0aGUgZnV0dXJlIHdlJ2xsIHByb2JhYmx5IHN3aXRjaCB0byBub3Qg
ZXZlbiBoYXZpbmcgdGhlbSBiZQorICAgICAgICAgIG1hbGxvYydkLgorICAgICAgICAKKyAgICAg
ICAgLSBOYXRpdmUgYXJyYXkgYnVmZmVycyBoYXZlIGFuIGVmZmljaWVudCB3YXkgb2YgdHJhY2tp
bmcgYWxsIG9mIHRoZWlyIEpTIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywgYm90aCBmb3IgbmV1
dGVyaW5nLCBhbmQgZm9yIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgR0MKKyAgICAgICAgICBz
cGVjaWFsLWNhc2VzIG5hdGl2ZSBhcnJheSBidWZmZXJzLiBUaGlzIHNhdmVzIGEgYnVuY2ggb2Yg
Z3JpZWY7IGZvciBleGFtcGxlCisgICAgICAgICAgaXQgbWVhbnMgdGhhdCBhIEpTIHZpZXcgd3Jh
cHBlciBjYW4gcmVmZXIgdG8gaXRzIGJ1ZmZlciB2aWEgdGhlIGJ1dHRlcmZseSwKKyAgICAgICAg
ICB3aGljaCB3b3VsZCBiZSBkZWFkIGJ5IHRoZSB0aW1lIHdlIHdlbnQgdG8gZmluYWxpemUuCisg
ICAgICAgIAorICAgICAgICAtIFR5cGVkIGFycmF5IHNlbWFudGljcyBub3cgbWF0Y2ggRmlyZWZv
eCwgd2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZQorICAgICAgICAgIHN0YW5kYXJk
cyBhcmUgZ29pbmcuIFRoZSBkaXNjdXNzaW9uIG9uIHdlYmtpdC1kZXYgc2VlbWVkIHRvIGNvbmZp
cm0gdGhhdAorICAgICAgICAgIENocm9tZSBpcyBhbHNvIGhlYWRpbmcgaW4gdGhpcyBkaXJlY3Rp
b24uIFRoaXMgaW5jbHVkZXMgbWFraW5nCisgICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkgbm90
IGEgc3VidHlwZSBvZiBVaW50OEFycmF5LCBhbmQgZ2V0dGluZyByaWQgb2YKKyAgICAgICAgICBB
cnJheUJ1ZmZlclZpZXcgYXMgYSBKUy12aXNpYmxlIGNvbnN0cnVjdC4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBs
b3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nnggc3BlZWQtdXAgZm9y
IHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4KKyAgICAgICAgCisg
ICAgICAgIEFuIGFkZGl0aW9uYWwgcHJvcGVydHkgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IHR5cGVk
IGFycmF5cyBhcmUgbW9zdGx5CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIHRlbXBsYXRlcy4g
VGhpcyBkZWR1cGxpY2F0ZXMgYSBidW5jaCBvZiBjb2RlLCBidXQgZG9lcyBtZWFuCisgICAgICAg
IHRoYXQgd2UgbmVlZCBzb21lIGhhY2tzIGZvciBleHBvcnRpbmcgc19pbmZvJ3Mgb2YgdGVtcGxh
dGUgY2xhc3Nlcy4gU2VlCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggYW5kIEpT
VHlwZWRBcnJheXMuY3BwLiBUaG9zZSBoYWNrcyBhcmUgZmFpcmx5CisgICAgICAgIGxvdy1pbXBh
Y3QgY29tcGFyZWQgdG8gY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEF1dG9t
YWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4u
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogSlNDVHlwZWRBcnJheVN0dWJzLmg6IFJlbW92ZWQuCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6aGFzT3B0aW1pemFibGVJbmRl
eGluZ0ZvckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckNsYXNzSW5m
byk6CisgICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKToKKyAgICAg
ICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0
aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlwZWRBcnJheVR5cGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvQ29weVRva2VuLmg6Cisg
ICAgICAgICogaGVhcC9EZWZlckdDLmg6CisgICAgICAgIChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6
OkRlZmVyR0NGb3JBV2hpbGUpOgorICAgICAgICAoSlNDOjpEZWZlckdDRm9yQVdoaWxlOjp+RGVm
ZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZD
b3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6On5HQ0luY29taW5n
UmVmQ291bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpudW1iZXJP
ZkluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVk
OjppbmNvbWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50
ZWQ6OnNpbmdsZXRvbkZsYWcpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6
aGFzVmVjdG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpo
YXNBbnlJbmNvbWluZyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNT
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6c2luZ2xldG9u
KToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgor
ICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6OjpmaWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0Ojpz
aXplKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5nUmVmQ291bnRlZFNldCk6CisgICAgICAg
IChKU0M6Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KToKKyAgICAgICAgKEpTQzo6OjphZGRS
ZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6OjpyZW1v
dmVBbGwpOgorICAgICAgICAoSlNDOjo6OnJlbW92ZURlYWQpOgorICAgICAgICAqIGhlYXAvSGVh
cC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgorICAgICAgICAqIGhl
YXAvSGVhcC5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBqc2MuY3BwOgor
ICAgICAgICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9BcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6
CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlcjo6Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1
ZmZlcik6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGluKToKKyAgICAgICAgKEpTQzo6QXJyYXlC
dWZmZXI6OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxs
b2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAg
KEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoSlNDOjpB
cnJheUJ1ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlclZpZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJW
aWV3Lmg6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6aXNOZXV0ZXJlZCk6CisgICAg
ICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlC
dWZmZXJWaWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6
Ynl0ZU9mZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFu
Z2UpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxl
bWVudHMpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFu
ZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9EYXRhVmlldy5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6RGF0YVZpZXcpOgorICAgICAgICAoSlND
OjpEYXRhVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OndyYXApOgorICAg
ICAgICAqIHJ1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRhdGFWaWV3
OjpieXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmdldFR5cGUpOgorICAgICAg
ICAoSlNDOjpEYXRhVmlldzo6Z2V0KToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OnNldCk6Cisg
ICAgICAgICogcnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0
NjRBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmRhdGEpOgorICAgICAg
ICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRB
cnJheVZpZXc6Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzo6emVyb0ZpbGwpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Omxlbmd0
aCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0ZUxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6aXRlbSk6CisgICAgICAgIChKU0M6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2hlY2tJbmJvdW5kRGF0YSk6CisgICAgICAgIChKU0M6
OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0VHlwZSk6CisgICAgICAgICogcnVudGltZS9HZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6OjpzdWJhcnJheSk6Cisg
ICAgICAgIChKU0M6Ojo6d3JhcCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlci5o
OgorICAgICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJyYXlCdWZmZXIpOgorICAgICAgICAo
SlNDOjpJbmRleGluZ0hlYWRlcjo6c2V0QXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SW50MTZBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50MzJBcnJheS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZmZXIpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OnB1dCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6aW1wbCk6
CisgICAgICAgIChKU0M6OnRvQXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3Rv
dHlwZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAg
ICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpK
U0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXplT2YpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6b3Bl
cmF0b3IhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNv
bnRleHQ6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25z
dHJ1Y3Rpb25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Omxlbmd0
aCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcik6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om5l
dXRlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRBcnJheUlt
cGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0Rh
dGFWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0YVZpZXcp
OgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
c2V0KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6dHlwZWRJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNEYXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNEYXRh
Vmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmll
dzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6Omdl
dFR5cGVkQXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0
dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpK
U0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpnZXREYXRhKToK
KyAgICAgICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
R2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0
YVZpZXdQcm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5j
R2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIpOgor
ICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgorICAgICAgICAoSlND
OjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1By
b3RvRnVuY1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDE2
KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1By
b3RvRnVuY1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWlu
dDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKToKKyAgICAg
ICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAgICAgKiBydW50aW1l
L0pTRGF0YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0Zsb2F0
MzJBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2NEFycmF5Lmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXplKToKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5QXNOYXRp
dmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRl
eFF1aWNrbHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
OjpnZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzo6c2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6CisgICAgICAgIChKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlND
OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkSW1wbCk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6aW5mbyk6CisgICAgICAgIChKU0M6OnRvTmF0
aXZlVHlwZWRWaWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZp
ZXcpOgorICAgICAgICAoSlNDOjo6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjo6
OmdldENhbGxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmlu
aXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6Ojp2YWxpZGF0ZVJhbmdlKToKKyAgICAgICAgKEpT
Qzo6OjpzZXRXaXRoU3BlY2lmaWNUeXBlKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAg
ICAoSlNDOjo6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6
OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6
Ojo6cHV0QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToK
KyAgICAgICAgKEpTQzo6OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
SlNDOjo6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjo6OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjo6
OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjo6OmdldFR5cGVkQXJyYXlJ
bXBsKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTdWJhcnJheSk6CisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjpyZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjphcnJheUJ1ZmZlclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0Ojp0eXBlZEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTSW50MTZB
cnJheS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50MzJBcnJheS5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTSW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9K
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5jcHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTVWludDE2QXJyYXkuaDogQWRkZWQuCisgICAgICAgICog
cnVudGltZS9KU1VpbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50
OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcik6
CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp+U2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cjo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpoYXNJbmRleGluZ0hl
YWRlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkludGVncmFsVHlwZWRBcnJheUFkYXB0b3I6OnRvTmF0aXZlKToKKyAgICAg
ICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgorICAgICAgICAoSlND
OjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChKU0M6OkZsb2F0
VHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRB
cnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRhcHRv
cjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0pTVmFs
dWUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OmNsYW1wKToKKyAgICAgICAgKiBydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlR5cGVkQXJy
YXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlR5cGVk
QXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAqIHJ1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UeXBl
ZEFycmF5RGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJh
eUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9Gb3JUeXBlKToKKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5VHlwZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAgICAgIChKU0M6OmlzVHlwZWRWaWV3KToK
KyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAgICAgICAoSlNDOjppc0ludCk6CisgICAg
ICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlNDOjppc1NpZ25lZCk6CisgICAgICAgIChK
U0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5cy5oOiBBZGRlZC4K
KyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9VaW50
MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhBcnJheS5oOgorICAgICAgICAqIHJ1
bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpTQzo6Vk06On5WTSk6CisgICAgICAgICog
cnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTE0ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBDb21waWxlIGZpeCBmb3IgV2luNjQgd2l0aCBqaXQg
ZGlzYWJsZWQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
CiAgICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAorICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQuaAorICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAorICAgIGhlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oCiAgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhyZWFkU2hhcmVk
RGF0YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKQEAgLTI2NCwxMCArMjY4LDEwIEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCiAg
ICAgcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuY3BwCiAKLSAgICBydW50aW1lL0FycmF5QnVmZmVy
LmNwcAotICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUvQXJnTGlz
dC5jcHAKICAgICBydW50aW1lL0FyZ3VtZW50cy5jcHAKKyAgICBydW50aW1lL0FycmF5QnVmZmVy
LmNwcAorICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUvQXJyYXlD
b25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAogICAgIHJ1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcApAQCAtMjgyLDYgKzI4Niw4IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAKICAgICBy
dW50aW1lL0NvbXBsZXRpb24uY3BwCiAgICAgcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcAorICAg
IHJ1bnRpbWUvRGF0YVZpZXcuY3BwCisgICAgcnVudGltZS9EYXRhVmlldy5oCiAgICAgcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHAKICAg
ICBydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAKQEAgLTMwNiwxMCArMzEyLDE2IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5jcHAKICAg
ICBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKICAgICBydW50aW1lL0pTQXJyYXkuY3BwCisgICAg
cnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAorICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKKyAgICBy
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAogICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAogICAgIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKICAgICBydW50aW1lL0pTQ2VsbC5jcHAK
ICAgICBydW50aW1lL0pTQ2h1bmsuY3BwCisgICAgcnVudGltZS9KU0RhdGFWaWV3LmNwcAorICAg
IHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0pTRGF0ZU1hdGgu
Y3BwCiAgICAgcnVudGltZS9KU0Z1bmN0aW9uLmNwcAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCkBAIC0zMjcsNiArMzM5LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBydW50aW1lL0pTU3RyaW5nLmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCiAg
ICAgcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAorICAgIHJ1bnRpbWUvSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmNwcAorICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5j
cHAKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCiAgICAgcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNXaXRoU2NvcGUuY3BwCiAgICAgcnVudGltZS9KU1dy
YXBwZXJPYmplY3QuY3BwCkBAIC0zNTksNiArMzc0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKICAgICBydW50aW1lL1JlZ0V4cFBy
b3RvdHlwZS5jcHAKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAKKyAgICBydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAogICAgIHJ1bnRpbWUvU21hbGxTdHJpbmdz
LmNwcAogICAgIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAKICAgICBydW50aW1lL1N0
cmljdEV2YWxBY3RpdmF0aW9uLmNwcApAQCAtMzcwLDYgKzM4Niw4IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKICAgICBydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmNwcAogICAgIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwCisgICAg
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAKKyAgICBydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmNwcAogICAgIHJ1bnRpbWUvVk0uY3BwCiAgICAgcnVudGltZS9XYXRjaGRvZy5jcHAKICAg
ICBydW50aW1lL1dhdGNoZG9nTm9uZS5jcHAKQEAgLTM5MSw2ICs0MDksNyBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfTFVUX0ZJTEVTCiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCiAgICAg
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3Bw
CisgICAgcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvTmFt
ZVByb3RvdHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBhbGwgOiBcCiAg
ICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAg
ICBFcnJvclByb3RvdHlwZS5sdXQuaCBcCisgICAgSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBc
CiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAgSlNHbG9iYWxPYmplY3QubHV0LmggXAogICAg
IEtleXdvcmRMb29rdXAuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAgamF2YXNj
cmlwdGNvcmVfYnVpbHRfbm9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZS9EYXRlQ29uc3RydWN0b3IubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRD
b3JlL0RhdGVQcm90b3R5cGUubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L0Vycm9yUHJvdG90eXBlLmx1dC5oIFwKKwlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9K
U0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS9KU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
SlNPTk9iamVjdC5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvTWF0aE9i
amVjdC5sdXQuaCBcCkBAIC0zODQsNiArMzg1LDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDQXNzZXJ0aW9ucy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5k
bGVCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVCbG9ja0lubGlu
ZXMuaCBcCkBAIC02ODUsNiArNjkwLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRhVmlldy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29u
c3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3Ry
dWN0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnZlcnNpb24u
Y3BwIFwKQEAgLTcxOSw2ICs3MjYsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2suaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKQEAgLTc0NCwxMiArNzUzLDI3IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5Lmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRl
TWF0aC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRlTWF0aC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Rlc3RydWN0aWJsZU9iamVjdC5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0NjRBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jv
dW5kRnVuY3Rpb24uY3BwIFwKQEAgLTc1OCwxMiArNzgyLDIxIEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
SW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludDE2QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQz
MkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBcCkBAIC03NzYsNiArODA5LDE2IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVWludDE2QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNVaW50MzJBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQ4QXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50OENs
YW1wZWRBcnJheS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dpdGhTY29w
ZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaCBcCkBAIC04NjYs
NiArOTA5LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nQ291bnRlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nh
bXBsaW5nQ291bnRlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NtYWxsU3RyaW5ncy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmNwcCBcCkBAIC04OTIsOCArOTM3LDE0IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHJhY2luZy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUJhc2UuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlUeXBlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNldpdGhGcmFjdGlvbi5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oIFwKQEAgLTk2Nyw1
ICsxMDE4LDQgQEAgUHJvZ3JhbXNfTExJbnRPZmZzZXRzRXh0cmFjdG9yX1NPVVJDRVMgPQogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludE9mZnNldHNFeHRyYWN0b3IuY3BwCiAKIFBy
b2dyYW1zX2pzY19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9TT1VSQ0VTID0gXAotCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5U3R1YnMuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFy
cmF5U3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRB
cnJheVN0dWJzLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
U0NUeXBlZEFycmF5U3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ1R5
cGVkQXJyYXlTdHVic19oCi0jZGVmaW5lIEpTQ1R5cGVkQXJyYXlTdHVic19oCi0KLSNpbmNsdWRl
ICJGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJGbG9hdDY0QXJyYXkuaCIKLSNpbmNsdWRlICJJ
bnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkludDhBcnJh
eS5oIgotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCi0jaW5jbHVkZSAiT2JqZWN0
UHJvdG90eXBlLmgiCi0jaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlVpbnQxNkFy
cmF5LmgiCi0jaW5jbHVkZSAiVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJVaW50OEFycmF5Lmgi
Ci0jaW5jbHVkZSAiVWludDhDbGFtcGVkQXJyYXkuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotICAgIAotI2RlZmluZSBUWVBFRF9BUlJBWShuYW1lLCB0
eXBlKSBcCi1jbGFzcyBKUyMjbmFtZSMjQXJyYXkgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgeyBcCi1wdWJsaWM6IFwKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7
IFwKLSAgICBzdGF0aWMgSlMjI25hbWUjI0FycmF5KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNB
cnJheT4gaW1wbCkgXAotICAgIHsgXAotICAgICAgICBKUyMjbmFtZSMjQXJyYXkqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlMjI25hbWUjI0FycmF5PihnbG9iYWxPYmpl
Y3QtPnZtKCkuaGVhcCkpIEpTIyNuYW1lIyNBcnJheShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7IFwKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OyBcCi0gICAgICAgIHJldHVybiBwdHI7IFwKLSAgICB9XAotXAotICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yJik7XAotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6
SlNWYWx1ZSwgYm9vbCk7XAotICAgIERFQ0xBUkVfSU5GTztcCi1cCi0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSlcCi0gICAge1wKLSAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpO1wKLSAgICB9XAotXAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMp
O1wKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCopO1wKLVwKLSAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBl
ZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBKU0M6OlR5cGVkQXJyYXkjI25hbWU7
XAotICAgIHVpbnQzMl90IG1fc3RvcmFnZUxlbmd0aDtcCi0gICAgdHlwZSogbV9zdG9yYWdlO1wK
LSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IG1faW1wbDtcCi1wcm90ZWN0ZWQ6XAotICAgIEpTIyNu
YW1lIyNBcnJheShKU0M6OlN0cnVjdHVyZSosIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxu
YW1lIyNBcnJheT4pO1wKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsgXAotICAgIEpTQzo6SlNWYWx1ZSBnZXRCeUluZGV4KEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpO1wKLSAgICB2b2lkIGluZGV4U2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XAotfTtcCi1cCi1j
b25zdCBDbGFzc0luZm8gSlMjI25hbWUjI0FycmF5OjpzX2luZm8gPSB7ICNuYW1lICJBcnJheSIg
LCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyNuYW1lIyNBcnJh
eSkgfTtcCi1cCi1KUyMjbmFtZSMjQXJyYXk6OkpTIyNuYW1lIyNBcnJheShTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxuYW1lIyNB
cnJheT4gaW1wbClcCi0gICAgOiBCYXNlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlKVwK
LSAgICAsIG1faW1wbChpbXBsKVwKLXtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSlcCi17XAotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtc
Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigmSlMjI25hbWUjI0FycmF5Ojpz
X2luZm8sIE9CSkVDVF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZSksIE9CSkVD
VF9PRkZTRVRPRihKUyMjbmFtZSMjQXJyYXksIG1fc3RvcmFnZUxlbmd0aCkpO1wKLSAgICB2bS5y
ZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKG1faW1wbC5nZXQoKSwgZGVzY3JpcHRvcik7XAot
ICAgIG1fc3RvcmFnZSA9IG1faW1wbC0+ZGF0YSgpO1wKLSAgICBtX3N0b3JhZ2VMZW5ndGggPSBt
X2ltcGwtPmxlbmd0aCgpO1wKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIobV9zdG9yYWdlTGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0pOyBcCi0gICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNu
YW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTtcCi0gICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJ
bmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtc
Ci0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpO1wKLSAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSk7
XAotICAgICAgICByZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3du
UHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTtcCi19XAotXAot
Ym9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcilcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhp
c09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVj
dC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KTtcCi0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcih0aGlz
T2JqZWN0LT5nZXRCeUluZGV4KGV4ZWMsIGluZGV4KSwgRG9udERlbGV0ZSk7XAotICAgICAgICBy
ZXR1cm4gdHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcCi19XAotXAot
Ym9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIGlmIChwcm9wZXJ0eU5hbWUgPCB0aGlzT2Jq
ZWN0LT5tX3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dC0+Z2V0QnlJbmRleChleGVjLCBwcm9wZXJ0eU5hbWUpKTtcCi0gICAgICAgIHJldHVybiB0cnVl
O1wKLSAgICB9XAotICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9w
ZXJ0eU5hbWUpLCBzbG90KTtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0Fy
cmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wKLSAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4ICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCkge1wKLSAgICAgICAgdGhpc09iamVjdC0+aW5kZXhTZXR0
ZXIoZXhlYywgaW5kZXgsIHZhbHVlKTtcCi0gICAgICAgIHJldHVybjtcCi0gICAgfVwKLSAgICBC
YXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7XAot
fVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgXAote1wKLSAgICBtX2lt
cGwtPnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpO1wKLX1cCi1cCi12b2lkIEpTIyNu
YW1lIyNBcnJheTo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sKVwKLXtcCi0gICAgSlMjI25h
bWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KGNlbGwpO1wK
LSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAg
IHRoaXNPYmplY3QtPmluZGV4U2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpO1wKLSAg
ICByZXR1cm47XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVwKLXtcCi0gICAgSlMjI25hbWUj
I0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAot
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aDsgKytp
KVwKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
XAotICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7XAotfVwKLVwKLUpTVmFsdWUgSlMjI25hbWUjI0FycmF5OjpnZXRCeUlu
ZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KVwKLXtcCi0gICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCBpbmZvKCkpO1wKLSAgICB0eXBlIHJlc3VsdCA9IG1faW1wbC0+aXRl
bShpbmRleCk7XAotICAgIGlmIChzdGQ6OmlzbmFuKChkb3VibGUpcmVzdWx0KSlcCi0gICAgICAg
IHJldHVybiBqc05hTigpO1wKLSAgICByZXR1cm4gSlNWYWx1ZShyZXN1bHQpO1wKLX1cCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUyMjbmFtZSMjQXJyYXko
RXhlY1N0YXRlKiBjYWxsRnJhbWUpIHsgXAotICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpIFwKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsgXAotICAgIGludDMyX3QgbGVuZ3RoID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b0ludDMy
KGNhbGxGcmFtZSk7IFwKLSAgICBpZiAobGVuZ3RoIDwgMCkgXAotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyBcCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBKUyMjbmFtZSMjQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShjYWxsRnJhbWUtPnZtKCksIGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpOyBcCi0gICAgUmVmUHRyPG5hbWUjI0FycmF5PiBidWZm
ZXIgPSBuYW1lIyNBcnJheTo6Y3JlYXRlKGxlbmd0aCk7IFwKLSAgICBpZiAoIWJ1ZmZlcikgXAot
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlUmFuZ2VFcnJvcihj
YWxsRnJhbWUsICJBcnJheUJ1ZmZlciBzaXplIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2
ZSBpbnRlZ2VyLiIpKTsgXAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMjI25hbWUjI0Fy
cmF5OjpjcmVhdGUoc3RydWN0dXJlLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
YnVmZmVyLnJlbGVhc2UoKSkpOyBcCi19Ci0KLVRZUEVEX0FSUkFZKFVpbnQ4LCB1aW50OF90KTsK
LVRZUEVEX0FSUkFZKFVpbnQ4Q2xhbXBlZCwgdWludDhfdCk7Ci1UWVBFRF9BUlJBWShVaW50MTYs
IHVpbnQxNl90KTsKLVRZUEVEX0FSUkFZKFVpbnQzMiwgdWludDMyX3QpOwotVFlQRURfQVJSQVko
SW50OCwgaW50OF90KTsKLVRZUEVEX0FSUkFZKEludDE2LCBpbnQxNl90KTsKLVRZUEVEX0FSUkFZ
KEludDMyLCBpbnQzMl90KTsKLVRZUEVEX0FSUkFZKEZsb2F0MzIsIGZsb2F0KTsKLVRZUEVEX0FS
UkFZKEZsb2F0NjQsIGRvdWJsZSk7Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJbml0aWFsaXplVGhy
ZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDVHlwZWRBcnJheVN0dWJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIKQEAgLTIzOCwxNiAr
MjM3LDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxp
bmdGbGFncyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAg
ICAKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJheSIsIGNv
bnN0cnVjdEpTVWludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlv
bih2bSwgIlVpbnQ4Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRBcnJheSwg
MSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFycmF5Iiwg
Y29uc3RydWN0SlNVaW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5j
dGlvbih2bSwgIlVpbnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7Ci0gICAg
ICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0cnVjdEpT
SW50OEFycmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50
MTZBcnJheSIsIGNvbnN0cnVjdEpTSW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVj
dGFibGVGdW5jdGlvbih2bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJyYXksIDEp
OwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJyYXkiLCBj
b25zdHJ1Y3RKU0Zsb2F0MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5j
dGlvbih2bSwgIkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAxKTsKLQog
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygp
LCAwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBq
c1N0cmluZyhnbG9iYWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVz
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVy
LmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVy
Vmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmdMaXN0
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50cy5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZp
ZXcuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb25z
dHJ1Y3Rvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJh
eVByb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxC
b29sZWFuQ29uc3RydWN0b3IuY3BwIiAvPg0KQEAgLTQyNyw2ICs0MjcsNyBAQAogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbXBsZXRpb24uY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0YS5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0b3IuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZlcnNpb24u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNl
LmNwcCIgLz4NCkBAIC00NDYsMTIgKzQ0NywxOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRpb24uY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXkuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlci5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0FycmF5QnVmZmVyVmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0JvdW5kRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTRGF0YVZpZXcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0RhdGVNYXRoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTRnVuY3Rpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuY3BwIiAvPg0KQEAgLTQ1OSw4ICs0NjYsOCBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOb3RBbk9iamVjdC5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09OT2JqZWN0LmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Njb3BlLmNwcCIgLz4NCkBAIC00Njgs
NiArNDc1LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmcu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdKb2lu
ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXaXRoU2NvcGUuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFwcGVyT2JqZWN0LmNwcCIgLz4NCkBA
IC00OTksNiArNTA5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVn
RXhwT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJl
Z0V4cFByb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTYW1wbGluZ0NvdW50ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU21hbGxTdHJpbmdzLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIiAv
Pg0KQEAgLTUxMCw2ICs1MjEsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTdHJ1Y3R1cmVDaGFpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxTeW1ib2xUYWJsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxXYXRjaGRvZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxXYXRjaGRvZ05vbmUuY3BwIiAvPg0KQEAgLTUyNyw2ICs1NDAsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXERhdGVQcm90b3R5cGUubHV0LmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEVycm9yUHJvdG90eXBlLmx1dC5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNHbG9iYWxPYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEpTT05PYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXExleGVyLmx1dC5oIiAvPg0KQEAgLTc3MywxMCArNzg3LDEwIEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXQuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5
dGVjb2Rlcy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlC
dWZmZXIuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVm
ZmVyVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlz
dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJWaWV3Lmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0cnVjdG9y
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnZlbnRp
b25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheVByb3Rv
dHlwZS5oIiAvPg0KQEAgLTc5OCw2ICs4MTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxDb25zdHJ1Y3REYXRhLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmgiIC8+DQpAQCAtODE1LDYgKzgzMCw4IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uQ29uc3RydWN0b3Iu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90
eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHQ0FjdGl2aXR5
Q2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVy
aWNUeXBlZEFycmF5Vmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxJZGVudGlmaWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPg0KQEAgLTgyNywyNCArODQ0LDQyIEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVu
Y3Rpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludHJpbnNp
Yy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9u
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3Jh
cHBlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0
aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5Lmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTQXJyYXlCdWZmZXJWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0NKU1ZhbHVlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0NKU1ZhbHVlSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0RhdGFWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0RhdGFWaWV3UHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0RhdGVNYXRoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTRmxvYXQzMkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0Zsb2F0NjRBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQxNkFycmF5LmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0ludDMyQXJyYXkuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50OEFycmF5LmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU05vdEFuT2JqZWN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTUHJveHkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTU2NvcGUuaCIgLz4NCkBAIC04NTUsNiArODkwLDEzIEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZS5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQxNkFycmF5Lmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQzMkFycmF5Lmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJyYXkuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDhDbGFtcGVkQXJy
YXkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVP
YmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2l0aFNj
b3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dyYXBwZXJP
YmplY3QuaCIgLz4NCkBAIC04OTcsNiArOTM5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcUmVnRXhwUHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxSZWplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFNhbXBsaW5nQ291bnRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIgLz4NCkBA
IC05MTEsNyArOTU0LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU3ltYm9sVGFibGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFRyYWNpbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XFR5cGVkQXJyYXlEZXNjcmlwdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxUeXBlZEFycmF5QWRhcHRvcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVkQXJyYXlzLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDE2V2l0aEZyYWN0aW9uLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIiAvPg0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1
MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAw
N0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFB
MDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3
QjZCNTNGMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFB
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0Yg
LyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJ
MEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyog
RGF0YVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3
QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdB
RTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9Owor
CQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZF
NzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNw
cCAqLzsgfTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZC
QjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjZFRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNE
YXRhVmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2Rjgx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnMuY3BwICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZG
RDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07
CisJCTBGMkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVk
QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0Yg
LyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdB
RTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3
QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJ
MEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
REMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJE
QzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUx
RTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJCTBGNDY4MEQ0
MTRCQkQyNDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUxNEJCRDI0QjAw
QkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2Fs
bFJldHVyblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZE
MENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBGNEI5NERDMTdC
OUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFG
MTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIy
MTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNw
ZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMx
NzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMzQ5LDcg
KzQwMCw2IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3
MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJ
MEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VD
QjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhp
dEp1bXBQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtODI0LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThB
RjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyog
SW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1
QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3
QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0
IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRB
cnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3QThBRjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMw
MDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQw
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3
QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJCTBGMjM1QkVB
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcv
REZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7
IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNv
bWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fy
cmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRh
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
YXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90
b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3Rv
dHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBl
ZEFycmF5cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2RDIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTVWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
QWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFk
YXB0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIw
MEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29u
dHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFC
MDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMx
N0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zp
eHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBh
dGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0lu
c2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NCw2ICsxMzUy
LDcgQEAKIAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRCQkM1Rjgw
MEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5
cGVkQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVk
QXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUFGMTYx
M0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJz
dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdB
YnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBGRUEwQTJFMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJ
VENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZH
SklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3
MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8q
IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZH
T1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZERDExOEEyQkNG
MDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVy
Q3JlYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhl
YWRlckNyZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3
QjVCNDE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlND
VHlwZWRBcnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5
cGVkQXJyYXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDEx
ODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0
SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFj
dEhlYXAuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
dDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYz
MDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFG
MkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRB
cnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWlu
dDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYz
MDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4
NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcu
aCAqLywKIAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVm
aXguaCAqLywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0
dWJzLmggKi8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2Vz
Lm1ha2UgKi8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBH
ZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywK
QEAgLTI1NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBE
RkdDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZH
Q29kZUJsb2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2Vy
dGlvbnMuaCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1
MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNB
IC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEsOCBAQAogCQkJ
CTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovLAogCQkJ
CUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlC
QzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAorCQkJCTBGMkI2
NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2
QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3MTM1RTAwMkM3
RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3MTM1RTAwMkM3
RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlC
NiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBAQAogCQkJCUY2
OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAogCQkJCUMy
RDU4QzMzMTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJ
CURERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJ
CQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8s
CisJCQkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVy
LmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmgg
Ki8sCiAJCQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3BwICovLApA
QCAtMjkyMCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50
MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5
LmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAot
CQkJCUE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgg
Ki8sCiAJCQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hh
aW4uY3BwICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFs
RnVuY3Rpb24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTREQTgxOEUwRDk5
RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMw
MEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0Ug
LyogSlNBcnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlci5oICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQk4NkZB
OUU4RjE0MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQkM3RjhG
QkEwRTE5RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3ICszMDQ4LDMy
IEBACiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAog
CQkJCTE0QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCiAJCQkJODY1
QTMwRjAxMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEYy
QjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJF
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJOTc4OEZDMjIx
NDcxQUQwQzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFE
MEMwMDY4Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2
Qjk4IC8qIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAw
QjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3IC8q
IEpTRnVuY3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1
bmN0aW9uLmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25J
bmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZDNTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAq
LywKKwkJCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovLAogCQkJ
CTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8sCiAJCQkJ
QThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJCQkJQkM3
NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywK
IAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aCAqLywKKwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8s
CisJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAorCQkJ
CTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCTY1RUE0
Qzk5MDkyQUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0QzlBMDkyQUY5
RTIwMDkzRDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRBMDAyRTM1ODcg
LyogSlNOYW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJCQkJMEY5MTlE
MDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBG
OTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJ
MTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBGMkI2NkNDMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCTBG
MkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywK
KwkJCQkwRjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5j
cHAgKi8sCisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5
cy5jcHAgKi8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMu
aCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAor
CQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJC
NjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQlCQzIyQTM5
QTBFMTZFMTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMTRGMjUy
NTYwRDA4REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJCQkxNDQyNTY1
RjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1MSw2ICszMTg2
LDggQEAKIAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCiAJCQkJ
MEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8sCiAJCQkJ
MEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAorCQkJCTBG
MkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
Ki8sCisJCQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5jcHAgKi8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5o
ICovLAogCQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFw
LmNwcCAqLywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENEMjkzMzEwMEI1
QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAv
KiBUcmFjaW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcu
aCAqLywKLQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAq
LywKLQkJCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCAqLywKKwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi8sCisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJh
eUlubGluZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eXMuaCAqLywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwICovLAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5o
ICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAog
CQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywK
IAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1
MzgsMTIgKzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQ
cm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3
QjIgLyogQXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRF
MDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZE
RjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhD
b25zdGFudFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZB
QyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0
Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJh
eVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBC
dXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgy
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1
LDYgKzM3MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyog
Q2FsbElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4
NUI0RiAvKiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUx
RjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICsz
NzEyLDcgQEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdp
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xv
d1BhdGhzLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJCQkJMEZEQjJD
RUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RjYwRTE2RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyRUFEMkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2
RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3
ODEwQzE3OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJn
dW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1
ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJQTdEODlDRjQx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhl
bHBlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJCQlBN0Q4OUNG
ODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQ
UkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZB
MTFFNDAwOTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYg
KzM4MDksNyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29t
cGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5
Q0Q1RDAwMTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYx
QzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJG
MDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1
ODFCQjE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9k
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBE
RkdPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNB
RDggLyogREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjg0LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdP
U1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYw
MEM3MjUzMiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8q
IERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
OUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywK
QEAgLTM2OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERG
R1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8q
IEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNB
MjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBACiAJCQkJMEYy
MUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAw
NUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FE
QjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJD
QzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICov
LApAQCAtMzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyog
RlRMRm9ybWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAv
KiBGVExKSVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMw
MDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1Miw2IEBA
CiAJCQkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4g
SGVhZGVycyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0
IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdC
MEUxOTlDMDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDI5RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyog
SklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhG
MzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIw
RjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZG
RjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkVGNjgzNUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JB
QkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2
N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRS
ZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMg
LyogSlNDVGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxNCw3
IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYw
IC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAw
MEQ1Njk1NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2
ICs0MDI2LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVm
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8q
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUsNyBAQAogCQkJ
CTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAw
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBw
ZXJNYXAuaCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJCQlBN0U1QUIz
ODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyRTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJFMzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xl
dmVsSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNC
RDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0
MDg5LDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxv
Y2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAogCQkJCUMyMTEy
MkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1h
dGhPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2
N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4
RTkyMjIgLyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4
MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNv
bnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3Qzkz
IC8qIE5vZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3IEBACiAJCQkJ
MEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHlt
b3JwaGljUHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMw
MDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkU1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAogCQkJCTE0NzRD
MzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYz
MEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAv
KiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3
RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5
NCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJj
ZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAg
LyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlE
QzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1
MTMgLyogU3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1
OEIxNkFCNTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAg
LyogU3RyaW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90
eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAogCQkJCUMyRkUx
OEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVj
dHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTND
OEYgLyogU3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVC
OTI1MDkwMEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8q
IFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1
NDAyNzkgLyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEz
QTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2lu
Zy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVk
QXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQg
LyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBp
biBIZWFkZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0
MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQy
N0E0OCAvKiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3
RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2
NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyog
RGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1
QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0
REVBOCAvKiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMw
MEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0Yx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFE
QUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5
NzkxMTQ2QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNB
IC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0
Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI4MDg1NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBI
ZWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAogCQkJCUMyNUQ3
MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYw
MDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMw
NzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkz
NjAwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAv
KiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3
RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAy
RTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdF
MDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4
NzMsNyBAQAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBS
ZWZQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5
QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVF
MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJF
RTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4
OTYsNyBAQAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2
MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEYyQjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyog
TWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkx
MDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyArNDk0Nywy
MSBAQAogCQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJl
ZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdF
QzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjEx
QzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0
MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgz
RDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMz
RDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0
MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJj
ZUNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8q
IFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0Uw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgw
NSw2ICs0OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFi
bGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFF
M0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMw
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjkxOUQyNTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXph
YmxlSW5kZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdG
b3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNs
YXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJl
dHVybiBpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAK
IGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC05OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJ
bmRleAogaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBl
SW50ODoKICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJ
bnQxNjoKKyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7
Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAg
IHJldHVybiBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNh
c2UgVHlwZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5
cGVkQXJyYXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAg
ICByZXR1cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2
OgorICAgIGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5Owot
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAg
IHJldHVybiBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAg
IGNhc2UgVHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAg
Y2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICBy
ZXR1cm4gSklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBA
IC0xMjIsNiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xh
c3MKICAgICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJ
VEFycmF5TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2Ug
SklUSW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVElu
dDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWlu
dDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMy
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFy
cmF5OgorICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBD
UkFTSCgpOworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGlu
ZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjYsMjkgKzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8o
CiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8oKSkpCiAg
ICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYgKGNsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAo
Y2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlZEFy
cmF5SW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OwotICAgICAgICBjYXNl
IFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50MTZBcnJheTsKLSAg
ICAgICAgY2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDMy
QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgcmV0dXJu
IFNwZWNVaW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0g
ICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5OwotICAgICAgICBjYXNlIFR5
cGVkQXJyYXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OwotICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQz
MkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgcmV0
dXJuIFNwZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0g
ICAgICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVk
QXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBT
cGVjSW50OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gU3BlY0lu
dDE2QXJyYXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBTcGVjSW50MzJB
cnJheTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5
OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OENs
YW1wZWRBcnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBTcGVjVWlu
dDE2QXJyYXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gU3BlY1VpbnQz
MkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQz
MkFycmF5OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQ2
NEFycmF5OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBp
ZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8oKSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNTQwNjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9T
dHJpbmcoQXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShB
cnJheTo6VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNl
IEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CisgICAgY2Fz
ZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOworICAg
IGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0Owor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5OworICAgIH0KK30KKwog
dm9pZCBBcnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQu
cHJpbnQodHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCksIGNvbnZlcnNpb24oKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFyKiBhcnJheUNsYXNzVG9T
dHJpbmcoQXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJy
YXk6OlNwZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFy
cmF5OjpDb252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJh
eTo6VHlwZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAgICAgQXJyYXlNb2RlKCkK
QEAgLTM4MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHlwZSgpID09IEFy
cmF5OjpTdHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVkQXJyYXlUeXBlKHR5cGUo
KSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcnJheU1vZGUmIG90
aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2Nywz
NyArMjY2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uQXJndW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQx
Nl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2Yo
aW50MzJfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVz
Y3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxv
YXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52
bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAg
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1v
ZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckZsb2F0
VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50
OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGludDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJh
eURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1
aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMy
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5n
cHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MSwzNyArMjU4MSwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1l
bnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQx
NkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6
SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSht
X2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCks
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4
X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
LCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1
bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUo
KS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtMjg3Miw0NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJv
cGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWlu
dDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5
LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0
LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIo
KSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52
bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlw
dG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlU
eXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXko
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KIAog
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4MywzMiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBT
aQogICAgIH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2
ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBz
d2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNh
c2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MTZB
cnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICBy
ZXR1cm4gJm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJh
eTo6VWludDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OEFycmF5RGVz
Y3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBy
ZXR1cm4gJm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQx
NkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAg
ICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDMy
QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAg
ICByZXR1cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENvbXBpbGVyOjpKdW1wIFNw
ZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wR1BS
LCBBcnJheU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUpCiB7CiAgICAgc3dpdGNo
IChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlw
ZWRBcnJheURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnRO
b2RlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6OmluZm8oKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2Ug
QXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAg
ICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdw
cigpKTsKQEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3Vi
bGVUb0J5dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBO
b2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25l
ZG5lc3MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJy
YXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQo
dHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwor
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlm
IChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0
eXBlKSkKICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSks
IHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoK
LSAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYg
KGlzU2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0
LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzOSwxMiArMjYw
NSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVm
YXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8
fCBzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUo
dHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQo
ZWxlbWVudFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7Cisg
ICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAg
ICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRT
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwg
VmFsdWVSZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQu
ZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBH
UFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyBy
b3VuZGluZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAz
KSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3
Nyw4ICsyNjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1
ZS5hc051bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewot
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFt
cGVkKHR5cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7
CiAgICAgICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2NjEsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRj
aFJlZyk7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChp
c0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlw
ZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2pp
dCwgc2NyYXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChz
Y3JhdGNoKTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVt
YmVyVXNlOiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlm
IChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1
ZU9wKHRoaXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7
CkBAIC0yNzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JJCiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAg
ICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9
IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJs
ZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQz
MihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAt
Mjc0OSw5ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SQogICAgIEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAg
ICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRv
ci5tX2xlbmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0g
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkp
IHsKICAgICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzT25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNp
emVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAg
QVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJy
YW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5n
dGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0
OgogICAgICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJl
Zyk7CiAgICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0
UmVnKTsKQEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBw
cm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNT
RVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5NywxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChi
YXNlVXNlLCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBu
b2RlLCBtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAg
ICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRv
ci5tX2xlbmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7Cisg
ICAgICAgIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7
CisgICAgfQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUodmFsdWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9G
bG9hdCh2YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDksNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAot
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURl
c2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZz
ZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmll
dyhub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVn
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0MTI2LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUt
PmFycmF5TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE5
MSwxNiArNDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
CiAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlz
VHlwZWRWaWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCBy
ZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIp
OwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwotICAgIH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1
bmN0aW9uTm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTczLDEwICsxOTczLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVf
dCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVk
QXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
LCBHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXpl
KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRB
cnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBl
KTsKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29t
cGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rp
b25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsK
QEAgLTIxMTgsOCArMjExOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVk
Z2UpOwogICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQ
UlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQ
UlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNr
QXJyYXkoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2Vu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tl
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
ZW51bSBDb3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNv
cHlUb2tlbiwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9
OwogCitjbGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
ZWZlckdDRm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhl
YXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVt
ZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgp
CisgICAgeworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdS
ZWZDb3VudGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsK
KworLy8gQSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwg
cmVmZXJlbmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJvbSB0aGUg
aGVhcCwgd2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qga25vd3Mg
aXRzIGluY29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZlIHRoZSBp
bnZhcmlhbnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8gdGhlIEdD
CisvLyBoZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNv
dW50ZWQgOiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgorICAgIEdD
SW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDApCisgICAg
eworICAgIH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNl
bGxzKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVmZXJlbmNl
cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsKKyAgICB9
CisgICAgCisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgaWYg
KGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAg
ICAgIHJldHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVjdG9y
T2ZDZWxscygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2VuZXJhbGx5
IG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRoaXMKKyAg
ICAvLyByZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmplY3QgdG8g
dGhlIEdDJ3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjphZGRS
ZWZlcmVuY2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxs
Kik7CisgICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHdlIHdp
c2ggdG8ga2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxzZSBpZiB3
ZSBkb24ndC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlmIGl0IGRv
ZXMgc28sIHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2FudAorICAg
IC8vIHRvIHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGZh
bHNlIHVubGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlzdC4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBmaWx0ZXJJ
bmNvbWluZ1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0KKyAgICAK
KyAgICBib29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5jb2RlZFBv
aW50ZXIgJiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWluZygpIGNv
bnN0IHsgcmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2luZ2xldG9u
KCkgY29uc3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZDZWxscygp
OyB9CisgICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0Nl
bGwqPihtX2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQorICAgIAor
ICAgIFZlY3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxWZWN0b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAgCisgICAg
Ly8gU2luZ2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAvLyBTaW5n
bGV0b24gZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBjZWxs
cy4KKyAgICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdD
SW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lc19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUg
IkhlYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29s
IEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNl
bGwpCit7CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBv
aW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsK
KyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1Np
bmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VS
VChIZWFwOjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkp
OworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8SlNDZWxs
Kj4qIHZlY3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBl
bmQoc2luZ2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAg
bV9lbmNvZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAg
ICAgIEFTU0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZp
bHRlckZ1bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlcklu
Y29taW5nUmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9uKQorewor
ICAgIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJlbmNlcy5cbiIpOworICAg
IAorICAgIGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIXRoaXMtPmlz
RGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3VudCgpKTsKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFzIG5vIGluY29taW5nLlxu
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHRoaXMt
PmlzRGVmZXJyZWQoKSk7CisgICAgCisgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAg
IGlmIChmaWx0ZXJGdW5jdGlvbihzaW5nbGV0b24oKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFNpbmdsZXRvbiBwYXNzZWQuXG4iKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmluZyBzaW5nbGV0b24u
XG4iKTsKKyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFz
QW55SW5jb21pbmcoKSk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIiAgIEhhcyAiLCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSwgIiBlbnRyaWVzLlxu
Iik7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGkt
LSkgPSB2ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5y
ZW1vdmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUo
KSA+PSAyKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAg
U3RpbGwgaGFzICIsIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpLCAiIGVudHJpZXMuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygp
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCIgICBSZW1vdmluZy5cbiIpOworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAg
ICAgICBtX2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWlu
ZygpKTsKKyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
ICAgU2hyaW5raW5nIHRvIHNpbmdsZXRvbi5cbiIpOworICAgIEpTQ2VsbCogc2luZ2xldG9uID0g
dmVjdG9yT2ZDZWxscygpLT5hdCgwKTsKKyAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAg
IG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzaW5nbGV0b24pIHwg
c2luZ2xldG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0X2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21p
bmdSZWZDb3VudGVkLCBtdXN0IHN1cHBvcnQgYSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8g
bWV0aG9kLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0lu
Y29taW5nUmVmQ291bnRlZFNldCgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
bmF0aXZlIG9iamVjdCBpcyBuZXcgdG8gdGhpcyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2Uo
SlNDZWxsKiwgVCopOworICAgIAorICAgIHZvaWQgc3dlZXAoKTsKKyAgICAKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyBib29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFk
KEpTQ2VsbCopOworICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1f
Ynl0ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElu
bGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0SW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisK
KyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkK
K3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+
Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3Zl
Y3Rvci5zaXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1Jl
ZmVyZW5jZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9i
amVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpIHsK
KyAgICAgICAgQVNTRVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgQVNTRVJUKG9i
amVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBv
YmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgIEFTU0VSVChvYmplY3QtPmlzRGVm
ZXJyZWQoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBtX3Zl
Y3RvcltpXTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5C
eXRlcygpOworICAgICAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVkKCkpOworICAgICAgICBB
U1NFUlQob2JqZWN0LT5udW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpKTsKKyAgICAgICAgaWYg
KCFvYmplY3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBtX2J5dGVzIC09IHNpemU7CisgICAgICAgIG1fdmVjdG9y
W2ktLV0gPSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpy
ZW1vdmVEZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2Vs
bCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIK
ICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTM1OCw2ICszNTksMTQgQEAgdm9p
ZCBIZWFwOjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1fZGZnQ29kZUJsb2Nr
cy5qZXR0aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0Nl
bGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1fYXJyYXlCdWZmZXJz
LmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxlY3RJZk5lY2Vzc2Fy
eU9yRGVmZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1NpemVFc3RpbWF0ZUlu
Qnl0ZXMoKSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhl
YXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6
aXRlcmF0b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02MjEsMTQgKzYzMCwx
OSBAQCBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNl
Lm9iamVjdENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUoKQoreworICAgIHJl
dHVybiBtX2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7Cit9CisKIHNp
emVfdCBIZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBt
X3N0b3JhZ2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7CisgICAgcmV0dXJuIG1f
b2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFTaXplKCk7
CiB9CiAKIHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3Bh
Y2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgcmV0dXJuIG1f
b2JqZWN0U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRy
YVNpemUoKTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkK
QEAgLTcwNyw2ICs3MjEsMTIgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVw
VG9nZwogICAgIGRhdGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2Vu
ZGlmCiAgICAgCisgICAgZG91YmxlIGJlZm9yZSA9IDA7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpIHsKKyAgICAgICAgZGF0YUxvZygiW0dDIiwgc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCA/ICIg
KGVhZ2VyIHN3ZWVwKSIgOiAiIiwgIjogIik7CisgICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1l
TVMoKTsKKyAgICB9CisgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdh
cmJhZ2UgQ29sbGVjdGlvbiIpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFs
RGVwdGgpOwpAQCAtNzQ1LDYgKzc2NSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7Cisg
ICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAg
ICAgbV9hcnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxv
Y2tTbmFwc2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpA
QCAtODE1LDYgKzg0MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBU
b2dnCiAKICAgICBpZiAoT3B0aW9uczo6c2hvd09iamVjdFN0YXRpc3RpY3MoKSkKICAgICAgICAg
SGVhcFN0YXRpc3RpY3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOworICAgIAorICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7CisgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1l
TVMoKTsKKyAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywgIiwgY3VycmVudEhl
YXBTaXplIC8gMTAyNCwgIiBrYl1cbiIpOworICAgIH0KIAogI2lmIEVOQUJMRShBTExPQ0FUSU9O
X0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29sbGVjdGlvbi5cbiIp
OwpAQCAtOTI0LDEyICs5NTQsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRo
KCkKICAgICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVw
dGgoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAK
ICAgICBtX2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnRE
ZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0
aCgpOwogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lm
bmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgog
I2luY2x1ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNp
bmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVT
ZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQ
YXNzUmVmUHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8g
ZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFw
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzaXplX3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAg
CiAgICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJl
dHVybiBtX2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZl
cmVuY2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZl
ckdDRm9yQVdoaWxlOwogICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5l
OwogICAgICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUU3R1YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEJsb2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAg
dm9pZCBpbmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVm
ZXJyYWxEZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lm
TmVlZGVkKCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2
ICsyNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9j
a0FsbG9jYXRvcjsKICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAg
Q29waWVkU3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0PEFycmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFN
ZW1vcnlVc2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAg
ICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBhcnJheUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheUNvbnN0cnVjdG9y
VGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlQcm90b3R5cGVU
YWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmFycmF5
UHJvdG90eXBlVGFibGU7IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVh
blByb3RvdHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUt
PnZtKCkuYm9vbGVhblByb3RvdHlwZVRhYmxlOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBIYXNo
VGFibGUqIGRhdGFWaWV3VGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxG
cmFtZS0+dm0oKS5kYXRhVmlld1RhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIGRhdGVUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52
bSgpLmRhdGVUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29u
c3RydWN0b3JUYWJsZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52
bSgpLmRhdGVDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFi
bGUqIGVycm9yUHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNh
bGxGcmFtZS0+dm0oKS5lcnJvclByb3RvdHlwZVRhYmxlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhw
ZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwot
ICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXpl
X3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICAgICAgSnVtcExpc3Qg
ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUp
OworICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOworICAgICAgICBKdW1w
TGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIAogICAgICAgICAvLyBQcm9w
ZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdUMC4gcmVnVDIgY29udGFpbnMgaW5kZWNp
bmcgdHlwZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0b3JlIGlzIG5vdCB5ZXQgbG9hZGVk
LiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKQEAgLTUwMyw4ICs1MDMsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBKdW1wTGlzdCBlbWl0R2VuZXJpY0NvbnRpZ3Vv
dXNQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5n
VHlwZSBpbmRleGluZ1NoYXBlID0gQ29udGlndW91c1NoYXBlKTsKICAgICAgICAgSnVtcExpc3Qg
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlS
b3VuZGluZyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5
cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUp
OwogICAgICAgICAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBL
bm93bk5vdEZpbmFsIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0
OSwzNSArMTU0OSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbElu
CiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmlu
dDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFy
cmF5RGVzY3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhBcnJh
eURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVp
bnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwg
bV92bS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Rmxv
YXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5m
bG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRB
cnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5
cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlIAorICAgICAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CkBAIC0xNjE4LDM1ICsxNTk2LDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToK
ICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50OEFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBTaWdu
ZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRJbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgMiwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklUSW50MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0t
PmludDMyQXJyYXlEZXNjcmlwdG9yKCksIDQsIFNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91
bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVpbnQ4QXJyYXk6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCBtX3ZtLT51aW50OEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVFVp
bnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCksIDEsIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCBtX3ZtLT51aW50MTZBcnJheURlc2NyaXB0b3IoKSwgMiwgVW5zaWduZWRUeXBlZEFycmF5LCBU
cnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50MzJBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCA0LCBV
bnNpZ25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVEZsb2F0MzJBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCA0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9h
dDY0QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0NjRBcnJheURlc2NyaXB0
b3IoKSwgOCk7Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7
CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5
TW9kZShhcnJheU1vZGUpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0
eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTY2OCw4ICsxNjIzLDEwIEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW4KICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX3B1dF9ieV92YWxfZ2VuZXJpYykpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNp
emUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsK
KyAgICAKICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1
c2UgdGhlIGNsYXNzSW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CiAgICAgLy8gY2xvYmJl
cmluZyB0aGUgcmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5k
IHByb3BlcnR5LgogCkBAIC0xNjg5LDE5ICsxNjQ2LDE5IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheUdldEIKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNj
cmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNl
dCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZz
ZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBB
ZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
UHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAg
ICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAgICAgICAgIGxvYWQ4U2lnbmVkKEJhc2VJbmRl
eChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc09uZSks
IHJlc3VsdFBheWxvYWQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlm
IChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0
eXBlKSkKICAgICAgICAgICAgIGxvYWQxNlNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHks
IFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxv
YWQxNihCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7
CkBAIC0xNzE0LDcgKzE2NzEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCCiAgICAgfQogICAgIAogICAgIEp1bXAgZG9uZTsKLSAgICBpZiAoZWxlbWVudFNpemUg
PT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSkgeworICAgIGlmICh0eXBl
ID09IFR5cGVVaW50MzIpIHsKICAgICAgICAgSnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9hZCwgVHJ1c3RlZEltbTMyKDApKTsKICAgICAgICAg
CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOwpA
QCAtMTc0MCw4ICsxNjk3LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eUdldEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVt
ZW50U2l6ZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBl
KQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcHJvcGVydHkg
PSByZWdUMTsKQEAgLTE3NTgsMTEgKzE3MTcsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRG
bG9hdFR5cGVkQXJyYXlHZQogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2gpOwot
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Moc2NyYXRj
aCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRv
ci5tX2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCks
IGJhc2UpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3Moc2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIo
Y2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBiYXNlKTsKICAgICAKLSAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2Ug
NDoKICAgICAgICAgbG9hZEZsb2F0KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNGb3Vy
KSwgZnBSZWdUMCk7CiAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKGZwUmVnVDAsIGZwUmVn
VDApOwpAQCAtMTc4OSw4ICsxNzQ4LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRU
eXBlZEFycmF5R2UKICAgICByZXR1cm4gc2xvd0Nhc2VzOyAgICAKIH0KIAotSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3Mg
c2lnbmVkbmVzcywgVHlwZWRBcnJheVJvdW5kaW5nIHJvdW5kaW5nKQorSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAg
ICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xODA4
LDggKzE3NjksOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNz
SW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGJh
ZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9G
b3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MjEsMTEgKzE3ODIsMTEgQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdv
dWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRo
YXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVy
ZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0
KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKICAgICAKLSAgICBpZiAocm91
bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2lnbmVkbmVzcywgc2lnbmVkbmVzcyA9IFVuc2ln
bmVkVHlwZWRBcnJheSk7CisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICBBU1NF
UlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghaXNTaWduZWQodHlw
ZSkpOwogICAgICAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBlYXJs
eVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIEp1bXAgdG9vQmlnID0gYnJh
bmNoMzIoR3JlYXRlclRoYW4sIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKICAg
ICAgICAgeG9yMzIoZWFybHlTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTgzNiw3ICsxNzk3
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgICAgICBp
bkJvdW5kcy5saW5rKHRoaXMpOwogICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgMToKICAgICAg
ICAgc3RvcmU4KGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNPbmUpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUzLDggKzE4MTQsMTAgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIHJldHVybiBzbG93Q2FzZXM7
CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIHNpemVfdCBlbGVtZW50U2l6ZSkK
K0pJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAgICAgdW5z
aWduZWQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKQEAgLTE4NzIsOCArMTgzNSw4IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5UHUKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBlYXJseVNjcmF0
Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
ZWFybHlTY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5n
dGhPZmZzZXQpKSk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwpAQCAtMTg5
OCw5ICsxODYxLDkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQog
ICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0
X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJh
c2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0
b3IubV9zdG9yYWdlT2Zmc2V0KSwgbGF0ZVNjcmF0Y2gpOworICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsK
ICAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6
ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBS
ZWdUMCwgZnBSZWdUMCk7CiAgICAgICAgIHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxh
dGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNiwxNCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJh
eUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0KKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgcmVzdWx0
LCBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiYgbmV1dGVyZWRWaWV3cykKK2Jvb2wg
QXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGtlZXBBbGl2ZSh0aGlzKTsKIApAQCAtNDIsMTMgKzQxLDkg
QEAgYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXIoQXJyYXlCdWZmZXJDbwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSB0cnVl
OwotICAgIGZvciAoQXJyYXlCdWZmZXJWaWV3KiBpID0gbV9maXJzdFZpZXc7IGk7IGkgPSBpLT5t
X25leHRWaWV3KSB7Ci0gICAgICAgIGlmICghaS0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAg
ICBhbGxWaWV3c0FyZU5ldXRlcmFibGUgPSBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc05ldXRl
cmFibGUgPSAhbV9waW5Db3VudDsKIAotICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFibGUpCisg
ICAgaWYgKGlzTmV1dGVyYWJsZSkKICAgICAgICAgbV9jb250ZW50cy50cmFuc2ZlcihyZXN1bHQp
OwogICAgIGVsc2UgewogICAgICAgICBtX2NvbnRlbnRzLmNvcHlUbyhyZXN1bHQpOwpAQCAtNTYs
MzYgKzUxLDEzIEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICB3aGlsZSAobV9maXJzdFZpZXcp
IHsKLSAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBjdXJyZW50ID0gbV9maXJzdFZpZXc7Ci0gICAg
ICAgIHJlbW92ZVZpZXcoY3VycmVudCk7Ci0gICAgICAgIGlmIChhbGxWaWV3c0FyZU5ldXRlcmFi
bGUgfHwgY3VycmVudC0+aXNOZXV0ZXJhYmxlKCkpCi0gICAgICAgICAgICBjdXJyZW50LT5uZXV0
ZXIoKTsKLSAgICAgICAgbmV1dGVyZWRWaWV3cy5hcHBlbmQoY3VycmVudCk7CisgICAgZm9yIChz
aXplX3QgaSA9IG51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCk7IGktLTspIHsKKyAgICAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3
Kj4oaW5jb21pbmdSZWZlcmVuY2VBdChpKSk7CisgICAgICAgIGlmICh2aWV3KQorICAgICAgICAg
ICAgdmlldy0+bmV1dGVyKCk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFy
cmF5QnVmZmVyOjphZGRWaWV3KEFycmF5QnVmZmVyVmlldyogdmlldykKLXsKLSAgICB2aWV3LT5t
X2J1ZmZlciA9IHRoaXM7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IDA7Ci0gICAgdmlldy0+bV9u
ZXh0VmlldyA9IG1fZmlyc3RWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldykKLSAgICAgICAgbV9m
aXJzdFZpZXctPm1fcHJldlZpZXcgPSB2aWV3OwotICAgIG1fZmlyc3RWaWV3ID0gdmlldzsKLX0K
LQotdm9pZCBBcnJheUJ1ZmZlcjo6cmVtb3ZlVmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17
Ci0gICAgQVNTRVJUKHRoaXMgPT0gdmlldy0+bV9idWZmZXIpOwotICAgIGlmICh2aWV3LT5tX25l
eHRWaWV3KQotICAgICAgICB2aWV3LT5tX25leHRWaWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9w
cmV2VmlldzsKLSAgICBpZiAodmlldy0+bV9wcmV2VmlldykKLSAgICAgICAgdmlldy0+bV9wcmV2
Vmlldy0+bV9uZXh0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgaWYgKG1fZmlyc3RWaWV3
ID09IHZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3ID0gdmlldy0+bV9uZXh0VmlldzsKLSAgICB2
aWV3LT5tX3ByZXZWaWV3ID0gdmlldy0+bV9uZXh0VmlldyA9IDA7Ci19Cit9IC8vIG5hbWVzcGFj
ZSBKU0MKIAotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1
ZmZlci5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
ICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTUgKzI2LDE3IEBACiAjaWZuZGVm
IEFycmF5QnVmZmVyX2gKICNkZWZpbmUgQXJyYXlCdWZmZXJfaAogCi0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIldl
YWsuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQXJy
YXlCdWZmZXJWaWV3OworY2xhc3MgSlNBcnJheUJ1ZmZlcjsKIAogY2xhc3MgQXJyYXlCdWZmZXJD
b250ZW50cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlCdWZmZXJDb250ZW50cyk7
CkBAIC00NSw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7IH0KIAogICAgIGlubGluZSB+QXJyYXlC
dWZmZXJDb250ZW50cygpOwotCisgICAgCiAgICAgdm9pZCogZGF0YSgpIHsgcmV0dXJuIG1fZGF0
YTsgfQogICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9zaXplSW5CeXRlczsg
fQogCkBAIC04NiwxMiArODgsMTMgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5
dGVzOwogfTsKIAotY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxBcnJheUJ1
ZmZlcj4geworY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJsaWMgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8
QXJyYXlCdWZmZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplKTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0
ZShBcnJheUJ1ZmZlciopOwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAgICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXJD
b250ZW50cyYpOworICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3Jl
YXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKIAogICAg
IC8vIE9ubHkgZm9yIHVzZSBieSBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXpl
ZC4KICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7
CkBAIC05OSwxNCArMTAyLDE2IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCogZGF0YSgpOwog
ICAgIGlubGluZSBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3Q7CiAgICAgaW5saW5lIHVuc2lnbmVk
IGJ5dGVMZW5ndGgoKSBjb25zdDsKKyAgICAKKyAgICBpbmxpbmUgc2l6ZV90IGdjU2l6ZUVzdGlt
YXRlSW5CeXRlcygpIGNvbnN0OwogCiAgICAgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IHNsaWNlKGludCBiZWdpbiwgaW50IGVuZCkgY29uc3Q7CiAgICAgaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IHNsaWNlKGludCBiZWdpbikgY29uc3Q7CisgICAgCisgICAgaW5saW5lIHZv
aWQgcGluKCk7CisgICAgaW5saW5lIHZvaWQgdW5waW4oKTsKIAotICAgIHZvaWQgYWRkVmlldyhB
cnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIHJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7
Ci0KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRl
bnRzJiwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMm
KTsKICAgICBib29sIGlzTmV1dGVyZWQoKSB7IHJldHVybiAhbV9jb250ZW50cy5tX2RhdGE7IH0K
IAogICAgIH5BcnJheUJ1ZmZlcigpIHsgfQpAQCAtMTE5LDggKzEyNCwxMSBAQCBwcml2YXRlOgog
ICAgIGlubGluZSB1bnNpZ25lZCBjbGFtcEluZGV4KGludCBpbmRleCkgY29uc3Q7CiAgICAgc3Rh
dGljIGlubGluZSBpbnQgY2xhbXBWYWx1ZShpbnQgeCwgaW50IGxlZnQsIGludCByaWdodCk7CiAK
KyAgICB1bnNpZ25lZCBtX3BpbkNvdW50OwogICAgIEFycmF5QnVmZmVyQ29udGVudHMgbV9jb250
ZW50czsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIG1fZmlyc3RWaWV3OworCitwdWJsaWM6CisgICAg
V2VhazxKU0FycmF5QnVmZmVyPiBtX3dyYXBwZXI7CiB9OwogCiBpbnQgQXJyYXlCdWZmZXI6OmNs
YW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpCkBAIC0xNTksNiArMTY3LDEyIEBA
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFycmF5QnVmZmVyKGNvbnRlbnRzKSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpCit7CisgICAgQXJyYXlCdWZmZXJDb250ZW50cyBjb250ZW50cyhjb25z
dF9jYXN0PHZvaWQqPihkYXRhKSwgYnl0ZUxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShjb250
ZW50cyk7Cit9CisKIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNp
emUpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZShudW1FbGVtZW50cywgZWxlbWVudEJ5dGVTaXplLCBB
cnJheUJ1ZmZlckNvbnRlbnRzOjpEb250SW5pdGlhbGl6ZSk7CkBAIC0xNzQsNyArMTg4LDcgQEAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZQogfQogCiBBcnJheUJ1ZmZl
cjo6QXJyYXlCdWZmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYgY29udGVudHMpCi0gICAgOiBtX2Zp
cnN0VmlldygwKQorICAgIDogbV9waW5Db3VudCgwKQogewogICAgIGNvbnRlbnRzLnRyYW5zZmVy
KG1fY29udGVudHMpOwogfQpAQCAtMTk0LDYgKzIwOCwxMSBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZl
cjo6Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY29udGVudHMubV9zaXplSW5CeXRl
czsKIH0KIAorc2l6ZV90IEFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25z
dAoreworICAgIHJldHVybiBzaXplb2YoQXJyYXlCdWZmZXIpICsgc3RhdGljX2Nhc3Q8c2l6ZV90
PihieXRlTGVuZ3RoKCkpOworfQorCiBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6c2xpY2UoaW50IGJlZ2luLCBpbnQgZW5kKSBjb25zdAogewogICAgIHJldHVybiBzbGljZUlt
cGwoY2xhbXBJbmRleChiZWdpbiksIGNsYW1wSW5kZXgoZW5kKSk7CkBAIC0yMTgsMTUgKzIzNywy
MyBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6Y2xhbXBJbmRleChpbnQgaW5kCiAgICAgcmV0dXJu
IGNsYW1wVmFsdWUoaW5kZXgsIDAsIGN1cnJlbnRMZW5ndGgpOwogfQogCit2b2lkIEFycmF5QnVm
ZmVyOjpwaW4oKQoreworICAgIG1fcGluQ291bnQrKzsKK30KKwordm9pZCBBcnJheUJ1ZmZlcjo6
dW5waW4oKQoreworICAgIG1fcGluQ291bnQtLTsKK30KKwogdm9pZCBBcnJheUJ1ZmZlckNvbnRl
bnRzOjp0cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5
dGVTaXplLCBBcnJheUJ1ZmZlckNvbnRlbnRzOjpJbml0aWFsaXphdGlvblBvbGljeSBwb2xpY3ks
IEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKLSAgICAvLyBEbyBub3QgYWxsb3cgMzIt
Yml0IG92ZXJmbG93IG9mIHRoZSB0b3RhbCBzaXplLgotICAgIC8vIEZJWE1FOiBXaHkgbm90PyBU
aGUgdHJ5RmFzdENhbGxvYyBmdW5jdGlvbiBhbHJlYWR5IGNoZWNrcyBpdHMgYXJndW1lbnRzLAot
ICAgIC8vIGFuZCB3aWxsIGZhaWwgaWYgdGhlcmUgaXMgYW55IG92ZXJmbG93LCBzbyB3aHkgc2hv
dWxkIHdlIGluY2x1ZGUgYQotICAgIC8vIHJlZHVkYW50IHVubmVjZXNzYXJpbHkgcmVzdHJpY3Rp
dmUgY2hlY2sgaGVyZT8KKyAgICAvLyBEbyBub3QgYWxsb3cgMzEtYml0IG92ZXJmbG93IG9mIHRo
ZSB0b3RhbCBzaXplLgogICAgIGlmIChudW1FbGVtZW50cykgewogICAgICAgICB1bnNpZ25lZCB0
b3RhbFNpemUgPSBudW1FbGVtZW50cyAqIGVsZW1lbnRCeXRlU2l6ZTsKLSAgICAgICAgaWYgKHRv
dGFsU2l6ZSAvIG51bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZSkgeworICAgICAgICBpZiAo
dG90YWxTaXplIC8gbnVtRWxlbWVudHMgIT0gZWxlbWVudEJ5dGVTaXplCisgICAgICAgICAgICB8
fCB0b3RhbFNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCkpKSB7CiAgICAgICAgICAgICByZXN1bHQubV9kYXRhID0gMDsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjU0LDYgKzI4MSw2IEBAIEFycmF5QnVmZmVy
Q29udGVudHM6On5BcnJheUJ1ZmZlckNvbnRlbnQKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiB1c2lu
ZyBKU0M6OkFycmF5QnVmZmVyOwotdXNpbmcgSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOwogCiAj
ZW5kaWYgLy8gQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDI4ICszMCwzNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQXJyYXlCdWZm
ZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0KQotICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCi0gICAg
LCBtX2lzTmV1dGVyYWJsZSh0cnVlKQotICAgICwgbV9idWZmZXIoYnVmZmVyKQotICAgICwgbV9w
cmV2VmlldygwKQotICAgICwgbV9uZXh0VmlldygwKQorQXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1
ZmZlclZpZXcoCisgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlT2Zmc2V0KGJ5dGVPZmZzZXQpCisgICAg
ICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkKKyAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCiB7
CiAgICAgbV9iYXNlQWRkcmVzcyA9IG1fYnVmZmVyID8gKHN0YXRpY19jYXN0PGNoYXIqPihtX2J1
ZmZlci0+ZGF0YSgpKSArIG1fYnl0ZU9mZnNldCkgOiAwOwotICAgIGlmIChtX2J1ZmZlcikgCi0g
ICAgICAgIG1fYnVmZmVyLT5hZGRWaWV3KHRoaXMpOwogfQogCiBBcnJheUJ1ZmZlclZpZXc6On5B
cnJheUJ1ZmZlclZpZXcoKQogewotICAgIGlmIChtX2J1ZmZlcikKLSAgICAgICAgbV9idWZmZXIt
PnJlbW92ZVZpZXcodGhpcyk7CisgICAgaWYgKCFtX2lzTmV1dGVyYWJsZSkKKyAgICAgICAgbV9i
dWZmZXItPnVucGluKCk7CiB9CiAKLXZvaWQgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQordm9p
ZCBBcnJheUJ1ZmZlclZpZXc6OnNldE5ldXRlcmFibGUoYm9vbCBmbGFnKQogewotICAgIG1fYnVm
ZmVyID0gMDsKLSAgICBtX2J5dGVPZmZzZXQgPSAwOworICAgIGlmIChmbGFnID09IG1faXNOZXV0
ZXJhYmxlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9pc05ldXRlcmFibGUgPSBmbGFn
OworICAgIAorICAgIGlmICghbV9idWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoZmxhZykKKyAgICAgICAgbV9idWZmZXItPnVucGluKCk7CisgICAgZWxzZQorICAgICAgICBt
X2J1ZmZlci0+cGluKCk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIEFycmF5QnVmZmVyVmll
d19oCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgotCisjaW5jbHVkZSAiVHlwZWRBcnJheVR5
cGUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTM2LDc2ICszNiw4OSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2Ns
YXNzIEV4ZWNTdGF0ZTsKKwogY2xhc3MgQXJyYXlCdWZmZXJWaWV3IDogcHVibGljIFJlZkNvdW50
ZWQ8QXJyYXlCdWZmZXJWaWV3PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBWaWV3VHlwZSB7Ci0gICAg
ICAgIFR5cGVJbnQ4LAotICAgICAgICBUeXBlVWludDgsCi0gICAgICAgIFR5cGVVaW50OENsYW1w
ZWQsCi0gICAgICAgIFR5cGVJbnQxNiwKLSAgICAgICAgVHlwZVVpbnQxNiwKLSAgICAgICAgVHlw
ZUludDMyLAotICAgICAgICBUeXBlVWludDMyLAotICAgICAgICBUeXBlRmxvYXQzMiwKLSAgICAg
ICAgVHlwZUZsb2F0NjQsCi0gICAgICAgIFR5cGVEYXRhVmlldwotICAgIH07Ci0gICAgdmlydHVh
bCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5
cGUgZ2V0VHlwZSgpIGNvbnN0ID0gMDsKIAorICAgIGJvb2wgaXNOZXV0ZXJlZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW1fYnVmZmVyIHx8IG1fYnVmZmVyLT5pc05ldXRlcmVkKCk7
CisgICAgfQorICAgIAogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcigpIGNvbnN0
CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKICAgICB9CiAKICAgICB2b2lkKiBiYXNlQWRkcmVz
cygpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2Jhc2VBZGRyZXNzOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9ieXRlT2Zmc2V0Owog
ICAgIH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0ID0gMDsKIAot
ICAgIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpIHsgbV9pc05ldXRlcmFibGUgPSBmbGFn
OyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZyk7
CiAgICAgYm9vbCBpc05ldXRlcmFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTmV1dGVyYWJsZTsg
fQogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfkFycmF5QnVmZmVyVmlldygpOwog
Ci1wcm90ZWN0ZWQ6Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUg
Ym9vbCBzZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0g
ICAgaW5saW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRh
Qnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7Ci0KLSAgICBpbmxpbmUgYm9vbCB6ZXJv
UmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOwot
Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChpbnQgc3Rh
cnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWdu
ZWQqIGxlbmd0aCk7Ci0KICAgICAvLyBIZWxwZXIgdG8gdmVyaWZ5IHRoYXQgYSBnaXZlbiBzdWIt
cmFuZ2Ugb2YgYW4gQXJyYXlCdWZmZXIgaXMKICAgICAvLyB3aXRoaW4gcmFuZ2UuCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBu
dW1FbGVtZW50cykKKyAgICBzdGF0aWMgYm9vbCB2ZXJpZnlTdWJSYW5nZSgKKyAgICAgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
LAorICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cykKICAgICB7Ci0gICAgICAgIGlmICghYnVm
ZmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1bnNpZ25lZCBieXRlTGVu
Z3RoID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgIGlmIChzaXplb2YoVCkgPiAxICYm
IGJ5dGVPZmZzZXQgJSBzaXplb2YoVCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgIGlmIChi
eXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVudHMgPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBi
eXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKKyAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nRWxlbWVu
dHMgPSAoYnl0ZUxlbmd0aCAtIGJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAo
bnVtRWxlbWVudHMgPiByZW1haW5pbmdFbGVtZW50cykKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIAorICAgIHZpcnR1YWwgSlNBcnJh
eUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSA9IDA7CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QnVmZmVyVmlldyhQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUg
Ym9vbCBzZXRJbXBsKEFycmF5QnVmZmVyVmlldyosIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisg
ICAgaW5saW5lIGJvb2wgc2V0UmFuZ2VJbXBsKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRh
Qnl0ZUxlbmd0aCwgdW5zaWduZWQgYnl0ZU9mZnNldCk7CisKKyAgICBpbmxpbmUgYm9vbCB6ZXJv
UmFuZ2VJbXBsKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHNpemVfdCByYW5nZUJ5dGVMZW5ndGgpOwor
CisgICAgc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCgKKyAgICAg
ICAgaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCisgICAgICAgIHVuc2ln
bmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwogCiAgICAgLy8gSW5wdXQgb2Zmc2V0IGlz
IGluIG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoaXMgYXJyYXkncyB2aWV3OwogICAgIC8vIG91
dHB1dCBvZmZzZXQgaXMgaW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgYnVm
ZmVyJ3Mgdmlldy4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBj
bGFtcE9mZnNldEFuZE51bUVsZW1lbnRzKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LCB1bnNpZ25lZCAqb2Zmc2V0LCB1bnNpZ25lZCAqbnVt
RWxlbWVudHMpCisgICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50cygKKyAg
ICAgICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICB1bnNpZ25lZCBh
cnJheUJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkICpvZmZzZXQsCisgICAgICAgIHVuc2ln
bmVkICpudW1FbGVtZW50cykKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG1heE9mZnNldCA9IChV
SU5UX01BWCAtIGFycmF5Qnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7CiAgICAgICAgIGlmICgqb2Zm
c2V0ID4gbWF4T2Zmc2V0KSB7CkBAIC0xMTksOCArMTMyLDYgQEAgcHJvdGVjdGVkOgogICAgICAg
ICAqbnVtRWxlbWVudHMgPSBzdGQ6Om1pbihyZW1haW5pbmdFbGVtZW50cywgKm51bUVsZW1lbnRz
KTsKICAgICB9CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIG5ldXRlcigp
OwotCiAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQXJyYXlCdWZmZXIncyBzdG9y
YWdlLCBwbHVzIHRoZSBieXRlIG9mZnNldC4KICAgICB2b2lkKiBtX2Jhc2VBZGRyZXNzOwogCkBA
IC0xMzAsOCArMTQxLDYgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QXJyYXlCdWZmZXI7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAgICBBcnJh
eUJ1ZmZlclZpZXcqIG1fcHJldlZpZXc7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX25leHRWaWV3
OwogfTsKIAogYm9vbCBBcnJheUJ1ZmZlclZpZXc6OnNldEltcGwoQXJyYXlCdWZmZXJWaWV3KiBh
cnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCkKQEAgLTE3Niw3ICsxODUsOCBAQCBib29sIEFycmF5
QnVmZmVyVmlldzo6emVyb1JhbmdlSW1wbCh1bnNpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgQXJyYXlCdWZmZXJWaWV3OjpjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBp
bnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBs
ZW5ndGgpCit2b2lkIEFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKAor
ICAgIGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zm
c2V0LCB1bnNpZ25lZCogbGVuZ3RoKQogewogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0
YXJ0ICs9IGFycmF5U2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEhhc2hFbnRyeTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owog
c3RydWN0IEhhc2hUYWJsZTsKIAogc3RydWN0IE1ldGhvZFRhYmxlIHsKQEAgLTk2LDYgKzk3LDEy
IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAKICAgICB0eXBlZGVmIGJvb2wgKCpHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgIEdldE93blByb3BlcnR5RGVzY3JpcHRv
ckZ1bmN0aW9uUHRyIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICAKKyAgICB0eXBlZGVm
IHZvaWQgKCpTbG93RG93bkFuZFdhc3RlTWVtb3J5KShKU0FycmF5QnVmZmVyVmlldyopOworICAg
IFNsb3dEb3duQW5kV2FzdGVNZW1vcnkgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeTsKKyAgICAKKyAg
ICB0eXBlZGVmIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBs
KShKU0FycmF5QnVmZmVyVmlldyopOworICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJy
YXlJbXBsOwogfTsKIAogI2RlZmluZSBDUkVBVEVfTUVNQkVSX0NIRUNLRVIobWVtYmVyKSBcCkBA
IC0xMzksNiArMTQ2LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFt
ZTo6cHV0RGlyZWN0VmlydHVhbCwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9w
ZXJ0eSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwK
KyAgICAgICAgJkNsYXNzTmFtZTo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSwgXAorICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRUeXBlZEFycmF5SW1wbCBcCiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6
VHlwZWRBcnJheVN0b3JhZ2VUeXBlCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGluZyB0aGUgbGlz
dC4KICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFj
cm8pIFwKICAgICBtYWNybyhBcnJheSkgXAorICAgIG1hY3JvKEFycmF5QnVmZmVyKSBcCisgICAg
bWFjcm8oQllURVNfUEVSX0VMRU1FTlQpIFwKICAgICBtYWNybyhCb29sZWFuKSBcCiAgICAgbWFj
cm8oRGF0ZSkgXAogICAgIG1hY3JvKEVycm9yKSBcCkBAIC01NSw2ICs1Nyw5IEBACiAgICAgbWFj
cm8oYXBwbHkpIFwKICAgICBtYWNybyhhcmd1bWVudHMpIFwKICAgICBtYWNybyhiaW5kKSBcCisg
ICAgbWFjcm8oYnVmZmVyKSBcCisgICAgbWFjcm8oYnl0ZUxlbmd0aCkgXAorICAgIG1hY3JvKGJ5
dGVPZmZzZXQpIFwKICAgICBtYWNybyhieXRlY29kZSkgXAogICAgIG1hY3JvKGJ5dGVjb2RlSW5k
ZXgpIFwKICAgICBtYWNybyhieXRlY29kZXMpIFwKQEAgLTExMiw5ICsxMTcsMTEgQEAKICAgICBt
YWNybyhwcm9wZXJ0eUlzRW51bWVyYWJsZSkgXAogICAgIG1hY3JvKHByb3RvdHlwZSkgXAogICAg
IG1hY3JvKHNldCkgXAorICAgIG1hY3JvKHNsaWNlKSBcCiAgICAgbWFjcm8oc291cmNlKSBcCiAg
ICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHN0YWNrKSBcCisgICAgbWFjcm8oc3Vi
YXJyYXkpIFwKICAgICBtYWNybyh0ZXN0KSBcCiAgICAgbWFjcm8odG9FeHBvbmVudGlhbCkgXAog
ICAgIG1hY3JvKHRvRml4ZWQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGFWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9EYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgorCisjaW5jbHVkZSAiSlNE
YXRhVmlldy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitEYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQorICAgIDogQXJyYXlCdWZm
ZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3Ro
KQoreworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKAorICAgIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgYnl0ZUxlbmd0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZl
ciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOworfQorCitKU0FycmF5QnVmZmVyVmlldyogRGF0
YVZpZXc6OndyYXAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQoreworICAgIHJldHVybiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgICAgIGV4ZWMsIGdsb2Jh
bE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShUeXBlRGF0YVZpZXcpLCBidWZmZXIoKSwgYnl0
ZU9mZnNldCgpLAorICAgICAgICBieXRlTGVuZ3RoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEYXRhVmlld19oCisjZGVm
aW5lIERhdGFWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUg
PHd0Zi9GbGlwQnl0ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3By
b3RlY3RlZDoKKyAgICBEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCitwdWJsaWM6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICAKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYnl0ZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBUeXBl
ZEFycmF5VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlRGF0
YVZpZXc7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXQodW5zaWduZWQgb2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgYm9vbCogc3Rh
dHVzID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgKyBzaXplb2YoVCkgPiBieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAqc3Rh
dHVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIFQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBi
eXRlTGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oCisg
ICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1f
YmFzZUFkZHJlc3MpICsgb2Zmc2V0KSwKKyAgICAgICAgICAgIGxpdHRsZUVuZGlhbik7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBzZXQodW5zaWduZWQg
b2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgYm9vbCogc3RhdHVzID0gMCkKKyAg
ICB7CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgKyBzaXpl
b2YoVCkgPiBieXRlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICAqc3RhdHVzID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnN0
YXR1cyA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04ob2Zmc2V0ICsgc2l6ZW9mKFQpIDw9IGJ5dGVMZW5ndGgoKSk7Cisg
ICAgICAgICpyZWludGVycHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9iYXNl
QWRkcmVzcykgKyBvZmZzZXQpID0KKyAgICAgICAgICAgIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFu
KHZhbHVlLCBsaXR0bGVFbmRpYW4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBt
X2J5dGVMZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIERhdGFW
aWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQzMkFy
cmF5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Zsb2F0MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw4MSArMjYsOSBAQAogI2lmbmRlZiBGbG9hdDMy
QXJyYXlfaAogI2RlZmluZSBGbG9hdDMyQXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJh
c2UuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Y2xhc3MgRmxvYXQzMkFycmF5IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGZsb2F0PiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJh
eT4gY3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAv
LyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3
aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0
bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpzZXQ7Ci0KLSAgICB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KGluZGV4ID49IFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9IHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0MzI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xh
c3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKLX07Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlPEZsb2F0MzJBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6
Y3JlYXRlKGNvbnN0IGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGFycmF5LCBsZW5n
dGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRl
PEZsb2F0MzJBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+OjpjcmVhdGVV
bmluaXRpYWxpemVkPEZsb2F0MzJBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQzMkFycmF5OjpG
bG9hdDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxmbG9hdD4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5
PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IEZsb2F0MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheUltcGw8RmxvYXQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpG
bG9hdDMyQXJyYXk7CiAKICNlbmRpZiAvLyBGbG9hdDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTEsOTggKzEwLDI1IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgog
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAogI2lmbmRlZiBGbG9hdDY0QXJyYXlfaAogI2RlZmluZSBG
bG9hdDY0QXJyYXlfaAogCi0jaW5jbHVkZSAiVHlwZWRBcnJheUJhc2UuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRmxvYXQ2NEFycmF5
IDogcHVibGljIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT4gewotcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShjb25zdCBk
b3VibGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxGbG9hdDY0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8Rmxv
YXQ2NEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1
c2luZyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpzZXQ7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IFR5cGVk
QXJyYXlCYXNlPGRvdWJsZT46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSk7Ci0gICAgfQotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0
NjRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUZs
b2F0NjQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBGbG9hdDY0QXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgCi0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0g
ICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGRvdWJsZT47Ci19OwotCi1QYXNzUmVmUHRy
PEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpjcmVh
dGUoY29uc3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8RmxvYXQ2NEFycmF5PihhcnJheSwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGU8
RmxvYXQ2NEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjpjcmVhdGVV
bmluaXRpYWxpemVkPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQotRmxvYXQ2NEFycmF5OjpG
bG9hdDY0QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBUeXBlZEFycmF5QmFzZTxkb3VibGU+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJh
eT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBGbG9hdDY0QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3ViYXJyYXlJbXBsPEZsb2F0NjRBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6
RmxvYXQ2NEFycmF5OwogCiAjZW5kaWYgLy8gRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdfaAorCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBHZW5lcmljVHlw
ZWRBcnJheVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKK3Byb3RlY3RlZDoKKyAgICBH
ZW5lcmljVHlwZWRBcnJheVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKGNvbnN0IHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUqIGRhdGEoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKj4oYmFzZUFkZHJlc3MoKSk7IH0KKyAgICAKKyAgICBib29sIHNldChHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4qIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQpCisgICAgeworICAgICAg
ICByZXR1cm4gc2V0SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZXRSYW5nZShjb25zdCB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHNldFJhbmdlSW1wbCgKKyAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLAorICAgICAgICAgICAgZGF0YUxlbmd0aCAqIHNp
emVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgICAgIG9mZnNldCAqIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgemVyb1Jh
bmdlKHVuc2lnbmVkIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIHJldHVy
biB6ZXJvUmFuZ2VJbXBsKG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwg
bGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB6ZXJvRmlsbCgpIHsgemVyb1JhbmdlKDAsIGxlbmd0aCgpKTsgfQorICAgIAorICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNOZXV0ZXJlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsK
KyAgICB9CisKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
bmRleCA8IHRoaXMtPmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGEoKVtpbmRleF07Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRl
eCA8IHRoaXMtPmxlbmd0aCgpKTsKKyAgICAgICAgZGF0YSgpW2luZGV4XSA9IEFkYXB0b3I6OnRv
TmF0aXZlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGVja0luYm91bmREYXRhKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpcy0+bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiAob2Zmc2V0IDw9IGxl
bmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgcG9zIDw9IGxlbmd0aAorICAgICAgICAgICAg
Ly8gY2hlY2sgb3ZlcmZsb3cKKyAgICAgICAgICAgICYmIG9mZnNldCArIHBvcyA+PSBvZmZzZXQp
OworICAgIH0KKyAgICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5
Vmlldz4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0
dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJW
aWV3KiB3cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAg
dW5zaWduZWQgbV9sZW5ndGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEdlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVmaW5lIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkdlbmVyaWNUeXBlZEFy
cmF5VmlldygKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIs
IGJ5dGVPZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUobGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVu
Z3RoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4gR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUoCisgICAgY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PiByZXN1bHQg
PSBjcmVhdGUobGVuZ3RoKTsKKyAgICBtZW1jcHkocmVzdWx0LT5kYXRhKCksIGFycmF5LCBsZW5n
dGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3Jl
YXRlKAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3NlZEJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlmICghdmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUg
QWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdlbmVyaWNUeXBlZEFycmF5Vmll
dyhidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9CisgICAgICAgIEFy
cmF5QnVmZmVyOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c3ViYXJyYXkoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdAoreworICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNh
bGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCB0aGlzLT5sZW5ndGgoKSwgJm9mZnNl
dCwgJmxlbmd0aCk7CisgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxBZGFwdG9yOjpUeXBl
PihidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKKyAgICByZXR1cm4g
Y3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitKU0FycmF5QnVmZmVyVmlldyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+Ojp3cmFwKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gQWRhcHRvcjo6SlNWaWV3VHlwZTo6Y3JlYXRlKAorICAgICAg
ICBleGVjLT52bSgpLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoQWRhcHRvcjo6
dHlwZVZhbHVlKSwgdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQXJyYXlC
dWZmZXI7CiBjbGFzcyBCdXR0ZXJmbHk7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBj
bGFzcyBTdHJ1Y3R1cmU7CkBAIC02NCw2ICs2NSw5IEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBw
dWJsaWNMZW5ndGgoKSB7IHJldHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3RoOyB9CiAgICAgdm9p
ZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgYXV4V29yZCkgeyB1Lmxlbmd0aHMucHVibGljTGVu
Z3RoID0gYXV4V29yZDsgfQogICAgIAorICAgIEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlcigpIHsg
cmV0dXJuIHUudHlwZWRBcnJheS5idWZmZXI7IH0KKyAgICB2b2lkIHNldEFycmF5QnVmZmVyKEFy
cmF5QnVmZmVyKiBidWZmZXIpIHsgdS50eXBlZEFycmF5LmJ1ZmZlciA9IGJ1ZmZlcjsgfQorICAg
IAogICAgIHN0YXRpYyBJbmRleGluZ0hlYWRlciogZnJvbShCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
ICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluZGV4aW5nSGVhZGVyKj4o
YnV0dGVyZmx5KSAtIDE7CkBAIC0xMTcsNiArMTIxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB1aW50MzJfdCBwdWJsaWNMZW5ndGg7IC8vIFRoZSBtZWFuaW5nIG9mIHRoaXMgZmllbGQgZGVw
ZW5kcyBvbiB0aGUgYXJyYXkgdHlwZSwgYnV0IGZvciBhbGwgSlNBcnJheXMgd2UgcmVseSBvbiB0
aGlzIGJlaW5nIHRoZSBwdWJsaWNseSB2aXNpYmxlIGxlbmd0aCAoYXJyYXkubGVuZ3RoKS4KICAg
ICAgICAgICAgIHVpbnQzMl90IHZlY3Rvckxlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgaW5k
ZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLiBUaGUgYWN0dWFsIHNpemUgb2YgdGhlIHN0b3JhZ2UgZGVw
ZW5kcyBvbiB0aGlzLCBhbmQgdGhlIHR5cGUuCiAgICAgICAgIH0gbGVuZ3RoczsKKyAgICAgICAg
CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBBcnJheUJ1ZmZlciogYnVmZmVyOworICAg
ICAgICB9IHR5cGVkQXJyYXk7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50OEFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBA
QAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NyArMjYsOSBA
QAogI2lmbmRlZiBJbnQ4QXJyYXlfaAogI2RlZmluZSBJbnQ4QXJyYXlfaAogCi0jaW5jbHVkZSAi
SW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJy
YXlCdWZmZXI7Ci0KLWNsYXNzIEludDhBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPGludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4
QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IGNyZWF0ZShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50
aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVz
dWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7
Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUeXBlSW50ODsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5l
IEludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBz
dXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+OwotfTsK
LQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJh
eT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRl
KGNvbnN0IGludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlPEludDhBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4g
SW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQ4QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUludDhBcnJheTo6SW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAg
IDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKQotewotfQotCi1QYXNzUmVmUHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShp
bnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7
Ci19Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDhBcnJheT4o
c3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50OEFycmF5OwogCiAjZW5kaWYgLy8gSW50OEFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MTZBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgpAQCAtMjYsNzcgKzI2LDkgQEAKICNpZm5kZWYgSW50MTZBcnJheV9oCiAjZGVm
aW5lIEludDE2QXJyYXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIEludDE2QXJy
YXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90PiB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBs
ZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUo
Y29uc3QgaW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGlu
ZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBv
bmx5IGJlIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmls
bGVkLiBEbwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZh
U2NyaXB0IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVm
UHRyPEludDE2QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAg
ICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IFR5cGVJbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDE2QXJyYXkoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAg
ICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRy
PEludDE2QXJyYXk+IEludDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4obGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUoY29uc3Qg
aW50MTZfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OmNyZWF0ZTxJbnQxNkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8SW50MTZBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDE2QXJyYXk+
IEludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAg
IHJldHVybiBUeXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxJbnQx
NkFycmF5PihsZW5ndGgpOwotfQotCi1JbnQxNkFycmF5OjpJbnQxNkFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5Ojpz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBs
ZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8
SW50MTZBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50MTZBcnJheTsKIAogI2VuZGlmIC8v
IEludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQz
MkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQzMkFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc0ICsyNiw5IEBACiAjaWZuZGVmIEludDMy
QXJyYXlfaAogI2RlZmluZSBJbnQzMkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEludDMyQXJyYXkgOiBwdWJs
aWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNyZWF0ZShjb25zdCBpbnQqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQz
MkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4g
aXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBu
b3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZp
bGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJy
YXlCYXNlPGludD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD46
OnNldDsKLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gc3ViYXJyYXko
aW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlw
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUludDMyOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBpbmxpbmUgSW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVj
dG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJh
c2U8aW50PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6Y3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3Jl
YXRlPEludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50
MzJBcnJheTo6Y3JlYXRlKGNvbnN0IGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlPEludDMyQXJyYXk+KGFycmF5LCBs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlPElu
dDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJ
bnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8aW50Pjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZDxJbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1JbnQzMkFycmF5OjpJbnQzMkFycmF5KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotICAgIDogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQs
IGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1w
bDxJbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpJbnQzMkFycmF5OwogCiAjZW5kaWYg
Ly8gSW50MzJBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisKKyNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
b25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZlcjo6c19pbmZvID0geworICAgICJBcnJheUJ1ZmZl
ciIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZl
cil9OworCitKU0FycmF5QnVmZmVyOjpKU0FycmF5QnVmZmVyKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyKQorICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQorICAgICwgbV9pbXBsKGFycmF5QnVmZmVyLmdldCgpKQoreworfQor
Cit2b2lkIEpTQXJyYXlCdWZmZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgbV9p
bXBsKTsKK30KKworSlNBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAorICAgIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHBhc3Nl
ZEJ1ZmZlcikKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZl
cjsKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1ZmZl
cih2bSwgc3RydWN0dXJlLCBidWZmZXIpOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAg
ICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpLAorICAgICAgICBOb25BcnJheSk7Cit9CisKK2Jvb2wgSlNB
cnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1
ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVy
KHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZl
cjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0
b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAgIGpzTnVtYmVyKHRoaXNPYmplY3QtPmltcGwo
KS0+Ynl0ZUxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBKU0FycmF5QnVmZmVyOjpwdXQoCisgICAgSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgUHV0UHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlcio+KGNlbGwpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgcmVqZWN0KGV4ZWMs
IHNsb3QuaXNTdHJpY3RNb2RlKCksICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5
IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykK
K3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIq
PihvYmplY3QpOworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVMZW5ndGgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgYXJyYXkgYnVmZmVyIHByb3BlcnR5
LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworYm9v
bCBKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXIqPihvYmplY3QpOworICAgIAorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpCisgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0
aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlcl9oCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVj
dCBCYXNlOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXIoVk0mLCBTdHJ1Y3R1
cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOworICAgIAorcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0FycmF5
QnVmZmVyKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPik7
CisgICAgCisgICAgQXJyYXlCdWZmZXIqIGltcGwoKSBjb25zdCB7IHJldHVybiBtX2ltcGw7IH0K
KyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2Jh
bE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKK3ByaXZhdGU6CisgICAgQXJyYXlCdWZm
ZXIqIG1faW1wbDsKK307CisKK2lubGluZSBBcnJheUJ1ZmZlciogdG9BcnJheUJ1ZmZlcihKU1Zh
bHVlIHZhbHVlKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXIqPih2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gd3JhcHBlci0+aW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRl
ICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geworICAgICJGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIDAsIDAsCisgICAgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IpCit9OworCitKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3I6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcigKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2UoZ2xv
YmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIHByb3Rv
dHlwZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgIkFycmF5QnVmZmVyIik7Cisg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgcHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKK30KKworSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSgK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBlKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIHJlc3VsdCA9Cisg
ICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihnbG9iYWxPYmpl
Y3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBl
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogY29uc3RydWN0b3IgPQorICAgICAg
ICBqc0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAg
IAorICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7
CisgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFsdGhv
dWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNuJ3Qgc2F5IHNvLCBpdCBpcyBpbiBmYWN0IGNvcnJl
Y3QgdG8gc2F5CisgICAgICAgIC8vICJuZXcgQXJyYXlCdWZmZXIoKSIuIFRoZSByZXN1bHQgaXMg
dGhlIHNhbWUgYXMgYWxsb2NhdGluZyBhbiBhcnJheSBidWZmZXIKKyAgICAgICAgLy8gd2l0aCBh
IHplcm8gbGVuZ3RoLgorICAgICAgICBsZW5ndGggPSAwOworICAgIH0KKyAgICAKKyAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCAxKTsK
KyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAor
ICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAg
ICAgZXhlYy0+dm0oKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0
cnVjdHVyZSgpLCBidWZmZXIpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKworQ29uc3RydWN0VHlwZSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoCisgICAgSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
K3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVm
ZmVyOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKworQ2FsbFR5cGUgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERh
dGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0QXJyYXlCdWZm
ZXI7CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorI2RlZmluZSBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTsKKworY2xhc3MgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGlj
OgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAg
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqKTsKKwor
cHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGNyZWF0ZShKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqKTsKKyAgICAK
KyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCos
IENvbnN0cnVjdERhdGEmKTsKKyAgICBzdGF0aWMgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxs
KiwgQ2FsbERhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24q
PihleGVjLT5jYWxsZWUoKSk7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBp
ZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBvZiBzbGljZSBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZl
ci4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJTbGljZSByZXF1
aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgIAorICAgIGludDMyX3QgYmVnaW4g
PSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICAKKyAgICBpbnQzMl90IGVuZDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID49
IDIpIHsKKyAgICAgICAgZW5kID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5kID0gdGhp
c09iamVjdC0+aW1wbCgpLT5ieXRlTGVuZ3RoKCk7CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBuZXdCdWZmZXIgPSB0aGlzT2JqZWN0LT5pbXBsKCktPnNsaWNlKGJlZ2luLCBlbmQpOwor
ICAgIGlmICghbmV3QnVmZmVyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoY2FsbGVlLT5nbG9iYWxPYmplY3QoKSkpOworICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5
QnVmZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBuZXdCdWZmZXIpOworICAgIAor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworY29uc3QgQ2xhc3NJbmZv
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlC
dWZmZXJQcm90b3R5cGUpCit9OworCitKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIAorICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
c2xpY2UsIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UsIERvbnRFbnVtLCAyKTsKK30KKworSlNB
cnJheUJ1ZmZlclByb3RvdHlwZSogSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FycmF5QnVmZmVyUHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNBcnJheUJ1
ZmZlclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0
aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKworU3Ry
dWN0dXJlKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVf
aAorI2RlZmluZSBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FycmF5QnVmZmVyUHJvdG90eXBlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZShW
TSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU0FycmF5QnVmZmVyUHJvdG90
eXBlKiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJQcm90b3R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUmVq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBcnJheUJ1ZmZl
clZpZXc6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXJWaWV3IiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyVmlldykKK307CisKK0pTQXJy
YXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250ZXh0KAor
ICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGxlbmd0aCwgdWludDMy
X3QgZWxlbWVudFNpemUsCisgICAgSW5pdGlhbGl6YXRpb25Nb2RlIG1vZGUpCisgICAgOiBtX3N0
cnVjdHVyZSgwKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9idXR0ZXJmbHkoMCkK
K3sKKyAgICBpZiAobGVuZ3RoIDw9IGZhc3RTaXplTGltaXQpIHsKKyAgICAgICAgLy8gQXR0ZW1w
dCBHQyBhbGxvY2F0aW9uLgorICAgICAgICB2b2lkKiB0ZW1wOworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHNpemVPZihsZW5ndGgsIGVsZW1lbnRTaXplKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZSgwLCBzaXplLCAmdGVtcCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIG1fdmVjdG9yID0gdGVt
cDsKKyAgICAgICAgbV9tb2RlID0gRmFzdFR5cGVkQXJyYXk7CisKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICAgICAgdWludDY0
X3QqIGFzV29yZHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KG1fdmVjdG9yKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUgLyBzaXplb2YodWludDY0X3QpOyBpLS07KQorICAg
ICAgICAgICAgICAgIGFzV29yZHNbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYgLy8gVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBE
b24ndCBhbGxvdyBhIHR5cGVkIGFycmF5IHRvIHVzZSBtb3JlIHRoYW4gMkdCLgorICAgIGlmIChs
ZW5ndGggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkgLyBlbGVtZW50U2l6ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtb2RlID09IFplcm9GaWxsKSB7CisgICAgICAg
IGlmICghdHJ5RmFzdENhbGxvYyhsZW5ndGgsIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3Rv
cikpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF0cnlG
YXN0TWFsbG9jKGxlbmd0aCAqIGVsZW1lbnRTaXplKS5nZXRWYWx1ZShtX3ZlY3RvcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1v
cnlDb3N0KHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKSAqIGVsZW1lbnRTaXplKTsKKyAgICAK
KyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBtX21vZGUgPSBPdmVyc2l6ZVR5cGVk
QXJyYXk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25z
dHJ1Y3Rpb25Db250ZXh0KAorICAgIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAsIG1f
dmVjdG9yKHN0YXRpY19jYXN0PHVpbnQ4X3QqPihhcnJheUJ1ZmZlci0+ZGF0YSgpKSArIGJ5dGVP
ZmZzZXQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX21vZGUoV2FzdGVmdWxUeXBl
ZEFycmF5KQoreworICAgIEluZGV4aW5nSGVhZGVyIGluZGV4aW5nSGVhZGVyOworICAgIGluZGV4
aW5nSGVhZGVyLnNldEFycmF5QnVmZmVyKGFycmF5QnVmZmVyLmdldCgpKTsKKyAgICBtX2J1dHRl
cmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlKHZtLCAwLCAwLCAwLCB0cnVlLCBpbmRleGluZ0hlYWRl
ciwgMCk7Cit9CisKK0pTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyhWTSYgdm0s
IENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0LnN0
cnVjdHVyZSgpLCBjb250ZXh0LmJ1dHRlcmZseSgpKQorICAgICwgbV92ZWN0b3IoY29udGV4dC52
ZWN0b3IoKSkKKyAgICAsIG1fbGVuZ3RoKGNvbnRleHQubGVuZ3RoKCkpCisgICAgLCBtX21vZGUo
Y29udGV4dC5tb2RlKCkpCit7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgc3dp
dGNoIChtX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CisgICAgICAgIHZtLmhlYXAuYWRkRmluYWxp
emVyKHRoaXMsIGZpbmFsaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgV2FzdGVmdWxU
eXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZFJlZmVyZW5jZSh0aGlzLCBidXR0ZXJmbHko
KS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU0FycmF5
QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJy
YXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1i
ZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
dWZmZXIpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSgKKyAgICAgICAgICAgIGV4ZWMtPnZtKCku
bV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAgICBleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBK
U0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgIEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KSB7CisgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlT2Zm
c2V0KCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgICAg
IGV4ZWMtPnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci0+dG9KUygKKyAgICAgICAgICAgICAg
ICBleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgdGhpc09iamVjdC0+YnVmZmVyKCkp
LAorICAgICAgICAgICAgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlmIChwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0CisgICAgICAgIHx8IHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHJlamVj
dChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byByZWFk
LW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSgK
KyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3Vs
ZFRocm93KQoreworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCBzaG91bGRUaHJvdywgIkF0dGVtcHRpbmcgdG8gZGVmaW5lIHJlYWQtb25seSB0eXBlZCBh
cnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KAorICAgIEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQor
eworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKK30KKwordm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0FycmF5QnVmZmVy
VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7Cisg
ICAgCisgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0
IGxlYXN0IGluIEZpcmVmb3guCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykgeworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZz
ZXQpOworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
OworICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CisgICAg
fQorICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmZpbmFs
aXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4oY2VsbCk7CisgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkgfHwgdGhpc09iamVjdC0+bV9tb2Rl
ID09IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fbW9kZSA9PSBP
dmVyc2l6ZVR5cGVkQXJyYXkpCisgICAgICAgIGZhc3RGcmVlKHRoaXNPYmplY3QtPm1fdmVjdG9y
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmluZSBKU0FycmF5
QnVmZmVyVmlld19oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorLy8KKy8vIDEpIEl0IHByb3Zp
ZGVzIHRob3NlIHBhcnRzIG9mIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IHRoYXQgZG9uJ3QgZGVw
ZW5kCisvLyAgICBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgorLy8KKy8vIDIpIEl0IHJlcHJlc2Vu
dHMgdGhlIERPTS9XZWJDb3JlLXZpc2libGUgIkpTQXJyYXlCdWZmZXJWaWV3IiB0eXBlLCB3aGlj
aAorLy8gICAgQysrIGNvZGUgdXNlcyB3aGVuIGl0IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGEgdmll
dyBvZiBhbiBhcnJheSBidWZmZXIKKy8vICAgIHdpdGhvdXQgY29uY2VybiBmb3IgdGhlIGFjdHVh
bCB0eXBlIG9mIHRoZSB2aWV3LgorLy8KKy8vIFRoZXNlIHR3byByb2xlcyBhcmUgcXVpdGUgZGlm
ZmVyZW50LiAoMSkgaXMganVzdCBhIG1hdHRlciBvZiBvcHRpbWl6aW5nCisvLyBjb21waWxlIGFu
ZCBsaW5rIHRpbWVzIGJ5IGhhdmluZyBhcyBtdWNoIGNvZGUgYW5kIGRhdGEgYXMgcG9zc2libGUg
bm90CisvLyBiZSBzdWJqZWN0IHRvIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLiAoMikgaXMgKmFs
bW9zdCogYSBtYXR0ZXIgb2YKKy8vIHNlbWFudGljczsgaW5kZWVkIGF0IHRoZSB2ZXJ5IGxlYXN0
IGl0IGlzIGEgbWF0dGVyIG9mIG9iZXlpbmcgYSBjb250cmFjdAorLy8gdGhhdCB3ZSBoYXZlIHdp
dGggV2ViQ29yZSByaWdodCBub3cuCisvLworLy8gT25lIGNvbnZlbmllbnQgdGhpbmcgdGhhdCBz
YXZlcyB1cyBmcm9tIHRvbyBtdWNoIGNyYXp5IGlzIHRoYXQKKy8vIEFycmF5QnVmZmVyVmlldyBp
cyBub3QgaW5zdGFudGlhYmxlLgorCisvLyBUeXBlZCBhcnJheSB2aWV3cyBoYXZlIGRpZmZlcmVu
dCBtb2RlcyBkZXBlbmRpbmcgb24gaG93IGJpZyB0aGV5IGFyZSBhbmQKKy8vIHdoZXRoZXIgdGhl
IHVzZXIgaGFzIGRvbmUgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBhIHNlcGFyYXRlIGJhY2tpbmcK
Ky8vIGJ1ZmZlciBvciB0aGUgRE9NLXNwZWNpZmllZCBuZXV0ZXJpbmcgY2FwYWJpbGl0aWVzLgor
ZW51bSBUeXBlZEFycmF5TW9kZSB7CisgICAgLy8gU21hbGwgYW5kIGZhc3QgdHlwZWQgYXJyYXku
IEIgaXMgdW51c2VkLCBWIHBvaW50cyB0byBhIHZlY3RvcgorICAgIC8vIGFsbG9jYXRlZCBpbiBj
b3BpZWQgc3BhY2UsIGFuZCBNID0gRmFzdFR5cGVkQXJyYXkuIFYncyBsaXZlbmVzcyBpcworICAg
IC8vIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIHZpZXcncyBsaXZlbmVzcy4KKyAgICBGYXN0
VHlwZWRBcnJheSwKKyAgICAKKyAgICAvLyBBIGxhcmdlIHR5cGVkIGFycmF5IHRoYXQgc3RpbGwg
YXR0ZW1wdHMgbm90IHRvIHdhc3RlIHRvbyBtdWNoCisgICAgLy8gbWVtb3J5LiBCIGlzIGluaXRp
YWxpemVkIHRvIHBvaW50IHRvIGEgc2xvdCB0aGF0IGNvdWxkIGhvbGQgYQorICAgIC8vIGJ1ZmZl
ciBwb2ludGVyLCBWIHBvaW50cyB0byBhIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcgZmFzdENhbGxv
YygpLAorICAgIC8vIGFuZCBNID0gT3ZlcnNpemVUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMg
ZGV0ZXJtaW5lZCBlbnRpcmVseSBieQorICAgIC8vIHRoZSB2aWV3J3MgbGl2ZW5lc3MsIGFuZCB0
aGUgdmlldyB3aWxsIGFkZCBhIGZpbmFsaXplciB0byBkZWxldGUgVi4KKyAgICBPdmVyc2l6ZVR5
cGVkQXJyYXksCisgICAgCisgICAgLy8gQSB0eXBlZCBhcnJheSB0aGF0IHdhcyB1c2VkIGluIHNv
bWUgY3Jhenkgd2F5LiBCJ3MgSW5kZXhpbmdIZWFkZXIKKyAgICAvLyBpcyBoaWphY2tlZCB0byBj
b250YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgYXJyYXkgYnVmZmVyLiBUaGUKKyAgICAv
LyBuYXRpdmUgdHlwZWQgYXJyYXkgdmlldyBwb2ludHMgYmFjayB0byB0aGUgSlMgdmlldy4gViBw
b2ludHMgdG8gYQorICAgIC8vIHZlY3RvciBhbGxvY2F0ZWQgdXNpbmcgd2hvLWtub3dzLXdoYXQs
IGFuZCBNID0gV2FzdGVmdWxUeXBlZEFycmF5LgorICAgIC8vIFRoZSB2aWV3IGRvZXMgbm90IG93
biB0aGUgdmVjdG9yLgorICAgIFdhc3RlZnVsVHlwZWRBcnJheSwKK307CisKKy8vIFdoZW4gV2Vi
Q29yZSB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcsIGl0IGV4cGVjdHMgdG8gYmUgYWJsZSB0byBn
ZXQgdGhlIG5hdGl2ZQorLy8gQXJyYXlCdWZmZXIgYW5kIGxpdHRsZSBlbHNlLiBUaGlzIHJlcXVp
cmVzIHNsb3dpbmcgZG93biBhbmQgd2FzdGluZyBtZW1vcnksCisvLyBhbmQgdGhlbiBhY2Nlc3Np
bmcgdGhpbmdzIHZpYSB0aGUgQnV0dGVyZmx5LiBXaGVuIEpTIHVzZXMgYSBKU0FycmF5QnVmZmVy
VmlldworLy8gaXQgaXMgYWx3YXlzIHZpYSB0aGUgdXN1YWwgbWV0aG9kcyBpbiB0aGUgTWV0aG9k
VGFibGUsIHNvIHRoaXMgY2xhc3MncworLy8gaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgaGFzIG5v
IG5lZWQgdG8gZXZlbiBleGlzdCAtIHdlIGNvdWxkIGF0IGFueSB0aW1lIHNpbmsKKy8vIGNvZGUg
aW50byBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyBpZiBpdCB3YXMgY29udmVuaWVudC4KKworY2xh
c3MgSlNBcnJheUJ1ZmZlclZpZXcgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGZhc3RTaXplTGltaXQgPSAxMDAwOworICAgIAorICAgIHN0YXRpYyBzaXpl
X3Qgc2l6ZU9mKHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgZWxlbWVudFNpemUpCisgICAgewor
ICAgICAgICByZXR1cm4gKGxlbmd0aCAqIGVsZW1lbnRTaXplICsgc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAtIDEpCisgICAgICAgICAgICAmIH4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAtIDEpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIGNsYXNzIENvbnN0cnVjdGlvbkNvbnRleHQgeworICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0KTsKKyAgICAgICAg
CisgICAgcHVibGljOgorICAgICAgICBlbnVtIEluaXRpYWxpemF0aW9uTW9kZSB7IFplcm9GaWxs
LCBEb250SW5pdGlhbGl6ZSB9OworICAgICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29uc3RydWN0aW9uQ29udGV4dChWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0aCwgdWlu
dDMyX3QgZWxlbWVudFNpemUsIEluaXRpYWxpemF0aW9uTW9kZSA9IFplcm9GaWxsKTsKKyAgICAg
ICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0cnVjdGlvbkNvbnRleHQoCisgICAg
ICAgICAgICBWTSYsIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LAorICAgICAg
ICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisg
ICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fc3RydWN0dXJlOyB9Cisg
ICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlOyB9CisgICAgICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yOyB9CisgICAgICAgIHVpbnQzMl90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9CisgICAgICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGU7
IH0KKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkoKSBjb25zdCB7IHJldHVybiBtX2J1dHRl
cmZseTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fc3Ry
dWN0dXJlOworICAgICAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICAgICAgdWludDMyX3QgbV9sZW5n
dGg7CisgICAgICAgIFR5cGVkQXJyYXlNb2RlIG1fbW9kZTsKKyAgICAgICAgQnV0dGVyZmx5KiBt
X2J1dHRlcmZseTsKKyAgICB9OworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQXJyYXlC
dWZmZXJWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Cisg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVy
dHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorcHVibGljOgorICAgIC8vIEFs
bG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyLiBBbHNvIG1vdmVzIHRoZSBkYXRhIGlu
dG8gdGhlIEMgaGVhcAorICAgIC8vIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lkIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIAorICAgIFR5cGVkQXJyYXlNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICBBcnJheUJ1ZmZlciogYnVmZmVyKCk7Cisg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGltcGwoKTsKKyAgICB2b2lkIG5ldXRlcigp
OworICAgIAorICAgIHZvaWQqIHZlY3RvcigpIHsgcmV0dXJuIG1fdmVjdG9yOyB9CisgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworICAgIAorICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZWZWN0b3IoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheUJ1ZmZlclZpZXcsIG1fdmVjdG9yKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZlclZpZXcsIG1f
bGVuZ3RoKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX21vZGUpOyB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIHZvaWQgZmluYWxpemUoSlNDZWxsKik7CisKK3Byb3RlY3RlZDoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKKyAgICB2b2lkKiBtX3ZlY3RvcjsKKyAgICB1aW50MzJfdCBtX2xlbmd0aDsKKyAgICBU
eXBlZEFycmF5TW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTQXJyYXlCdWZmZXJWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lc19oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fbW9kZSAhPSBXYXN0ZWZ1bFR5
cGVkQXJyYXkpCisgICAgICAgIG1ldGhvZFRhYmxlKCktPnNsb3dEb3duQW5kV2FzdGVNZW1vcnko
dGhpcyk7Cit9CisKK2lubGluZSBBcnJheUJ1ZmZlciogSlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZl
cigpCit7CisgICAgc2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KCk7CisgICAgcmV0
dXJuIGJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5hcnJheUJ1ZmZlcigpOworfQorCitp
bmxpbmUgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQXJyYXlCdWZmZXJWaWV3OjppbXBs
KCkKK3sKKyAgICByZXR1cm4gbWV0aG9kVGFibGUoKS0+Z2V0VHlwZWRBcnJheUltcGwodGhpcyk7
Cit9CisKK2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKQoreworICAgIEFT
U0VSVChtX21vZGUgPT0gV2FzdGVmdWxUeXBlZEFycmF5KTsKKyAgICBtX2xlbmd0aCA9IDA7Cisg
ICAgbV92ZWN0b3IgPSAwOworfQorCitpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6
OmJ5dGVPZmZzZXQoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KSB7
CisgICAgICAgIEFTU0VSVChtX21vZGUgPT0gRmFzdFR5cGVkQXJyYXkgfHwgbV9tb2RlID09IE92
ZXJzaXplVHlwZWRBcnJheSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBw
dHJkaWZmX3QgZGVsdGEgPQorICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV92ZWN0b3Ip
IC0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlcigpLT5kYXRhKCkpOworICAgIAorICAgIHVu
c2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWx0YSk7CisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ocmVzdWx0KSA9PSBkZWx0YSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyVmll
dy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjMsNCArMjI0LDE1IEBAIGJvb2wgSlNDZWxsOjpnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSlND
ZWxsOjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KikKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gSlNDZWxsOjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyopCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJIZWFwLmgi
CiAjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRl
ICJUeXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAj
aW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIENvcHlWaXNpdG9yOwogY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJh
eUJ1ZmZlclZpZXc7CiBjbGFzcyBKU0Rlc3RydWN0aWJsZU9iamVjdDsKIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtMTQ5LDcgKzE1MCw3IEBA
IHB1YmxpYzoKICAgICBTdHJ1Y3R1cmUqIHVudmFsaWRhdGVkU3RydWN0dXJlKCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmUudW52YWxpZGF0ZWRHZXQoKTsgfQogI2VuZGlmCiAgICAgICAgIAotICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBUeXBlZEFy
cmF5Tm9uZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3Jh
Z2VUeXBlID0gTm90VHlwZWRBcnJheTsKIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKQEAgLTE2Nyw2ICsxNjgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUlt
cGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVy
Vmlldy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SlNEYXRhVmlldzo6c19pbmZvID0geworICAgICJEYXRhVmlldyIsICZCYXNlOjpzX2luZm8sIDAs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEYXRhVmlldyl9OworCitKU0RhdGFWaWV3OjpKU0Rh
dGFWaWV3KFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4dCkKKyAgICA6IEJhc2Uo
dm0sIGNvbnRleHQpCit7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZSgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBwYXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
Ynl0ZUxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1
ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2U8dWludDhfdD4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSkgeworICAgICAgICB0aHJvd1ZNRXJyb3Io
CisgICAgICAgICAgICBleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBh
bmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIENvbnN0cnVjdGlvbkNvbnRleHQg
Y29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOwor
ICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBKU0RhdGFWaWV3KiByZXN1bHQgPQorICAgICAgICBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3Pih2bS5oZWFwKSkgSlNEYXRhVmll
dyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworSlNEYXRhVmlldyogSlNEYXRhVmlldzo6Y3JlYXRlVW5pbml0aWFs
aXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJM
RV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNEYXRhVmlldyogSlNEYXRh
Vmlldzo6Y3JlYXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkKQoreworICAgIFVO
UkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworICAgIHJldHVybiAwOworfQorCitib29sIEpTRGF0
YVZpZXc6OnNldChFeGVjU3RhdGUqLCBKU09iamVjdCosIHVuc2lnbmVkLCB1bnNpZ25lZCkKK3sK
KyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K1Bhc3NSZWZQdHI8RGF0YVZpZXc+IEpTRGF0YVZpZXc6OnR5cGVkSW1wbCgpCit7CisgICAgcmV0
dXJuIERhdGFWaWV3OjpjcmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOwor
fQorCitib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0RhdGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0
aGlzT2JqZWN0LT5tX2xlbmd0aCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTRGF0YVZpZXc6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9i
amVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhp
c09iamVjdC0+bV9sZW5ndGgpLCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwor
dm9pZCBKU0RhdGFWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3
KikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKworUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IEpTRGF0YVZpZXc6OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZm
ZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dHlwZWRJbXBsKCk7
Cit9CisKK1N0cnVjdHVyZSogSlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7Cisg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLAor
ICAgICAgICBOb25BcnJheSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNEYXRhVmlld19oCisjZGVmaW5lIEpTRGF0YVZpZXdfaAorCisjaW5j
bHVkZSAiRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNEYXRhVmlldyA6IHB1YmxpYyBKU0FycmF5QnVmZmVyVmll
dyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNlOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IDE7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgSlNEYXRhVmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNEYXRhVmlldyogY3JlYXRlKAorICAgICAgICBFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAg
ICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CisgICAgCisgICAgLy8gRHVtbXkgbWV0aG9kcywg
d2hpY2ggZG9uJ3QgYWN0dWFsbHkgd29yazsgdGhlc2UgYXJlIGp1c3QgaW4gcGxhY2UgdG8KKyAg
ICAvLyBwbGFjYXRlIHNvbWUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gd2UgZG8gZWxzZXdoZXJl
LgorICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTRGF0YVZpZXcqIGNy
ZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIGJvb2wg
c2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8RGF0YVZpZXc+IHR5cGVkSW1wbCgpOworICAgIAor
ICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBU
eXBlRGF0YVZpZXc7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisKKyAgICBzdGF0
aWMgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBnZXRUeXBlZEFycmF5SW1wbChKU0Fy
cmF5QnVmZmVyVmlldyopOworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwor
ICAgIAorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTRGF0YVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNE
YXRhVmlld1Byb3RvdHlwZS5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0Rh
dGFWaWV3LmgiCisjaW5jbHVkZSAiTG9va3VwLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgIlR5cGVkQXJyYXlBZGFwdG9ycy5oIgorI2luY2x1ZGUgPHd0Zi9GbGlwQnl0ZXMu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RhdGFWaWV3UHJvdG90
eXBlOjpzX2luZm8gPSB7CisgICAgIkRhdGFWaWV3UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywg
MCwgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNE
YXRhVmlld1Byb3RvdHlwZSkKK307CisKKy8qIFNvdXJjZSBmb3IgSlNEYXRhVmlld1Byb3RvdHlw
ZS5sdXQuaAorQGJlZ2luIGRhdGFWaWV3VGFibGUKKyAgZ2V0SW50OCAgICAgICAgICAgICAgIGRh
dGFWaWV3UHJvdG9GdW5jR2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCisgIGdldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4ICAg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQxNiAgICAgICAgICAg
ICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKKyAgZ2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEludDMyICAgICAg
ICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICBnZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNH
ZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0RmxvYXQz
MiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMiAgICAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3Rv
RnVuY0dldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJ
bnQ4ICAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4ICAgICAgICAgICAgIERv
bnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDggICAgICAgICAgICAgIGRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDggICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
IHNldEludDE2ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDE2ICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MTYgICAgICAgICAgICAgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAg
IDAKKyAgc2V0SW50MzIgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIgICAg
ICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldFVpbnQzMiAgICAgICAgICAg
ICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMiAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
ICAgICAgMAorICBzZXRGbG9hdDMyICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDMyICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQ2NCAgICAg
ICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQ2NCAgICAgICAgICBEb250RW51bXxGdW5j
dGlvbiAgICAgICAwCitAZW5kCisqLworCitKU0RhdGFWaWV3UHJvdG90eXBlOjpKU0RhdGFWaWV3
UHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCit7Cit9CisKK0pTRGF0YVZpZXdQcm90b3R5cGUqIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTRGF0YVZp
ZXdQcm90b3R5cGUqIHByb3RvdHlwZSA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTRGF0YVZpZXdQcm90b3R5cGU+KHZtLmhlYXApKQorICAgICAgICBKU0RhdGFWaWV3UHJv
dG90eXBlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZS0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNEYXRhVmlld1Byb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oCisgICAgICAg
IGV4ZWMsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZShleGVjKSwganNDYXN0PEpTRGF0YVZpZXdQ
cm90b3R5cGUqPihvYmplY3QpLAorICAgICAgICBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCiti
b29sIEpTRGF0YVZpZXdQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVj
U3RhdGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4o
b2JqZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK0VuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTRGF0YVZpZXcqIGRhdGFWaWV3ID0ganNEeW5hbWljQ2FzdDxKU0RhdGFW
aWV3Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghZGF0YVZpZXcpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBv
ZiBEYXRhVmlldyBtZXRob2QgbXVzdCBiZSBhIERhdGFWaWV3LiIpKTsKKyAgICAKKyAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0aGUg
Ynl0ZU9mZnNldCkuIikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5h
cmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisg
ICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAx
ICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3
LT5sZW5ndGgoKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiBieXRlTGVuZ3RoIHx8IGJ5dGVPZmZz
ZXQgPiBieXRlTGVuZ3RoIC0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBv
ZiBib3VuZHMgYWNjZXNzIikpOworICAgIAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFs
dWUgPSAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KTsKKyAgICAKKyAg
ICBpZiAobmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4obGl0dGxlRW5kaWFuKSkKKyAgICAg
ICAgdmFsdWUgPSBmbGlwQnl0ZXModmFsdWUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoQWRhcHRvcjo6dG9KU1ZhbHVlKHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcg
bWV0aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZz
ZXQgYW5kIHZhbHVlKS4iKSk7CisgICAgCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAK
KyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gQWRhcHRvcjo6dG9OYXRpdmUoZXhl
YywgZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICBi
b29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYg
ZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDMpIHsKKyAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhl
Yy0+YXJndW1lbnQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoID0gZGF0YVZpZXctPmxl
bmd0aCgpOworICAgIGlmIChlbGVtZW50U2l6ZSA+IGJ5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCA+
IGJ5dGVMZW5ndGggLSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiT3V0IG9mIGJv
dW5kcyBhY2Nlc3MiKSk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5k
aWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZhbHVlKTsKKyAg
ICAKKyAgICAqcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4oc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGRhdGFWaWV3LT52ZWN0b3IoKSkgKyBieXRlT2Zmc2V0KSA9IHZhbHVl
OworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50OEFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY0dldEludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0
YTxJbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZ2V0RGF0YTxJbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxVaW50OEFkYXB0b3I+KGV4ZWMpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDE2QWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jR2V0VWludDMyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0RGF0YTxVaW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDMyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZ2V0RGF0YTxGbG9hdDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jR2V0Rmxv
YXQ2NChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8RmxvYXQ2NEFkYXB0
b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRh
Vmlld1Byb3RvRnVuY1NldEludDgoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXRE
YXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIHNldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMihFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDhBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBz
ZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIHNldERhdGE8VWludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQz
MihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIHNldERhdGE8RmxvYXQzMkFkYXB0b3I+
KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmll
d1Byb3RvRnVuY1NldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXRE
YXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNp
bmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNEYXRhVmlld1Byb3RvdHlwZV9oCisj
ZGVmaW5lIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTRGF0YVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNO
b25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJl
Kik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNEYXRhVmlld1Byb3RvdHlwZSogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgICAgIEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
KyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNEYXRhVmlld1Byb3RvdHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0MzJBcnJheV9oCisjZGVmaW5l
IEpTRmxvYXQzMkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGbG9hdDY0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Zsb2F0NjRBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTRmxvYXQ2NEFycmF5X2gKKyNkZWZpbmUgSlNGbG9hdDY0QXJyYXlfaAorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNGbG9hdDY0QXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdfaAorCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0SW50OEFycmF5Q2xh
c3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDE2QXJy
YXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0SW50
MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBn
ZXRVaW50OEFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0lu
Zm8qIGdldFVpbnQ4Q2xhbXBlZEFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJVkFURSBj
b25zdCBDbGFzc0luZm8qIGdldFVpbnQxNkFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBPUlRfUFJJ
VkFURSBjb25zdCBDbGFzc0luZm8qIGdldFVpbnQzMkFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBP
UlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEZsb2F0MzJBcnJheUNsYXNzSW5mbygpOwor
SlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRGbG9hdDY0QXJyYXlDbGFzc0lu
Zm8oKTsKKworLy8gQSB0eXBlZCBhcnJheSB2aWV3IGlzIG91ciByZXByZXNlbnRhdGlvbiBvZiBh
IHR5cGVkIGFycmF5IG9iamVjdCBhcyBzZWVuCisvLyBmcm9tIEphdmFTY3JpcHQuIEZvciBleGFt
cGxlOgorLy8KKy8vIHZhciBvID0gbmV3IEludDhBcnJheSgxMDApOworLy8KKy8vIEhlcmUsICdv
JyBwb2ludHMgdG8gYSBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxpbnQ4X3Q+LgorLy8KKy8vIFZp
ZXdzIGNvbnRhaW4gZml2ZSBmaWVsZHM6CisvLworLy8gICAgIFN0cnVjdHVyZSogUyAgICAgLy8g
ZnJvbSBKU0NlbGwKKy8vICAgICBCdXR0ZXJmbHkqIEIgICAgIC8vIGZyb20gSlNPYmplY3QKKy8v
ICAgICBFbGVtZW50VHlwZSogVgorLy8gICAgIHVpbnQzMl90IEwKKy8vICAgICBUeXBlZEFycmF5
TW9kZSBNCisvLworLy8gVGhlc2UgZmllbGRzIHRha2UgdXAgYSB0b3RhbCBvZiBmb3VyIHBvaW50
ZXItd2lkdGggd29yZHMuIEZJWE1FOiBNYWtlCisvLyBpdCB0YWtlIGxlc3Mgd29yZHMhCisvLwor
Ly8gQiBpcyB1c3VhbGx5IHVudXNlZCBidXQgbWF5IHN0b3JlZCBzb21lIGFkZGl0aW9uYWwgIm92
ZXJmbG93IiBkYXRhIGZvcgorLy8gb25lIG9mIHRoZSBtb2Rlcy4gViBhbHdheXMgcG9pbnRzIHRv
IHRoZSBiYXNlIG9mIHRoZSB0eXBlZCBhcnJheSdzIGRhdGEsCisvLyBhbmQgbWF5IHBvaW50IHRv
IGVpdGhlciBHQy1tYW5hZ2VkIGNvcGllZCBzcGFjZSwgb3IgZGF0YSBpbiB0aGUgQyBoZWFwOwor
Ly8gd2hpY2ggb2YgdGhvc2UgdGhpbmdzIGl0IHBvaW50cyB0byBpcyBnb3Zlcm5lZCBieSB0aGUg
bW9kZSBhbHRob3VnaCBmb3IKKy8vIHNpbXBsZSBhY2Nlc3NlcyB0byB0aGUgdmlldyB5b3UgY2Fu
IGp1c3QgcmVhZCBmcm9tIHRoZSBwb2ludGVyIGVpdGhlcgorLy8gd2F5LiBNIHNwZWNpZmllcyB0
aGUgbW9kZSBvZiB0aGUgdmlldy4gTCBpcyB0aGUgbGVuZ3RoLCBpbiB1bml0cyB0aGF0CisvLyBk
ZXBlbmQgb24gdGhlIHZpZXcncyB0eXBlLgorCisvLyBUaGUgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcgaXMgdGVtcGxhdGl6ZWQgYnkgYW4gQWRhcHRvciB0aGF0IGNvbnRyb2xzCisvLyB0aGUgZWxl
bWVudCB0eXBlIGFuZCBob3cgaXQncyBjb252ZXJ0ZWQ7IGl0IHNob3VsZCBvYmV5IHRoZSBmb2xs
b3dpbmcKKy8vIGludGVyZmFjZTsgSSB1c2UgaW50OF90IGFzIGFuIGV4YW1wbGU6CisvLworLy8g
c3RydWN0IEFkYXB0b3IgeworLy8gICAgIHR5cGVkZWYgaW50OF90IFR5cGU7CisvLyAgICAgdHlw
ZWRlZiBJbnQ4QXJyYXkgVmlld1R5cGU7CisvLyAgICAgdHlwZWRlZiBKU0ludDhBcnJheSBKU1Zp
ZXdUeXBlOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9OYXRpdmUoZG91YmxlKTsKKy8vICAgICBz
dGF0aWMgaW50OF90IHRvTmF0aXZlKEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBpbnQ4X3QgdG9O
YXRpdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisvLyAgICAgc3RhdGljIEpTVmFsdWUgdG9KU1Zh
bHVlKGludDhfdCk7CisvLyAgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShpbnQ4X3QpOworLy8g
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2NsYXNzIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3IDogcHVibGljIEpTQXJyYXlCdWZmZXJWaWV3IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEpTQXJyYXlCdWZmZXJWaWV3IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVsZW1l
bnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOworICAgIAorcHJvdGVjdGVk
OgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFZNJiwgQ29uc3RydWN0aW9uQ29udGV4dCYp
OworICAgIAorcHVibGljOgorICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGlj
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGVVbmluaXRpYWxpemVkKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgc3Rh
dGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQYXNz
UmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICBzdGF0aWMgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCos
IFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpOworICAgIAorICAg
IHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aCAqIHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsgfQorICAgIHNpemVfdCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVPZihtX2xlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsg
fQorICAgIAorICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IpOworICAgIH0KKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKiB0eXBlZFZlY3RvcigpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yKTsKKyAgICB9CisKKyAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBtZWFudCB0byBtYXRjaCBpbmRleGVkIGFjY2VzcyBtZXRob2RzIHRoYXQgSlNP
YmplY3QKKyAgICAvLyBzdXBwb3J0cyAtIGhlbmNlIHRoZSBzbGlnaHQgcmVkdW5kYW5jeS4KKyAg
ICBib29sIGNhbkdldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGkgPCBtX2xlbmd0aDsKKyAgICB9CisgICAgYm9vbCBjYW5TZXRJbmRleFF1aWNrbHkodW5z
aWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAgfQorICAg
IAorICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1
ZSh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAg
ICAgIHJldHVybiB0eXBlZFZlY3RvcigpW2ldOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgZ2V0
SW5kZXhRdWlja2x5QXNEb3VibGUodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBB
ZGFwdG9yOjp0b0RvdWJsZShnZXRJbmRleFF1aWNrbHlBc05hdGl2ZVZhbHVlKGkpKTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGFwdG9yOjp0b0pTVmFsdWUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVW
YWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVW
YWx1ZSh1bnNpZ25lZCBpLCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGkgPCBtX2xlbmd0aCk7CisgICAgICAgIHR5cGVkVmVjdG9yKClbaV0gPSB2
YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSh1bnNp
Z25lZCBpLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05h
dGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZlKHZhbHVlKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIEFkYXB0b3I6OnRvTmF0aXZl
KHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SW5kZXhRdWlja2x5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgdHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGpzVmFs
dWUpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUoaSwgdmFsdWUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5BY2Nlc3NS
YW5nZVF1aWNrbHkodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAg
ICAgICByZXR1cm4gb2Zmc2V0IDw9IG1fbGVuZ3RoCisgICAgICAgICAgICAmJiBvZmZzZXQgKyBs
ZW5ndGggPD0gbV9sZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAgICAg
ICAgICAmJiBvZmZzZXQgKyBsZW5ndGggPj0gb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICAvLyBM
aWtlIGNhblNldFF1aWNrbHksIGV4Y2VwdDogaWYgaXQgcmV0dXJucyBmYWxzZSwgaXQgd2lsbCB0
aHJvdyB0aGUKKyAgICAvLyBhcHByb3ByaWF0ZSBleGNlcHRpb24uCisgICAgYm9vbCB2YWxpZGF0
ZVJhbmdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9y
OyBpdCB3aWxsIHRocm93IG9uIGVycm9yLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlw
ZT4KKyAgICBib29sIHNldFdpdGhTcGVjaWZpY1R5cGUoRXhlY1N0YXRlKiwgT3RoZXJUeXBlKiwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIAorICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNzZnVsLCBhbmQgZmFsc2Ugb24gZXJyb3I7IGlmIGl0IHJldHVybnMgZmFs
c2UKKyAgICAvLyB0aGVuIGl0IHdpbGwgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uLgorICAgIGJv
b2wgc2V0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+
IHR5cGVkSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6Vmlld1R5cGU6OmNy
ZWF0ZShidWZmZXIoKSwgYnl0ZU9mZnNldCgpLCBsZW5ndGgoKSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIE5vbkFycmF5KTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87IC8vIFRoaXMgaXMgbmV2ZXIg
YWNjZXNzZWQgZGlyZWN0bHksIHNpbmNlIHRoYXQgd291bGQgYnJlYWsgbGlua2FnZSBvbiBzb21l
IGNvbXBpbGVycy4KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvKiBpbmZvKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIGNhc2Ug
VHlwZUludDg6CisgICAgICAgICAgICByZXR1cm4gZ2V0SW50OEFycmF5Q2xhc3NJbmZvKCk7Cisg
ICAgICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldEludDE2QXJyYXlD
bGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICByZXR1cm4g
Z2V0SW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAg
ICAgICAgIHJldHVybiBnZXRVaW50OEFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlw
ZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgICAgIHJldHVybiBnZXRVaW50OENsYW1wZWRBcnJheUNs
YXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgICAgICByZXR1cm4g
Z2V0VWludDE2QXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAg
ICAgICAgICAgcmV0dXJuIGdldFVpbnQzMkFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2Ug
VHlwZUZsb2F0MzI6CisgICAgICAgICAgICByZXR1cm4gZ2V0RmxvYXQzMkFycmF5Q2xhc3NJbmZv
KCk7CisgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICByZXR1cm4gZ2V0Rmxv
YXQ2NEFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJy
YXlTdG9yYWdlVHlwZSA9IEFkYXB0b3I6OnR5cGVWYWx1ZTsKKyAgICAKK3Byb3RlY3RlZDoKKyAg
ICBmcmllbmQgc3RydWN0IFR5cGVkQXJyYXlDbGFzc0luZm9zOworICAgIAorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlT
bG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7
CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOworCisgICAgLy8gQWxsb2NhdGVzIHRoZSBmdWxsLW9uIG5hdGl2ZSBidWZmZXIgYW5kIG1v
dmVzIGRhdGEgaW50byB0aGUgQyBoZWFwIGlmCisgICAgLy8gbmVjZXNzYXJ5LiBOb3RlIHRoYXQg
dGhpcyBuZXZlciBhbGxvY2F0ZXMgaW4gdGhlIEdDIGhlYXAuCisgICAgc3RhdGljIHZvaWQgc2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZp
ZXcqKTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitpbmxpbmUgUGFzc1JlZlB0
cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gdG9OYXRpdmVUeXBlZFZpZXcoSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKiB3cmFwcGVyID0ganNE
eW5hbWljQ2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpKU1ZpZXdUeXBlKj4odmFsdWUpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBwZXItPnR5cGVk
SW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK2Ns
YXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CisK
K3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
T2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvciogY3JlYXRlKAorICAgICAg
ICBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1
ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAgc3RhdGljIENhbGxU
eXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKyNkZWZp
bmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXNfaAorCisjaW5jbHVk
ZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQor
eworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sIG5hbWUpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDMpLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPkJZVEVTX1BFUl9FTEVNRU5ULCBqc051bWJlcihWaWV3Q2xhc3M6OmVsZW1l
bnRTaXplKSwgRG9udEVudW0gfCBSZWFkT25seSB8IERvbnREZWxldGUpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZpZXdDbGFz
cz46OmNyZWF0ZSgKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I+KHZtLmhlYXApKQor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBwcm90b3R5cGUsIG5h
bWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xh
c3M+OjpjcmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUoCisgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcnJheVZpZXcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0KKyAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAgICAgICBWaWV3Q2xh
c3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpIHsKKyAgICAgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBl
ID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJEYXRhVmlldyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhdCBs
ZWFzdCBvbmUgYXJndW1lbnQuIikpOworICAgICAgICAKKyAgICAgICAgLy8gRXZlbiB0aG91Z2gg
dGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzYXkgc28sIGl0J3MgY29ycmVjdCB0byBzYXkKKyAg
ICAgICAgLy8gIm5ldyBJbnQ4QXJyYXkoKSIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYWxsb2NhdGlu
ZyBhbiBhcnJheSBvZiB6ZXJvCisgICAgICAgIC8vIGxlbmd0aC4KKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIDApKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGpzQnVmZmVyID0ganNEeW5hbWljQ2Fz
dDxKU0FycmF5QnVmZmVyKj4oZXhlYy0+YXJndW1lbnQoMCkpKSB7CisgICAgICAgIFJlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyID0ganNCdWZmZXItPmltcGwoKTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIG9mZnNldCA9IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSA/IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvVUludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDIpIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0g
b2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBs
ZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1l
bnQgc2l6ZS4iKSk7CisgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkg
LSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwg
YnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBpZiAoVmlld0NsYXNz
OjpUeXBlZEFycmF5U3RvcmFnZVR5cGUgPT0gVHlwZURhdGFWaWV3KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgQXJyYXlC
dWZmZXIgZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4iKSk7CisgICAgCisgICAgLy8gRm9yIGV2ZXJ5
dGhpbmcgYnV0IERhdGFWaWV3LCB3ZSBhbGxvdyBjb25zdHJ1Y3Rpb24gd2l0aCBhbnkgb2Y6Cisg
ICAgLy8gLSBBbm90aGVyIGFycmF5LiBUaGlzIGNyZWF0ZXMgYSBjb3B5IG9mIHRoZSBvZiB0aGF0
IGFycmF5LgorICAgIC8vIC0gQW4gaW50ZWdlci4gVGhpcyBjcmVhdGVzIGEgbmV3IHR5cGVkIGFy
cmF5IG9mIHRoYXQgbGVuZ3RoIGFuZCB6ZXJvLWluaXRpYWxpemVzIGl0LgorICAgIAorICAgIGlm
IChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KGV4ZWMtPmFyZ3Vt
ZW50KDApKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPQorICAgICAgICAgICAgb2JqZWN0
LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAKKyAgICAgICAgVmll
d0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3Ry
dWN0dXJlLCBsZW5ndGgpOworICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgQVNT
RVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
cmVzdWx0LT5zZXQoZXhlYywgb2JqZWN0LCAwLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgaW50IGxlbmd0aDsK
KyAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNJbnQzMigpKQorICAgICAgICBsZW5ndGggPSBl
eGVjLT5hcmd1bWVudCgwKS5hc0ludDMyKCk7CisgICAgZWxzZSBpZiAoIWV4ZWMtPmFyZ3VtZW50
KDApLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudC4iKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnQo
MCkuYXNOdW1iZXIoKSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gZXhlYy0+YXJndW1lbnQoMCku
YXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudCAoZnJhY3Rpb25h
bCBsZW5ndGhzIG5vdCBhbGxvd2VkKS4iKSk7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA8IDAp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVj
LCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitDb25zdHJ1Y3RUeXBlIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Z2V0Q29uc3RydWN0RGF0YShKU0Nl
bGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFz
cz47CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CitDYWxsVHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sK
KyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJh
eVZpZXc8Vmlld0NsYXNzPjsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3JJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgIkRlZmVyR0MuaCIK
KyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorI2lu
Y2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3KAorICAgIFZNJiB2bSwgQ29uc3RydWN0aW9uQ29udGV4dCYgY29udGV4
dCkKKyAgICA6IEJhc2Uodm0sIGNvbnRleHQpCit7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQ29uc3RydWN0aW9uQ29udGV4
dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSkpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
IHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoCisgICAgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIENv
bnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCgKKyAgICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJl
LCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKKyAgICAgICAgQ29uc3Ry
dWN0aW9uQ29udGV4dDo6RG9udEluaXRpYWxpemUpOworICAgIGlmICghY29udGV4dCkgeworICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5n
bG9iYWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQorICAgICAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAgICByZXN1bHQt
PmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBw
YXNzZWRCdWZmZXIsCisgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQor
eworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gcGFzc2VkQnVmZmVyOworICAgIGlm
ICghQXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJSYW5nZTx0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcigKKyAg
ICAgICAgICAgIGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkJ5dGUgb2Zmc2V0IGFuZCBs
ZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlciIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVjLT52bSgpLCBzdHJ1Y3R1cmUs
IGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CisgICAgICAgIG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PihleGVjLT52bSgpLmhlYXApKQor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyhleGVjLT52bSgpLCBjb250ZXh0KTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPnZtKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAg
ICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0
b3I6OlZpZXdUeXBlPiBpbXBsKQoreworICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
aW1wbC0+YnVmZmVyKCk7CisgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KHZtLCBzdHJ1
Y3R1cmUsIGJ1ZmZlciwgaW1wbC0+Ynl0ZU9mZnNldCgpLCBpbXBsLT5sZW5ndGgoKSk7CisgICAg
QVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQor
ICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dz4odm0uaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KHZtLCBjb250ZXh0
KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCisgICAg
UGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sKKyAgICByZXR1
cm4gY3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgc3RydWN0dXJlLCBpbXBsKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnZhbGlkYXRlUmFuZ2UoCisgICAgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoY2FuQWNjZXNzUmFuZ2VRdWlja2x5KG9m
ZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNl
dCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzIikpOworICAgIHJldHVybiBmYWxzZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlw
ZT4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnNldFdpdGhTcGVjaWZp
Y1R5cGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBPdGhlclR5cGUqIG90aGVyLCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICAvLyBIYW5kbGUgdGhlIGhpbGFyaW91cyBj
YXNlOiB0aGUgYWN0IG9mIGdldHRpbmcgdGhlIGxlbmd0aCBjb3VsZCBoYXZlIHJlc3VsdGVkCisg
ICAgLy8gaW4gbmV1dGVyaW5nLiBXZWxsLCBuby4gVGhhdCdsbCBuZXZlciBoYXBwZW4gYmVjYXVz
ZSB0aGVyZSBjYW5ub3QgYmUKKyAgICAvLyBzaWRlLWVmZmVjdHMgb24gZ2V0dGluZyB0aGUgbGVu
Z3RoIG9mIGEgdHlwZWQgYXJyYXkuIEJ1dCBwcmVkaWN0aW5nIHdoZXJlIHRoZXJlCisgICAgLy8g
YXJlLCBvciBhcmVuJ3QsIHNpZGUtZWZmZWN0cyBpcyBhIGZvb2wncyBnYW1lIHNvIHdlIHJlc29y
dCB0byB0aGlzIGNoZWFwCisgICAgLy8gY2hlY2suIFdvcnN0IGNhc2UsIGlmIHdlJ3JlIHdyb25n
LCBwZW9wbGUgc3RhcnQgc2VlaW5nIGxlc3MgdGhpbmdzIGdldCBjb3BpZWQKKyAgICAvLyBidXQg
d2Ugd29uJ3QgaGF2ZSBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCisgICAgbGVuZ3RoID0gc3Rk
OjptaW4obGVuZ3RoLCBvdGhlci0+bGVuZ3RoKCkpOworICAgIAorICAgIGlmICghdmFsaWRhdGVS
YW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAob3RoZXItPmxlbmd0aCgpICE9IGxlbmd0aCkgeworICAgICAgICB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkxlbmd0aCBvZiBpbmNvbWluZyBhcnJheSBj
aGFuZ2VkIHVuZXhwZWN0ZWRseS4iKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpLS07KQorICAgICAgICBzZXRJbmRl
eFF1aWNrbHkob2Zmc2V0ICsgaSwgb3RoZXItPmdldEluZGV4UXVpY2tseShpKSk7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXQoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBjb25zdCBDbGFzc0luZm8qIGNpID0gb2JqZWN0LT5jbGFzc0luZm8oKTsKKyAgICBpZiAo
Y2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBBZGFwdG9yOjp0eXBlVmFsdWUpIHsKKyAgICAg
ICAgLy8gVGhlIHN1cGVyIGZhc3QgY2FzZTogd2UgY2FuIGp1c3QgbWVtY3B5IHNpbmNlIHdlJ3Jl
IHRoZSBzYW1lIHR5cGUuCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBvdGhlciA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgICAgIGxlbmd0
aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtZW1jcHkodHlwZWRWZWN0b3IoKSArIG9m
ZnNldCwgb3RoZXItPnR5cGVkVmVjdG9yKCksIG90aGVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChjaS0+dHlwZWRBcnJheVN0
b3JhZ2VUeXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhT
cGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNp
ZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5n
dGgpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmlj
VHlwZShleGVjLCBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgp
OworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlw
ZShleGVjLCBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZp
Y1R5cGUoZXhlYywganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkqPihvYmplY3QpLCBvZmZzZXQs
IGxlbmd0aCk7CisgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBs
ZW5ndGgpOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gc2V0V2l0aFNw
ZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8SlNGbG9hdDY0QXJyYXkqPihvYmplY3QpLCBvZmZzZXQs
IGxlbmd0aCk7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3
OiB7CisgICAgICAgIGlmICghdmFsaWRhdGVSYW5nZShleGVjLCBvZmZzZXQsIGxlbmd0aCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIFdlIGNvdWxkIG9wdGltaXplIHRo
aXMgY2FzZS4gQnV0IHJpZ2h0IG5vdywgd2UgZG9uJ3QuCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzZXRJbmRleFF1aWNr
bHkoZXhlYywgb2Zmc2V0ICsgaSwgb2JqZWN0LT5nZXQoZXhlYywgaSkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
IH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNs
b3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJl
cih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAg
ICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4ICYmIHRoaXNPYmplY3QtPmNh
bkdldEluZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2Jq
ZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAg
ZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgo
KSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAg
aWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5H
ZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cih0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgordm9pZCBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAor
ICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOwor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCkgeworICAgICAgICAvLyBGaXJlZm94IGFwcGVhcnMgdG8gc2ltcGx5IGlnbm9yZSBhdHRlbXB0
cyB0byBzdG9yZSB0byB0aGUgbGVuZ3RoIHByb3BlcnR5LgorICAgICAgICAvLyBFdmVuIGluIHN0
cmljdCBtb2RlLiBJIHdpbGwgZG8gdGhlIHNhbWUuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlm
IChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHsKKyAgICAgICAgcHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleCwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlZmluZU93
blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAor
ICAgIC8vIFRoaXMgaXMgbWF0Y2hpbmcgRmlyZWZveCBiZWhhdmlvci4gSW4gcGFydGljdWxhciwg
aXQgcmVqZWN0cyBhbGwgYXR0ZW1wdHMgdG8KKyAgICAvLyBkZWZpbmVPd25Qcm9wZXJ0eSBmb3Ig
aW5kZXhlZCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cywgZXZlbiBpZiB0aGV5J3JlIG91dAor
ICAgIC8vIG9mIGJvdW5kcy4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lLmFzSW5kZXgoKSAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxk
VGhyb3csICJBdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgcmVhZC1vbmx5IHR5cGVkIGFycmF5IHBy
b3BlcnR5LiIpOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4o
Y2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlO
YW1lOjpOb3RBbkluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KAorICAgIEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCgKKyAgICAgICAgICAgIHRoaXNP
YmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKSwgc2xvdCk7
CisgICAgfQorICAgIAorICAgIGlmICghdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzbG90LnNldFZh
bHVlKHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnB1dEJ5SW5kZXgoCisgICAgSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Qoc2hvdWxkVGhyb3cpOworICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5wdXQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSksIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoIXRoaXNPYmplY3QtPmNhblNldEluZGV4UXVpY2tseShwcm9wZXJ0eU5h
bWUpKSB7CisgICAgICAgIC8vIFllcywgcmVhbGx5LiBGaXJlZm94IHJldHVybnMgd2l0aG91dCB0
aHJvd2luZyBhbnl0aGluZyBpZiB5b3Ugc3RvcmUgYmV5b25kCisgICAgICAgIC8vIHRoZSBib3Vu
ZHMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdGhpc09iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZSA+IE1BWF9BUlJB
WV9JTkRFWCkgeworICAgICAgICByZXR1cm4gY2VsbC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJv
cGVydHkoCisgICAgICAgICAgICBjZWxsLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHBy
b3BlcnR5TmFtZSkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAobW9k
ZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgCisgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmdldE93blByb3BlcnR5TmFtZXMoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
eworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGhpc09iamVjdC0+bV9sZW5ndGg7ICsraSkKKyAgICAgICAgYXJyYXkuYWRkKElk
ZW50aWZpZXIoZXhlYywgU3RyaW5nOjpudW1iZXIoaSkpKTsKKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIHN3aXRjaCAodGhpc09i
amVjdC0+bV9tb2RlKSB7CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheTogeworICAgICAgICB2aXNp
dG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuLCB0aGlz
T2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6IHsKKyAgICAg
ICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxUeXBl
ZEFycmF5OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3Rv
cmUoCisgICAgSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRv
a2VuKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4oY2VsbCk7CisgICAgCisgICAgaWYgKHRva2VuID09
IFR5cGVkQXJyYXlWZWN0b3JDb3B5VG9rZW4KKyAgICAgICAgJiYgdmlzaXRvci5jaGVja0lmU2hv
dWxkQ29weSh0aGlzT2JqZWN0LT5tX3ZlY3RvcikpIHsKKyAgICAgICAgdm9pZCogb2xkVmVjdG9y
ID0gdGhpc09iamVjdC0+bV92ZWN0b3I7CisgICAgICAgIHZvaWQqIG5ld1ZlY3RvciA9IHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgbWVt
Y3B5KG5ld1ZlY3Rvciwgb2xkVmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+bV92ZWN0b3IgPSBuZXdWZWN0b3I7CisgICAgICAgIHZpc2l0b3IuZGlk
Q29weShvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgIH0KKyAgICAKKyAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKHRoaXNPYmplY3QsIHZpc2l0b3IsIHRva2VuKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqIG9i
amVjdCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgLy8gV2UgcGxh
eSB0aGlzIGdhbWUgYmVjYXVzZSB3ZSB3YW50IHRoaXMgdG8gYmUgY2FsbGFibGUgZXZlbiBmcm9t
IHBsYWNlcyB0aGF0CisgICAgLy8gZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gRXhlY1N0YXRlKiBvciB0
aGUgVk0sIGFuZCB3ZSBvbmx5IGFsbG9jYXRlIHNvIGxpdHRsZQorICAgIC8vIG1lbW9yeSBoZXJl
IHRoYXQgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHRyaWdnZXIgYSBHQyAtIGp1c3QgYWNjb3VudGlu
ZyB3aGF0CisgICAgLy8gd2UgaGF2ZSBkb25lIGlzIGdvb2QgZW5vdWdoLiBUaGUgc29ydCBvZiBi
aXphcnJvIGV4Y2VwdGlvbiB0byB0aGUgImFsbG9jYXRpbmcKKyAgICAvLyBsaXR0bGUgbWVtb3J5
IiBpcyB3aGVuIHdlIHRyYW5zZmVyIGEgYmFja2luZyBidWZmZXIgaW50byB0aGUgQyBoZWFwOyB0
aGlzCisgICAgLy8gd2lsbCB0ZW1wb3JhcmlseSBnZXQgY291bnRlZCB0b3dhcmRzIGhlYXAgZm9v
dHByaW50IChpbmNvcnJlY3RseSwgaW4gdGhlIGNhc2UKKyAgICAvLyBvZiBhZG9wdGluZyBhbiBv
dmVyc2l6ZSB0eXBlZCBhcnJheSkgYnV0IHdlIGRvbid0IEdDIGhlcmUgYW55d2F5LiBUaGF0J3MK
KyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IGZpbmUuIFRoZSB3b3JzdCBjYXNlIGlzIGlmIHlvdSBj
cmVhdGVkIGEgdG9uIG9mIGZhc3QgdHlwZWQKKyAgICAvLyBhcnJheXMsIGFuZCBkaWQgbm90aGlu
ZyBidXQgY2F1c2VkIGFsbCBvZiB0aGVtIHRvIHNsb3cgZG93biBhbmQgd2FzdGUgbWVtb3J5Lgor
ICAgIC8vIEluIHRoYXQgY2FzZSwgeW91ciBtZW1vcnkgZm9vdHByaW50IHdpbGwgZG91YmxlIGJl
Zm9yZSB0aGUgR0MgcmVhbGl6ZXMgd2hhdCdzCisgICAgLy8gdXAuIEJ1dCBpZiB5b3UgZG8gKmFu
eXRoaW5nKiB0byB0cmlnZ2VyIGEgR0Mgd2F0ZXJtYXJrIGNoZWNrLCBpdCB3aWxsIGtub3cKKyAg
ICAvLyB0aGF0IHlvdSAqaGFkKiBkb25lIHRob3NlIGFsbG9jYXRpb25zIGFuZCBpdCB3aWxsIEdD
IGFwcHJvcHJpYXRlbHkuCisgICAgSGVhcCogaGVhcCA9IEhlYXA6OmhlYXAodGhpc09iamVjdCk7
CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKCpoZWFwKTsKKyAgICAKKyAgICBBU1NFUlQo
IXRoaXNPYmplY3QtPmhhc0luZGV4aW5nSGVhZGVyKCkpOworCisgICAgc2l6ZV90IHNpemUgPSB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUg
PT0gRmFzdFR5cGVkQXJyYXkKKyAgICAgICAgJiYgIXRoaXNPYmplY3QtPm1fYnV0dGVyZmx5ICYm
IHNpemUgPj0gc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkgeworICAgICAgICAvLyBSZXVzZSBhbHJl
YWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgorICAgICAgICB0aGlzT2Jq
ZWN0LT5tX2J1dHRlcmZseSA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxJbmRleGluZ0hlYWRl
cio+KHRoaXNPYmplY3QtPm1fdmVjdG9yKS0+YnV0dGVyZmx5KCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3Jvd0Fy
cmF5UmlnaHQoCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSwgKmhlYXAtPnZt
KCksIHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLAorICAgICAgICAgICAgdGhp
c09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIGZhbHNlLCAwLCAwKTsK
KyAgICB9CisKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0
Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6CisgICAg
ICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IsIHRo
aXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIE92ZXJzaXplVHlwZWRBcnJheToKKyAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRvaW5n
IHNvbWV0aGluZyBsaWtlICJzdWJ0cmFjdGluZyIgZnJvbSBleHRyYSBtZW1vcnkKKyAgICAgICAg
Ly8gY29zdCwgc2luY2UgcmlnaHQgbm93IHRoaXMgY2FzZSB3aWxsIGNhdXNlIHRoZSBHQyB0byB0
aGluayB0aGF0IHdlIHJlYWxsb2NhdGVkCisgICAgICAgIC8vIHRoZSB3aG9sZSBidWZmZXIuCisg
ICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPm1f
dmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBXYXN0ZWZ1bFR5cGVkQXJyYXk6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpLT5pbmRleGluZ0hlYWRlcigpLT5zZXRBcnJheUJ1ZmZlcihidWZmZXIuZ2V0
KCkpOworICAgIHRoaXNPYmplY3QtPm1fdmVjdG9yID0gYnVmZmVyLT5kYXRhKCk7CisgICAgdGhp
c09iamVjdC0+bV9tb2RlID0gV2FzdGVmdWxUeXBlZEFycmF5OworICAgIGhlYXAtPmFkZFJlZmVy
ZW5jZSh0aGlzT2JqZWN0LCBidWZmZXIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+CitKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqIG9iamVj
dCkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3Qt
PnR5cGVkSW1wbCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZV9oCisjZGVmaW5lIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiwgU3RydWN0dXJl
Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCop
OworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
KiBjcmVhdGUoCisgICAgICAgIEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJl
Kik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxp
bmVzX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzX2gK
KworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PFZpZXdDbGFz
cyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJSZWNlaXZlciBz
aG91bGQgYmUgYSB0eXBlZCBhcnJheSB2aWV3IikpOworICAgIAorICAgIGlmICghZXhlYy0+YXJn
dW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikpOworICAgIAor
ICAgIEpTT2JqZWN0KiBzb3VyY2VBcnJheSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVj
LT5hcmd1bWVudCgwKSk7CisgICAgaWYgKCFzb3VyY2VBcnJheSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IHNo
b3VsZCBiZSBhbiBvYmplY3QiKSk7CisgICAgCisgICAgdW5zaWduZWQgb2Zmc2V0OworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBvZmZzZXQgPSBleGVjLT5h
cmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBzb3VyY2VBcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVu
Z3RoKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdGhp
c09iamVjdC0+c2V0KGV4ZWMsIHNvdXJjZUFycmF5LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNTdWJhcnJheShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNGdW5j
dGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSk7CisgICAg
CisgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihl
eGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxk
IGJlIGEgdHlwZWQgYXJyYXkgdmlldyIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpKTsKKyAgICAKKyAgICBp
bnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50
MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGVuZCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEdldCB0aGUgbGVu
Z3RoIGhlcmU7IGxhdGVyIGFzc2VydCB0aGF0IHRoZSBsZW5ndGggZGlkbid0IGNoYW5nZS4KKyAg
ICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CisgICAgCisgICAg
Ly8gSGFuZGxlIG5lZ2F0aXZlIGluZGljZXM6IC14ID0+IGxlbmd0aCAtIHgKKyAgICBpZiAoYmVn
aW4gPCAwKQorICAgICAgICBiZWdpbiA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4odGhpc0xl
bmd0aCArIGJlZ2luKSwgMCk7CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9IHN0ZDo6
bWF4KHN0YXRpY19jYXN0PGludD4odGhpc0xlbmd0aCArIGVuZCksIDApOworICAgIAorICAgIC8v
IENsYW1wIHRoZSBpbmRpY2VzIHRvIHRoZSBib3VuZHMgb2YgdGhlIGFycmF5LgorICAgIEFTU0VS
VChiZWdpbiA+PSAwKTsKKyAgICBBU1NFUlQoZW5kID49IDApOworICAgIGJlZ2luID0gc3RkOjpt
aW4oYmVnaW4sIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICBlbmQgPSBz
dGQ6Om1pbihlbmQsIHN0YXRpY19jYXN0PGludDMyX3Q+KHRoaXNMZW5ndGgpKTsKKyAgICAKKyAg
ICAvLyBDbGFtcCBlbmQgdG8gYmVnaW4uCisgICAgZW5kID0gc3RkOjptYXgoYmVnaW4sIGVuZCk7
CisgICAgCisgICAgQVNTRVJUKGVuZCA+PSBiZWdpbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0g
YmVnaW47CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZW5kIC0gYmVnaW47CisgICAgCisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IHRoaXNPYmplY3QtPmJ1ZmZlcigpOworICAg
IFJFTEVBU0VfQVNTRVJUKHRoaXNMZW5ndGggPT0gdGhpc09iamVjdC0+bGVuZ3RoKCkpOworICAg
IAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0KKyAgICAgICAgY2FsbGVlLT5nbG9iYWxPYmpl
Y3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSk7CisgICAgCisgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAg
ICAgICAgZXhlYywgc3RydWN0dXJlLCBhcnJheUJ1ZmZlciwKKyAgICAgICAgdGhpc09iamVjdC0+
Ynl0ZU9mZnNldCgpICsgb2Zmc2V0ICogVmlld0NsYXNzOjplbGVtZW50U2l6ZSwKKyAgICAgICAg
bGVuZ3RoKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlPFZpZXdDbGFzcz46OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCit7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6ZmluaXNoQ3JlYXRpb24oCisgICAgRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIAorICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICAKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPnNldCwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2V0
PFZpZXdDbGFzcz4sIERvbnRFbnVtLCAyKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPnN1YmFycmF5LCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNTdWJh
cnJheTxWaWV3Q2xhc3M+LCBEb250RW51bSwgMik7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5CWVRFU19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVtZW50
U2l6ZSksIERvbnRFbnVtIHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmll
d0NsYXNzPioKK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz46OmNy
ZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlKiBwcm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZT4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUoZXhlYy0+dm0oKSwgc3RydWN0dXJl
KTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCk7Cisg
ICAgcmV0dXJuIHByb3RvdHlwZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
U3RydWN0dXJlKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+Ojpj
cmVhdGVTdHJ1Y3R1cmUoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoCisg
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE1ICs0OSwyNiBAQAogI2luY2x1ZGUg
IkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBUElXcmFwcGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NhbGxi
YWNrQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1
ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTTmFtZVNj
b3BlLmgiCiAjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCIKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMZWdhY3lQcm9maWxlci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgpAQCAtMjE0LDYgKzIyNSwz
MCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgcHJvdG9B
Y2Nlc3Nvci0+c2V0U2V0dGVyKGV4ZWMtPnZtKCksIEpTRnVuY3Rpb246OmNyZWF0ZShleGVjLCB0
aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQ
cm90b3R5cGUtPnB1dERpcmVjdEFjY2Vzc29yKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51
bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIEFjY2Vzc29yIHwgRG9udEVudW0pOwogICAg
IG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVjdHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJh
bnNpdGlvbihleGVjLT52bSgpLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7CisgICAgCisgICAg
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgpXS5wcm90b3R5cGUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
SlNJbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDE2KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0ludDE2QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU0ludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU0lu
dDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29i
amVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVp
bnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5
cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNVaW50MTZBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTVWludDE2QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3Rv
dHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnBy
b3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MzJBcnJheVByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMsIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDMy
QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0
NjQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90
eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoZXhlYy0+dm0oKSwgSlNE
YXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fb2Jq
ZWN0UHJvdG90eXBlLmdldCgpKSkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ludDhBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTSW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ludDMyQXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVk
QXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNVaW50OEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0uc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5
cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnN0cnVj
dHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50MTZBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0ucHJv
dG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXk6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMild
LnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQz
MildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNGbG9hdDMyQXJyYXk6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZs
b2F0MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUZsb2F0NjQpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQ2NEFycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVEYXRhVmlldyldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRh
Vmlldzo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCkpKTsKIAogICAgIG1fbmFtZVNjb3Bl
U3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU05hbWVTY29wZTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIGpzTnVsbCgpKSk7CiAgICAgbV9hY3RpdmF0aW9uU3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0FjdGl2YXRpb246OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBqc051bGwoKSkpOwpAQCAtMzE4LDYgKzM1MywyNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAKICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuSlNPTiwgSlNPTk9i
amVjdDo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpLCBEb250RW51bSk7CiAgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLk1hdGgsIE1hdGhPYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlzLCBNYXRoT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwg
RG9udEVudW0pOworICAgIAorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciogYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX2FycmF5QnVmZmVyUHJvdG90eXBlLmdldCgp
KTsKKyAgICBGaXhlZEFycmF5PEludGVybmFsRnVuY3Rpb24qLCBOVU1CRVJfT0ZfVFlQRURfQVJS
QVlfVFlQRVM+IHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnM7CisgICAgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0b0luZGV4KFR5cGVJbnQ4KV0gPSBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5
Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUludDE2KV0gPSBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlKHRoaXMsIEpTSW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJh
eXNbdG9JbmRleChUeXBlSW50MTYpXS5wcm90b3R5cGUuZ2V0KCksICJJbnQxNkFycmF5Iik7Cisg
ICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVJbnQzMildID0gSlNJbnQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkp
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiSW50
MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlVWludDgp
XSA9IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50OEFycmF5Q29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlw
ZS5nZXQoKSwgIlVpbnQ4QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5k
ZXgoVHlwZVVpbnQ4Q2xhbXBlZCldID0gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUodGhpcywgSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDhD
bGFtcGVkQXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVp
bnQxNildID0gSlNVaW50MTZBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUodGhpcywgSlNVaW50MTZB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5j
dGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDE2KV0u
cHJvdG90eXBlLmdldCgpLCAiVWludDE2QXJyYXkiKTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0
b3JzW3RvSW5kZXgoVHlwZVVpbnQzMildID0gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGUodGhpcywgSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9J
bmRleChUeXBlVWludDMyKV0ucHJvdG90eXBlLmdldCgpLCAiVWludDMyQXJyYXkiKTsKKyAgICB0
eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXSA9IEpTRmxvYXQzMkFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQzMildLnByb3RvdHlwZS5nZXQoKSwg
IkZsb2F0MzJBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
RmxvYXQ2NCldID0gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRmxv
YXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDY0KV0ucHJvdG90eXBlLmdldCgpLCAiRmxvYXQ2NEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNv
bnN0cnVjdG9yc1t0b0luZGV4KFR5cGVEYXRhVmlldyldID0gSlNEYXRhVmlld0NvbnN0cnVjdG9y
OjpjcmVhdGUodGhpcywgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlRGF0YVZpZXcpXS5wcm90b3R5cGUuZ2V0KCksICJEYXRhVmlldyIpOworICAg
IAorICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5BcnJheUJ1ZmZlciwgYXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIAorICAgIGZvciAodW5zaWduZWQgdHlwZWRB
cnJheUluZGV4ID0gTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTOyB0eXBlZEFycmF5SW5kZXgt
LTspIHsKKyAgICAgICAgbV90eXBlZEFycmF5c1t0eXBlZEFycmF5SW5kZXhdLnByb3RvdHlwZS0+
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0s
IERvbnRFbnVtKTsKKyAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgSWRlbnRpZmllcihleGVjLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRl
eF0tPm5hbWUoZXhlYykpLCB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3R5cGVkQXJyYXlJbmRleF0s
IERvbnRFbnVtKTsKKyAgICB9CiAKICAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFs
c1tdID0gewogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oZXhlYy0+cHJvcGVydHlOYW1lcygp
Lk5hTiwganNOYU4oKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApAQCAtNTQw
LDYgKzU5NiwxNCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zdHJpbmdPYmplY3RTdHJ1Y3R1cmUpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUp
OworICAgIAorICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2FycmF5QnVmZmVyUHJv
dG90eXBlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclN0
cnVjdHVyZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gTlVNQkVSX09GX1RZUEVEX0FS
UkFZX1RZUEVTOyBpLS07KSB7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3R5cGVkQXJyYXlzW2ldLnByb3RvdHlwZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3R5cGVkQXJyYXlzW2ldLnN0cnVjdHVyZSk7CisgICAgfQogfQogCiBKU1ZhbHVl
IEpTR2xvYmFsT2JqZWN0Ojp0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9k
ZSBlY21hTW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogI2luY2x1ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIgogI2luY2x1
ZGUgIk51bWJlclByb3RvdHlwZS5oIgpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlN0cmlu
Z1Byb3RvdHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXRj
aHBvaW50LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KQEAgLTE2Niw2ICsxNjcsMTYgQEAgcHJvdGVjdGVkOgogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fcmVnRXhwU3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlOwogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZTsKKyAgICAKKyAgICBXcml0ZUJhcnJp
ZXI8SlNBcnJheUJ1ZmZlclByb3RvdHlwZT4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZTsKKyAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2FycmF5QnVmZmVyU3RydWN0dXJlOworICAgIAorICAg
IHN0cnVjdCBUeXBlZEFycmF5RGF0YSB7CisgICAgICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4g
cHJvdG90eXBlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7Cisg
ICAgfTsKKyAgICAKKyAgICBGaXhlZEFycmF5PFR5cGVkQXJyYXlEYXRhLCBOVU1CRVJfT0ZfVFlQ
RURfQVJSQVlfVFlQRVM+IG1fdHlwZWRBcnJheXM7CiAgICAgICAgIAogICAgIHZvaWQqIG1fc3Bl
Y2lhbFBvaW50ZXJzW1NwZWNpYWw6OlRhYmxlU2l6ZV07IC8vIFNwZWNpYWwgcG9pbnRlcnMgdXNl
ZCBieSB0aGUgTExJbnQgYW5kIEpJVC4KIApAQCAtMzMwLDYgKzM0MSwxNCBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlKiByZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biBtX3JlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFN0cnVjdHVyZSog
cmVnRXhwU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBTdHJ1Y3R1cmUuZ2V0KCk7
IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nT2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZSogYXJyYXlCdWZmZXJQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2FycmF5
QnVmZmVyUHJvdG90eXBlLmdldCgpOyB9CisgICAgU3RydWN0dXJlKiBhcnJheUJ1ZmZlclN0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIHR5cGVkQXJyYXlTdHJ1Y3R1cmUoVHlwZWRBcnJheVR5cGUgdHlw
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGVkQXJyYXlzW3RvSW5kZXgodHlw
ZSldLnN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CiAKICAgICB2b2lkKiBhY3R1YWxQb2ludGVyRm9y
KFNwZWNpYWw6OlBvaW50ZXIgcG9pbnRlcikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50OEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNJbnQ4QXJyYXlfaAorI2RlZmluZSBKU0ludDhBcnJheV9oCisKKyNpbmNsdWRlICJK
U1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0ludDhBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQxNkFycmF5LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0ludDE2QXJyYXlfaAorI2RlZmluZSBKU0ludDE2QXJyYXlf
aAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQxNkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMy
QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50MzJBcnJheV9oCisjZGVm
aW5lIEpTSW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRp
ZiAvLyBKU0ludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1
Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKworI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBj
b25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7IkZ1bmN0aW9u
IiwgJkpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcil9CisKK01BS0VfU19JTkZPKEludDhBcnJh
eSk7CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOwor
TUFLRV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7
CitNQUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitN
QUtFX1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKK01B
S0VfU19JTkZPKERhdGFWaWV3KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaAorI2RlZmluZSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNfaAorCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNJbnQ4QXJyYXk+IEpTSW50OEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlDb25z
dHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxKU0lu
dDMyQXJyYXk+IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5Q29uc3RydWN0
b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50OENs
YW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDE2QXJyYXk+IEpTVWludDE2QXJy
YXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cjxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFy
cmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3I8SlNGbG9hdDY0QXJyYXk+IEpTRmxvYXQ2NEFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNEYXRhVmlldz4gSlNEYXRhVmlld0Nv
bnN0cnVjdG9yOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJh
eUNvbnN0cnVjdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlQcm90b3R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwKKyAgICB0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKUyMjdHlwZSMjUHJvdG90eXBlOjpzX2luZm8gPSB7I3R5cGUgIlByb3RvdHlw
ZSIsICZKUyMjdHlwZSMjUHJvdG90eXBlOjpCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlMjI3R5cGUjI1Byb3RvdHlwZSl9CisKK01BS0VfU19JTkZPKEludDhBcnJheSk7
CitNQUtFX1NfSU5GTyhJbnQxNkFycmF5KTsKK01BS0VfU19JTkZPKEludDMyQXJyYXkpOworTUFL
RV9TX0lORk8oVWludDhBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50OENsYW1wZWRBcnJheSk7CitN
QUtFX1NfSU5GTyhVaW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhVaW50MzJBcnJheSk7CitNQUtF
X1NfSU5GTyhGbG9hdDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQ2NEFycmF5KTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzX2gKKyNkZWZpbmUg
SlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZS5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQ4
QXJyYXk+IEpTSW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZTxKU0ludDE2QXJyYXk+IEpTSW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQzMkFycmF5PiBKU0ludDMy
QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PEpTVWludDhBcnJheT4gSlNVaW50OEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PiBKU1VpbnQ4Q2xhbXBl
ZEFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQzMkFycmF5PiBKU1VpbnQzMkFycmF5UHJv
dG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zsb2F0
MzJBcnJheT4gSlNGbG9hdDMyQXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPEpTRmxvYXQ2NEFycmF5PiBKU0Zsb2F0NjRBcnJheVByb3RvdHlw
ZTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlQcm90b3R5
cGVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRB
cnJheXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlZEFycmF5cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisjZGVmaW5lIE1BS0VfU19JTkZPKHR5cGUpIFwK
KyAgICB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbyA9
IHsgXAorICAgICAgICAjdHlwZSAiQXJyYXkiLCAmSlMjI3R5cGUjI0FycmF5OjpCYXNlOjpzX2lu
Zm8sIDAsIDAsIFwKKyAgICAgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQXJyYXkp
IFwKKyAgICB9OyBcCisgICAgY29uc3QgQ2xhc3NJbmZvKiBnZXQjI3R5cGUjI0FycmF5Q2xhc3NJ
bmZvKCkgeyByZXR1cm4gJkpTIyN0eXBlIyNBcnJheTo6c19pbmZvOyB9CisKK01BS0VfU19JTkZP
KEludDgpOworTUFLRV9TX0lORk8oSW50MTYpOworTUFLRV9TX0lORk8oSW50MzIpOworTUFLRV9T
X0lORk8oVWludDgpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkKTsKK01BS0VfU19JTkZPKFVp
bnQxNik7CitNQUtFX1NfSU5GTyhVaW50MzIpOworTUFLRV9TX0lORk8oRmxvYXQzMik7CitNQUtF
X1NfSU5GTyhGbG9hdDY0KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5
c19oCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIlR5
cGVkQXJyYXlBZGFwdG9ycy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBK
U0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9y
PiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDMyQWRh
cHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50
OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpTRmxvYXQzMkFy
cmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRhcHRvcj4gSlNG
bG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFy
cmF5c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50OEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQ4QXJyYXlfaAor
I2RlZmluZSBKU1VpbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisj
ZW5kaWYgLy8gSlNVaW50OEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJyYXkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDhDbGFtcGVkQXJyYXlfaAorI2RlZmluZSBKU1Vp
bnQ4Q2xhbXBlZEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlm
IC8vIEpTVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQxNkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNVaW50MTZBcnJheV9oCisjZGVmaW5lIEpTVWludDE2QXJyYXlfaAorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MTZBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU1VpbnQzMkFycmF5X2gKKyNkZWZpbmUgSlNV
aW50MzJBcnJheV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBK
U1VpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
ZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw5IEBACiAjZGVm
aW5lIE9wZXJhdGlvbnNfaAogCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1
ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTUHJveHkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDYgKzE5Niw3IEBAIHR5cGVkZWYgT3B0aW9u
UmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgdihib29sLCBvYmplY3RzQXJlSW1tb3J0YWwsIGZhbHNl
KSBcCiAgICAgdihib29sLCBzaG93T2JqZWN0U3RhdGlzdGljcywgZmFsc2UpIFwKICAgICBcCisg
ICAgdihib29sLCBsb2dHQywgZmFsc2UpIFwKICAgICB2KHVuc2lnbmVkLCBnY01heEhlYXBTaXpl
LCAwKSBcCiAgICAgdihib29sLCByZWNvcmRHQ1BhdXNlVGltZXMsIGZhbHNlKSBcCiAgICAgdihi
b29sLCBsb2dIZWFwU3RhdGlzdGljc0F0RXhpdCwgZmFsc2UpIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQYXNzV2Vhay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6OlNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyKCkgeyB9CitTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6flNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZmZXIqIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyOjp0b0pTKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQXJyYXlCdWZmZXIqIG5hdGl2ZSkKK3sKKyAgICBpZiAoSlNBcnJheUJ1ZmZl
ciogYnVmZmVyID0gbmF0aXZlLT5tX3dyYXBwZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBidWZm
ZXI7CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKAorICAgICAgICBleGVjLT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0
dXJlKCksIG5hdGl2ZSk7CisgICAgbmF0aXZlLT5tX3dyYXBwZXIgPSBQYXNzV2VhazxKU0FycmF5
QnVmZmVyPihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2Rl
ZmluZSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJIYW5kbGUuaCIK
KyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Ly8gVGhlIGRlZmF1bHQgY29udHJvbGxlciB1c2VkIGZvciBtYW5hZ2luZyB0aGUgcmVsYXRpb25z
aGlwIGJldHdlZW4KKy8vIGFycmF5IGJ1ZmZlcnMgYW5kIHRoZWlyIHdyYXBwZXJzIGluIEphdmFT
Y3JpcHRDb3JlLiBUaGlzIGlzbid0IHdoYXQKKy8vIFdlYkNvcmUgdXNlcywgYnV0IGl0IGlzIHdo
YXQgSlNDIHVzZXMgd2hlbiBydW5uaW5nIHN0YW5kYWxvbmUuIFRoaXMKKy8vIGlzIHByZXR0eSBz
aW1wbGU6CisvLworLy8gLSBJZiB0aGUgSlNBcnJheUJ1ZmZlciBpcyBsaXZlLCB0aGVuIHRoZSBB
cnJheUJ1ZmZlciBzdGF5cyBhbGl2ZS4KKy8vCisvLyAtIElmIHlvdSBhc2sgYW4gQXJyYXlCdWZm
ZXIgZm9yIGEgSlNBcnJheUJ1ZmZlciBhZnRlciBvbmUgaGFkCisvLyAgIGFscmVhZHkgYmVlbiBj
cmVhdGVkIGFuZCBpdCBkaWRuJ3QgZGllLCB0aGVuIHlvdSBnZXQgdGhlIHNhbWUKKy8vICAgb25l
LgorCitjbGFzcyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBUeXBlZEFycmF5
Q29udHJvbGxlciB7CitwdWJsaWM6CisgICAgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsK
KyAgICB2aXJ0dWFsIH5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZp
cnR1YWwgSlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFy
cmF5QnVmZmVyKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTMgKzIzMCwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdU
eXBlKCkpOworICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBl
KCkpCisgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0
b3JhZ2VUeXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihjb25z
dCBKU0NlbGwqKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0
aWVzKGluZGV4aW5nVHlwZSgpKTsKLSAgICB9CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlcihj
b25zdCBKU0NlbGwqKSBjb25zdDsKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJl
SW5saW5lc19oCiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgogCkBAIC0xMDQsNiArMTA1LDE3IEBAIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldENvbmMKICAgICAgICAgdm0sIHVpZCwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpo
YXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0Cit7CisgICAgaWYgKGhh
c0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgaWYgKCFpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+dHlwZWRBcnJheVN0b3Jh
Z2VUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBqc0Nhc3Q8
Y29uc3QgSlNBcnJheUJ1ZmZlclZpZXcqPihjZWxsKS0+bW9kZSgpID09IFdhc3RlZnVsVHlwZWRB
cnJheTsKK30KKwogaW5saW5lIGJvb2wgU3RydWN0dXJlOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogewogICAgIHJldHVybiB0eXBl
SW5mbygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSAmJiBnbG9iYWxPYmplY3QoKSA9PSBsZXhp
Y2FsR2xvYmFsT2JqZWN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheUFkYXB0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5QWRhcHRvcnMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBUeXBlZEFycmF5QWRhcHRvcnNfaAorI2RlZmluZSBUeXBlZEFycmF5QWRhcHRv
cnNfaAorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3Rl
bXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdUeXBlQXJnLCB0eXBl
bmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZUFyZz4KK3N0
cnVjdCBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5cGVBcmcgVHlw
ZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVkZWYgSlNWaWV3
VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSB0eXBl
VmFsdWUgPSB0eXBlVmFsdWVBcmc7CisKKyAgICBzdGF0aWMgVHlwZSB0b05hdGl2ZShkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4oc3RhdGljX2Nh
c3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRp
dmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4odmFsdWUuYXNJbnQzMigpKTsKKyAg
ICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVHlwZSB0b05hdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2
ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVl
IHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPAorICAgIHR5cGVuYW1lIFR5cGVBcmcsIHR5cGVuYW1lIFZpZXdU
eXBlQXJnLCB0eXBlbmFtZSBKU1ZpZXdUeXBlQXJnLAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVW
YWx1ZUFyZz4KK3N0cnVjdCBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yIHsKKyAgICB0eXBlZGVmIFR5
cGVBcmcgVHlwZTsKKyAgICB0eXBlZGVmIFZpZXdUeXBlQXJnIFZpZXdUeXBlOworICAgIHR5cGVk
ZWYgSlNWaWV3VHlwZUFyZyBKU1ZpZXdUeXBlOworICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5
VHlwZSB0eXBlVmFsdWUgPSB0eXBlVmFsdWVBcmc7CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9O
YXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5
cGU+KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS5hc051bWJlcigp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRv
TnVtYmVyKGV4ZWMpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVl
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIoUU5hTik7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9
Cit9OworCitzdHJ1Y3QgSW50OEFkYXB0b3I7CitzdHJ1Y3QgSW50MTZBZGFwdG9yOworc3RydWN0
IEludDMyQWRhcHRvcjsKK3N0cnVjdCBVaW50OEFkYXB0b3I7CitzdHJ1Y3QgVWludDhDbGFtcGVk
QWRhcHRvcjsKK3N0cnVjdCBVaW50MTZBZGFwdG9yOworc3RydWN0IFVpbnQzMkFkYXB0b3I7Citz
dHJ1Y3QgRmxvYXQzMkFkYXB0b3I7CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3I7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEdlbmVyaWNUeXBlZEFycmF5VmlldzsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJh
eTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMy
QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxv
YXQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+
IEZsb2F0NjRBcnJheTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gY2xhc3MgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDhB
ZGFwdG9yPiBKU0ludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MTZBZGFwdG9yPiBKU0ludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEludDMyQWRhcHRvcj4gSlNJbnQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxVaW50OEFkYXB0b3I+IEpTVWludDhBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gSlNVaW50OENsYW1wZWRBcnJheTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDE2QWRhcHRvcj4gSlNVaW50MTZBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gSlNVaW50MzJB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEpT
RmxvYXQzMkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDY0QWRh
cHRvcj4gSlNGbG9hdDY0QXJyYXk7CisKK3N0cnVjdCBJbnQ4QWRhcHRvciA6IEludGVncmFsVHlw
ZWRBcnJheUFkYXB0b3I8aW50OF90LCBJbnQ4QXJyYXksIEpTSW50OEFycmF5LCBUeXBlSW50OD4g
eyB9Oworc3RydWN0IEludDE2QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0b3I8aW50
MTZfdCwgSW50MTZBcnJheSwgSlNJbnQxNkFycmF5LCBUeXBlSW50MTY+IHsgfTsKK3N0cnVjdCBJ
bnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDMyX3QsIEludDMyQXJy
YXksIEpTSW50MzJBcnJheSwgVHlwZUludDMyPiB7IH07CitzdHJ1Y3QgVWludDhBZGFwdG9yIDog
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50OF90LCBVaW50OEFycmF5LCBKU1VpbnQ4QXJy
YXksIFR5cGVVaW50OD4geyB9Oworc3RydWN0IFVpbnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVk
QXJyYXlBZGFwdG9yPHVpbnQxNl90LCBVaW50MTZBcnJheSwgSlNVaW50MTZBcnJheSwgVHlwZVVp
bnQxNj4geyB9Oworc3RydWN0IFVpbnQzMkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFw
dG9yPHVpbnQzMl90LCBVaW50MzJBcnJheSwgSlNVaW50MzJBcnJheSwgVHlwZVVpbnQzMj4geyB9
Oworc3RydWN0IEZsb2F0MzJBZGFwdG9yIDogRmxvYXRUeXBlZEFycmF5QWRhcHRvcjxmbG9hdCwg
RmxvYXQzMkFycmF5LCBKU0Zsb2F0MzJBcnJheSwgVHlwZUZsb2F0MzI+IHsgfTsKK3N0cnVjdCBG
bG9hdDY0QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZG91YmxlLCBGbG9hdDY0QXJy
YXksIEpTRmxvYXQ2NEFycmF5LCBUeXBlRmxvYXQ2ND4geyB9OworCitzdHJ1Y3QgVWludDhDbGFt
cGVkQWRhcHRvciB7CisgICAgdHlwZWRlZiB1aW50OF90IFR5cGU7CisgICAgdHlwZWRlZiBVaW50
OENsYW1wZWRBcnJheSBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVWludDhDbGFtcGVkQXJyYXkg
SlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0g
VHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShkb3Vi
bGUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgdmFsdWUg
PCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICh2YWx1ZSA+IDI1NSkKKyAg
ICAgICAgICAgIHJldHVybiAyNTU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90
PihscmludCh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2
ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBjbGFtcCh2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4g
dG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50
OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAodmFsdWUu
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEpTVmFsdWUgdG9KU1ZhbHVlKHVpbnQ4X3QgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKHVpbnQ4X3QgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgdWludDhfdCBjbGFtcChpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFs
dWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gVHlwZWRBcnJheUFkYXB0b3JzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1R5cGVk
QXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorVHlwZWRBcnJheUNv
bnRyb2xsZXI6On5UeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
ZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgVHlwZWRBcnJheUNvbnRyb2xsZXJf
aAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEFycmF5QnVmZmVyOworY2xhc3MgRXhlY1N0YXRlOworY2xhc3MgSlNBcnJheUJ1ZmZlcjsK
K2NsYXNzIEpTR2xvYmFsT2JqZWN0OworCitjbGFzcyBUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1
YmxpYyBSZWZDb3VudGVkPFR5cGVkQXJyYXlDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5UeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwg
SlNBcnJheUJ1ZmZlciogdG9KUyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEFycmF5QnVm
ZmVyKikgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFy
cmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheURlc2NyaXB0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgVHlwZWRBcnJheURlc2NyaXB0b3JfaAotI2RlZmluZSBU
eXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2xhc3NJ
bmZvOwotCi1lbnVtIFR5cGVkQXJyYXlUeXBlIHsKLSAgICBUeXBlZEFycmF5Tm9uZSwKLSAgICBU
eXBlZEFycmF5SW50OCwKLSAgICBUeXBlZEFycmF5SW50MTYsCi0gICAgVHlwZWRBcnJheUludDMy
LAotICAgIFR5cGVkQXJyYXlVaW50OCwKLSAgICBUeXBlZEFycmF5VWludDhDbGFtcGVkLAotICAg
IFR5cGVkQXJyYXlVaW50MTYsCi0gICAgVHlwZWRBcnJheVVpbnQzMiwKLSAgICBUeXBlZEFycmF5
RmxvYXQzMiwKLSAgICBUeXBlZEFycmF5RmxvYXQ2NAotfTsKLQotc3RydWN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIHsKLSAgICBUeXBlZEFycmF5RGVzY3JpcHRvcigpCi0gICAgICAgIDogbV9jbGFz
c0luZm8oMCkKLSAgICAgICAgLCBtX3N0b3JhZ2VPZmZzZXQoMCkKLSAgICAgICAgLCBtX2xlbmd0
aE9mZnNldCgwKQotICAgIHsKLSAgICB9Ci0gICAgVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8sIHNpemVfdCBzdG9yYWdlT2Zmc2V0LCBzaXplX3QgbGVuZ3Ro
T2Zmc2V0KQotICAgICAgICA6IG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKLSAgICAgICAgLCBtX3N0
b3JhZ2VPZmZzZXQoc3RvcmFnZU9mZnNldCkKLSAgICAgICAgLCBtX2xlbmd0aE9mZnNldChsZW5n
dGhPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
OwotICAgIHNpemVfdCBtX3N0b3JhZ2VPZmZzZXQ7Ci0gICAgc2l6ZV90IG1fbGVuZ3RoT2Zmc2V0
OwotfTsKLQotZW51bSBUeXBlZEFycmF5U2lnbmVkbmVzcyB7Ci0gICAgU2lnbmVkVHlwZWRBcnJh
eSwKLSAgICBVbnNpZ25lZFR5cGVkQXJyYXkKLX07Ci1lbnVtIFR5cGVkQXJyYXlSb3VuZGluZyB7
Ci0gICAgVHJ1bmNhdGVSb3VuZGluZywKLSAgICBDbGFtcFJvdW5kaW5nCi19OwotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eUlubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJyYXlJbmxpbmVz
X2gKKyNkZWZpbmUgVHlwZWRBcnJheUlubGluZXNfaAorCisjaW5jbHVkZSAiR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmgiCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5SW5saW5l
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCisK
KyNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVk
QXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBl
ZEFycmF5OgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICBy
ZXR1cm4gSlNJbnQ4QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAg
cmV0dXJuIEpTVWludDhBcnJheTo6aW5mbygpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICAgICAgcmV0dXJuIEpTVWludDhDbGFtcGVkQXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5
cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIEpTSW50MTZBcnJheTo6aW5mbygpOworICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIEpTVWludDE2QXJyYXk6OmluZm8oKTsKKyAgICBj
YXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIEpTSW50MzJBcnJheTo6aW5mbygpOworICAg
IGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIEpTVWludDMyQXJyYXk6OmluZm8oKTsK
KyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gSlNGbG9hdDMyQXJyYXk6Omlu
Zm8oKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gSlNGbG9hdDY0QXJy
YXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIEpTRGF0
YVZpZXc6OmluZm8oKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIG91dC5wcmludCgiTm90VHlwZWRBcnJheSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgb3V0LnByaW50
KCJUeXBlSW50OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZUludDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlSW50MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50OCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICBvdXQu
cHJpbnQoIlR5cGVVaW50OENsYW1wZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlw
ZVVpbnQxNjoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDE2Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZVVpbnQzMiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJUeXBlRmxvYXQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlRmxvYXQ2
NDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlRmxvYXQ2NCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIG91dC5wcmludCgiVHlwZURhdGFWaWV3Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5VHlwZV9oCisj
ZGVmaW5lIFR5cGVkQXJyYXlUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENsYXNzSW5mbzsKKworZW51bSBUeXBlZEFycmF5
VHlwZSB7CisgICAgTm90VHlwZWRBcnJheSwKKyAgICBUeXBlSW50OCwKKyAgICBUeXBlVWludDgs
CisgICAgVHlwZVVpbnQ4Q2xhbXBlZCwKKyAgICBUeXBlSW50MTYsCisgICAgVHlwZVVpbnQxNiwK
KyAgICBUeXBlSW50MzIsCisgICAgVHlwZVVpbnQzMiwKKyAgICBUeXBlRmxvYXQzMiwKKyAgICBU
eXBlRmxvYXQ2NCwKKyAgICBUeXBlRGF0YVZpZXcKK307CisKKyNkZWZpbmUgTlVNQkVSX09GX1RZ
UEVEX0FSUkFZX1RZUEVTIFR5cGVEYXRhVmlldworCitpbmxpbmUgdW5zaWduZWQgdG9JbmRleChU
eXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
dHlwZSkgLSAxOworfQorCitpbmxpbmUgYm9vbCBpc1R5cGVkVmlldyhUeXBlZEFycmF5VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAg
ICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworaW5saW5lIHNpemVfdCBlbGVtZW50
U2l6ZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUeXBlSW50ODoKKyAg
ICBjYXNlIFR5cGVVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgY2FzZSBU
eXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgVHlwZUludDE2OgorICAg
IGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJl
dHVybiA0OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiA4OworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUpOworCitpbmxp
bmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgY2FzZSBUeXBl
VWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZUludDE2OgorICAgIGNhc2UgVHlwZVVpbnQxNjoK
KyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBib29sIGlzRmxvYXQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZsb2F0NjQ6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIGlzU2lnbmVkKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgIGNh
c2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIGlzQ2xhbXBlZChUeXBl
ZEFycmF5VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IFR5cGVVaW50OENsYW1wZWQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpUeXBlZEFycmF5VHlwZSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gVHlwZWRBcnJheVR5cGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgVHlwZWRBcnJheXNfaAorI2RlZmluZSBUeXBlZEFycmF5c19oCisKKyNp
bmNsdWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRh
cHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEludDhBZGFwdG9yPiBJbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxJbnQxNkFkYXB0b3I+IEludDE2QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxJbnQzMkFkYXB0b3I+IEludDMyQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50OEFkYXB0b3I+IFVpbnQ4QXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50OENsYW1wZWRBZGFwdG9yPiBVaW50OENsYW1wZWRBcnJheTsKK3R5cGVkZWYgR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IFVpbnQxNkFycmF5OwordHlwZWRlZiBHZW5l
cmljVHlwZWRBcnJheVZpZXc8VWludDMyQWRhcHRvcj4gVWludDMyQXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxGbG9hdDMyQWRhcHRvcj4gRmxvYXQzMkFycmF5OwordHlwZWRl
ZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEZsb2F0NjRBcnJheTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBUeXBlZEFycmF5c19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHJldmlzaW9uIDE1NDA2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4QXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpA
QCAtMjcsNzYgKzI2LDkgQEAKICNpZm5kZWYgVWludDhBcnJheV9oCiAjZGVmaW5lIFVpbnQ4QXJy
YXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQ4QXJyYXkgOiBwdWJsaWMg
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhf
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQg
d2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBEbwotICAg
IC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0IHdpdGhv
dXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJh
eT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlw
ZWRBcnJheUJhc2U8dWludDhfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJy
YXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZp
ZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50ODsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBpbmxpbmUgVWludDhBcnJheShQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAv
LyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xh
c3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+
IFVpbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJy
YXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhf
dD46OmNyZWF0ZTxVaW50OEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4oYnVmZmVyLCBieXRl
T2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxVaW50OEFycmF5PihsZW5n
dGgpOwotfQotCi1VaW50OEFycmF5OjpVaW50OEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotOiBJbnRlZ3Jh
bFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewot
fQotCi1QYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IFVpbnQ4QXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQot
UGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGlu
dCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxVaW50OEFycmF5PihzdGFy
dCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMu
aCIKIAogdXNpbmcgSlNDOjpVaW50OEFycmF5OwogCiAjZW5kaWYgLy8gVWludDhBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDhDbGFtcGVk
QXJyYXkuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVWludDhDbGFtcGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIsMTEyICsxMCwy
NSBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKICNpZm5kZWYgVWludDhDbGFtcGVkQXJyYXlfaAogI2RlZmluZSBVaW50OENsYW1w
ZWRBcnJheV9oCiAKLSNpbmNsdWRlICJVaW50OEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5IDog
cHVibGljIFVpbnQ4QXJyYXkgewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoY29uc3QgdWludDhf
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBi
ZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4g
RG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlw
dCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0K
LSAgICAvLyBJdCdzIG9ubHkgbmVlZGVkIHRvIHBvdGVudGlhbGx5IGNhbGwgdGhpcyBtZXRob2Qg
aWYgdGhlIGFycmF5Ci0gICAgLy8gd2FzIGNyZWF0ZWQgdW5pbml0aWFsaXplZCAtLSB0aGUgZGVm
YXVsdCBpbml0aWFsaXphdGlvbiBwYXRocwotICAgIC8vIHplcm8gdGhlIGFsbG9jYXRlZCBtZW1v
cnkuCi0gICAgaW5saW5lIHZvaWQgemVyb0ZpbGwoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OjpzZXQ7Ci0gICAgaW5saW5lIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBk
b3VibGUgdmFsdWUpOwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5
cGVVaW50OENsYW1wZWQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50OENsYW1w
ZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJj
bGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8dWludDhfdD47Ci19OwotCi1Q
YXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZTxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShjb25zdCB1aW50OF90KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90
Pjo6Y3JlYXRlPFVpbnQ4Q2xhbXBlZEFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50
OENsYW1wZWRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5pbml0aWFs
aXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQ4Q2xhbXBlZEFycmF5PihsZW5ndGgpOwotfQot
Ci12b2lkIFVpbnQ4Q2xhbXBlZEFycmF5Ojp6ZXJvRmlsbCgpCi17Ci0gICAgemVyb1JhbmdlKDAs
IGxlbmd0aCgpKTsKLX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJheTo6c2V0KHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgdmFsdWUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1fbGVuZ3RoKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKLSAgICAg
ICAgdmFsdWUgPSAwOwotICAgIGVsc2UgaWYgKHZhbHVlID4gMjU1KQotICAgICAgICB2YWx1ZSA9
IDI1NTsKLSAgICBkYXRhKClbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFs
dWUpKTsKLX0KLQotVWludDhDbGFtcGVkQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQotOiBVaW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1Q
YXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6c3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkp
OwotfQotCi1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBVaW50OENsYW1wZWRBcnJheTo6
c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJh
eUltcGw8VWludDhDbGFtcGVkQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5OwogCiAjZW5kaWYgLy8gVWludDhDbGFtcGVkQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQxNkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAg
LTI3LDc2ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQxNkFycmF5X2gKICNkZWZpbmUgVWludDE2QXJy
YXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQxNkFycmF5IDogcHVibGlj
IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IHVp
bnQxNl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDE2QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8dWludDE2X3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50MTZBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VHlwZVVpbnQxNjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQxNkFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAg
IGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD47Ci19OwotCi1QYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8VWludDE2QXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUo
Y29uc3QgdWludDE2X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihhcnJheSwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGU8
VWludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQ8VWludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQxNkFycmF5OjpVaW50
MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDE2
X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBVaW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDE2QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6
OlVpbnQxNkFycmF5OwogCiAjZW5kaWYgLy8gVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTEsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAg
LTI3LDc2ICsyNiw5IEBACiAjaWZuZGVmIFVpbnQzMkFycmF5X2gKICNkZWZpbmUgVWludDMyQXJy
YXlfaAogCi0jaW5jbHVkZSAiSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgQXJyYXlCdWZmZXI7Ci0KLWNsYXNzIFVpbnQzMkFycmF5IDogcHVibGlj
IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gY3JlYXRlKGNvbnN0IHVp
bnQzMl90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIC8vIFNob3VsZCBvbmx5IGJl
IHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgZmlsbGVkLiBE
bwotICAgIC8vIG5vdCByZXR1cm4gdGhlc2UgcmVzdWx0cyBkaXJlY3RseSB0byBKYXZhU2NyaXB0
IHdpdGhvdXQgZmlsbGluZyBmaXJzdC4KLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWlu
dDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8dWludDMyX3Q+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50MzJBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VHlwZVVpbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIFVpbnQzMkFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAg
IGZyaWVuZCBjbGFzcyBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD47Ci19OwotCi1QYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8VWludDMyQXJyYXk+KGxl
bmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUo
Y29uc3QgdWludDMyX3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihhcnJheSwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZShQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGU8
VWludDMyQXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQ8VWludDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVVpbnQzMkFycmF5OjpVaW50
MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJhc2U8dWludDMy
X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPFVpbnQz
MkFycmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBVaW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDMyQXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6
OlVpbnQzMkFycmF5OwogCiAjZW5kaWYgLy8gVWludDMyQXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcg
QEAKICNpbmNsdWRlICJQYXJzZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlZ0V4cENhY2hlLmgiCiAj
aW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCisjaW5jbHVkZSAiU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlckNhY2hlLmgiCiAjaW5jbHVkZSAiU3Ry
aWN0RXZhbEFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCkBAIC04Nyw2
ICs4OCw3IEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlDb25zdHJ1Y3RvclQKIGV4dGVy
biBjb25zdCBIYXNoVGFibGUgYXJyYXlQcm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNo
VGFibGUgYm9vbGVhblByb3RvdHlwZVRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBqc29u
VGFibGU7CitleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGFWaWV3VGFibGU7CiBleHRlcm4gY29u
c3QgSGFzaFRhYmxlIGRhdGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZUNvbnN0
cnVjdG9yVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGVycm9yUHJvdG90eXBlVGFibGU7
CkBAIC0xNDUsNiArMTQ3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBU
eXBlKQogICAgICwgYXJyYXlDb25zdHJ1Y3RvclRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6
OmFycmF5Q29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBhcnJheVByb3RvdHlwZVRhYmxlKGZhc3RO
ZXc8SGFzaFRhYmxlPihKU0M6OmFycmF5UHJvdG90eXBlVGFibGUpKQogICAgICwgYm9vbGVhblBy
b3RvdHlwZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmJvb2xlYW5Qcm90b3R5cGVUYWJs
ZSkpCisgICAgLCBkYXRhVmlld1RhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGFWaWV3
VGFibGUpKQogICAgICwgZGF0ZVRhYmxlKGZhc3ROZXc8SGFzaFRhYmxlPihKU0M6OmRhdGVUYWJs
ZSkpCiAgICAgLCBkYXRlQ29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpk
YXRlQ29uc3RydWN0b3JUYWJsZSkpCiAgICAgLCBlcnJvclByb3RvdHlwZVRhYmxlKGZhc3ROZXc8
SGFzaFRhYmxlPihKU0M6OmVycm9yUHJvdG90eXBlVGFibGUpKQpAQCAtMjU4LDYgKzI2MSwxMCBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgaWYgKGNhblVz
ZUpJVCgpKQogICAgICAgICBkZmdTdGF0ZSA9IGFkb3B0UHRyKG5ldyBERkc6OkxvbmdMaXZlZFN0
YXRlKCkpOwogI2VuZGlmCisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSB0aGlzIGxhc3QsIGFzIGEg
ZnJlZSB3YXkgb2YgYXNzZXJ0aW5nIHRoYXQgVk0gaW5pdGlhbGl6YXRpb24gaXRzZWxmCisgICAg
Ly8gd29uJ3QgdXNlIHRoaXMuCisgICAgbV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVm
KG5ldyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpKTsKIH0KIAogVk06On5WTSgpCkBAIC0y
ODksNiArMjk2LDcgQEAgVk06On5WTSgpCiAgICAgYXJyYXlQcm90b3R5cGVUYWJsZS0+ZGVsZXRl
VGFibGUoKTsKICAgICBhcnJheUNvbnN0cnVjdG9yVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAg
Ym9vbGVhblByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOworICAgIGRhdGFWaWV3VGFibGUt
PmRlbGV0ZVRhYmxlKCk7CiAgICAgZGF0ZVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVD
b25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGVycm9yUHJvdG90eXBlVGFibGUt
PmRlbGV0ZVRhYmxlKCk7CkBAIC0zMDYsNiArMzE0LDcgQEAgVk06On5WTSgpCiAgICAgZmFzdERl
bGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGFycmF5Q29uc3RydWN0b3JUYWJsZSkpOwogICAg
IGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihhcnJheVByb3RvdHlwZVRhYmxlKSk7
CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGJvb2xlYW5Qcm90b3R5cGVU
YWJsZSkpOworICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRhVmlld1Rh
YmxlKSk7CiAgICAgZmFzdERlbGV0ZShjb25zdF9jYXN0PEhhc2hUYWJsZSo+KGRhdGVUYWJsZSkp
OwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlQ29uc3RydWN0b3JU
YWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihlcnJvclByb3Rv
dHlwZVRhYmxlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNs
dWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRlICJU
eXBlZEFycmF5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVk
ZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CkBAIC02OSwxMyArNjksOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQ2FjaGU7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmll
cnM7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIEZsb2F0MzJBcnJheTsKLSAgICBj
bGFzcyBGbG9hdDY0QXJyYXk7CiAgICAgY2xhc3MgSGFuZGxlU3RhY2s7CiAgICAgY2xhc3MgSWRl
bnRpZmllclRhYmxlOwotICAgIGNsYXNzIEludDhBcnJheTsKLSAgICBjbGFzcyBJbnQxNkFycmF5
OwotICAgIGNsYXNzIEludDMyQXJyYXk7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CiAgICAgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgSlNPYmplY3Q7CkBAIC05MywxMCArODgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgY2xhc3Mg
UmVnRXhwOwogI2VuZGlmCi0gICAgY2xhc3MgVWludDhBcnJheTsKLSAgICBjbGFzcyBVaW50OENs
YW1wZWRBcnJheTsKLSAgICBjbGFzcyBVaW50MTZBcnJheTsKLSAgICBjbGFzcyBVaW50MzJBcnJh
eTsKICAgICBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKICAgICBjbGFzcyBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC0yMzAs
NiArMjIxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJy
YXlDb25zdHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90
eXBlVGFibGU7CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYm9vbGVhblByb3RvdHlwZVRhYmxl
OworICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGFWaWV3VGFibGU7CiAgICAgICAgIGNvbnN0
IEhhc2hUYWJsZSogZGF0ZVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVDb25z
dHJ1Y3RvclRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGVycm9yUHJvdG90eXBlVGFi
bGU7CkBAIC0zOTAsNiArMzgyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgTGVnYWN5
UHJvZmlsZXIqIG1fZW5hYmxlZFByb2ZpbGVyOwogICAgICAgICBPd25QdHI8UHJvZmlsZXI6OkRh
dGFiYXNlPiBtX3BlckJ5dGVjb2RlUHJvZmlsZXI7CisgICAgICAgIFJlZlB0cjxUeXBlZEFycmF5
Q29udHJvbGxlcj4gbV90eXBlZEFycmF5Q29udHJvbGxlcjsKICAgICAgICAgUmVnRXhwQ2FjaGUq
IG1fcmVnRXhwQ2FjaGU7CiAgICAgICAgIEJ1bXBQb2ludGVyQWxsb2NhdG9yIG1fcmVnRXhwQWxs
b2NhdG9yOwogCkBAIC00MjgsNTUgKzQyMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpIHsgcmV0dXJuIG1fbmV3U3RyaW5n
c1NpbmNlTGFzdEhhc2hDb25zID4gc19taW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zOyB9
CiAgICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnMoKSB7IG1fbmV3
U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zID0gMDsgfQogCi0jZGVmaW5lIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uKHR5cGUsIGNhcGl0YWxpemVkVHlwZSkgXAotICAgICAgICB2b2lkIHJlZ2lz
dGVyVHlwZWRBcnJheURlc2NyaXB0b3IoY29uc3QgY2FwaXRhbGl6ZWRUeXBlIyNBcnJheSosIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBcCi0gICAgICAgIHsgXAotICAg
ICAgICAgICAgQVNTRVJUKCFtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvIHx8
IG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8gPT0gZGVzY3JpcHRvci5tX2Ns
YXNzSW5mbyk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IgPSBkZXNj
cmlwdG9yOyBcCi0gICAgICAgICAgICBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyk7IFwKLSAgICAgICAgfSBcCi0gICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiB0eXBlIyNBcnJheURlc2NyaXB0b3IoKSBjb25zdCB7IEFTU0VSVChtXyMjdHlwZSMj
QXJyYXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvKTsgcmV0dXJuIG1fIyN0eXBlIyNBcnJheURlc2Ny
aXB0b3I7IH0KLQotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihpbnQ4LCBJbnQ4
KTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MTYsIEludDE2KTsKLSAg
ICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50MzIsIEludDMyKTsKLSAgICAgICAg
cmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDgsIFVpbnQ4KTsKLSAgICAgICAgcmVnaXN0
ZXJUeXBlZEFycmF5RnVuY3Rpb24odWludDhDbGFtcGVkLCBVaW50OENsYW1wZWQpOwotICAgICAg
ICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih1aW50MTYsIFVpbnQxNik7Ci0gICAgICAgIHJl
Z2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVpbnQzMiwgVWludDMyKTsKLSAgICAgICAgcmVnaXN0
ZXJUeXBlZEFycmF5RnVuY3Rpb24oZmxvYXQzMiwgRmxvYXQzMik7Ci0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGZsb2F0NjQsIEZsb2F0NjQpOwotI3VuZGVmIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uCi0gICAgICAgIAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoVHlwZWRBcnJheVR5cGUgdHlwZSkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5
cGVkQXJyYXlOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgY2Fz
ZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDhBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICAgICAg
ICAgIHJldHVybiAmaW50MTZBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZWRBcnJheUludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmaW50MzJBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgICAg
IHJldHVybiAmdWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRB
cnJheVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4Q2xhbXBlZEFy
cmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAg
ICAgICAgICAgICAgIHJldHVybiAmdWludDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50MzJB
cnJheURlc2NyaXB0b3IoKTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICZmbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgICAgIHJldHVybiAmZmxv
YXQ2NEFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygp
IGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX2FwaUxvY2stPmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdMb2NrKCkgfHwgZXhjbHVzaXZlVGhyZWFkID09IGN1cnJlbnRUaHJlYWQo
KTsKQEAgLTUxMCwxNiArNDU0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbV9p
bkRlZmluZU93blByb3BlcnR5OwogICAgICAgICBPd25QdHI8Q29kZUNhY2hlPiBtX2NvZGVDYWNo
ZTsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+IG1fZXhjZXB0aW9uU3RhY2s7
Ci0KLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9pbnQ4QXJyYXlEZXNjcmlwdG9yOwot
ICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDE2QXJyYXlEZXNjcmlwdG9yOwotICAg
ICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2ludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX3VpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcjsKLSAgICAg
ICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91aW50MTZBcnJheURlc2NyaXB0b3I7Ci0gICAgICAg
IFR5cGVkQXJyYXlEZXNjcmlwdG9yIG1fdWludDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBU
eXBlZEFycmF5RGVzY3JpcHRvciBtX2Zsb2F0MzJBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5
cGVkQXJyYXlEZXNjcmlwdG9yIG1fZmxvYXQ2NEFycmF5RGVzY3JpcHRvcjsKICAgICB9OwogCiAj
aWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDY4KQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMy0w
OC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFy
cmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVu
dC4KKyAgICAgICAgCisgICAgICAgIC0gQWRkZWQgdGhlIG5vdGlvbiBvZiBhIHJlZmVyZW5jZSBj
b3VudGVkIG9iamVjdCB0aGF0IGNhbiBiZSBtYXJrZWQgRGVmZXJyZWQsCisgICAgICAgICAgd2hp
Y2ggaXMgbGlrZSBhIHNwZWNpYWwtcHVycG9zZSB1cHJlZi4KKyAgICAgICAgCisgICAgICAgIC0g
QWRkZWQgYSBjb21tb24gYnl0ZSBmbGlwcGVyLgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291
cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpyZWYpOgorICAgICAgICAoV1RG
OjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6Omhhc09uZVJlZik6CisgICAgICAgIChXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZTo6cmVmQ291bnQpOgorICAgICAgICAoV1RGOjpEZWZlcnJh
YmxlUmVmQ291bnRlZEJhc2U6OmlzRGVmZXJyZWQpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxl
UmVmQ291bnRlZEJhc2U6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSk6CisgICAgICAgIChXVEY6
OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6fkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSk6Cisg
ICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkQmFzZTo6ZGVyZWZCYXNlKToKKyAgICAg
ICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpzZXRJc0RlZmVycmVkQmFzZSk6Cisg
ICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjpkZXJlZik6CisgICAgICAgIChXVEY6
OkRlZmVycmFibGVSZWZDb3VudGVkOjpzZXRJc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVm
ZXJyYWJsZVJlZkNvdW50ZWQ6OkRlZmVycmFibGVSZWZDb3VudGVkKToKKyAgICAgICAgKFdURjo6
RGVmZXJyYWJsZVJlZkNvdW50ZWQ6On5EZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgICog
d3RmL0ZsaXBCeXRlcy5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bmVlZFRvRmxpcEJ5dGVzSWZM
aXR0bGVFbmRpYW4pOgorICAgICAgICAoV1RGOjpmbGlwQnl0ZXMpOgorICAgICAgICAoV1RGOjpm
bGlwQnl0ZXNJZkxpdHRsZUVuZGlhbik6CisKIDIwMTMtMDgtMTQgIEp1bGllbiBCcmlhbmNlYXUg
IDxqYnJpYW5jZWF1QG5kcy5jb20+CiAKICAgICAgICAgREZHX0pJVCBpbXBsZW1lbnRhdGlvbiBm
b3Igc2g0IGFyY2hpdGVjdHVyZS4KSW5kZXg6IFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYv
RGVjaW1hbE51bWJlci5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuaCBc
CiAgICAgU291cmNlL1dURi93dGYvRGVjb2Rlci5oIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9EZWZl
cnJhYmxlUmVmQ291bnRlZC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9EaXNhbGxvd0NUeXBlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0RvdWJs
eUxpbmtlZExpc3QuaCBcCkBAIC01Miw2ICs1Myw3IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9GaWxlUHJpbnRTdHJlYW0uY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9G
aWxlUHJpbnRTdHJlYW0uaCBcCiAgICAgU291cmNlL1dURi93dGYvRml4ZWRBcnJheS5oIFwKKyAg
ICBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaCBcCiAgICAgU291cmNlL1dURi93dGYvRm9yd2Fy
ZC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuY3BwIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi9GdW5jdGlvbkRpc3BhdGNoZXIuaCBcCkluZGV4OiBTb3VyY2UvV1RGL1dU
Ri52Y3hwcm9qL1dURi52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2oJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XVEYvV1RGLnZjeHBy
b2ovV1RGLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQAogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERhdGVNYXRoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXERlY2ltYWxOdW1iZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcRGVjb2Rlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxEZWZlcnJhYmxlUmVmQ291bnRlZC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxEZXF1ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEaXNhbGxv
d0NUeXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERvdWJseUxpbmtl
ZExpc3QuaCIgLz4NCkBAIC0xNjQsNiArMTY1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxGZWF0dXJlRGVmaW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHd0ZlxGaWxlUHJpbnRTdHJlYW0uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3
dGZcRml4ZWRBcnJheS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxGbGlw
Qnl0ZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRm9yd2FyZC5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxGdW5jdGlvbkRpc3BhdGNoZXIuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRnVuY3Rpb25hbC5oIiAvPg0KSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0
MDY0KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsNiArMjIsOCBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CisJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBC
MEFEIC8qIFJhd1BvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07
CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTAxNzJFMDBG
MDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87IH07CiAJCTBGOEYyQjkyMTcyRTAx
MDMwMDdEQkRBNSAvKiBDb21waWxhdGlvblRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuY3BwICovOyB9OwpAQCAtMjgwLDYgKzI4Miw4IEBACiAKIC8qIEJlZ2lu
IFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAg
LyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjhGMkI4RjE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMkI5MDE3MkUwMEYwMDA3REJEQTUgLyogQ29tcGlsYXRpb25U
aHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGlsYXRpb25UaHJlYWQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYzMCw2ICs2MzQsNyBAQAogCQkJCUE4QTQ3MjdCMTUxQTgyNUEw
MDQxMjNGRiAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLywKIAkJCQlBOEE0NzI3QzE1MUE4MjVBMDA0
MTIzRkYgLyogRGVjaW1hbE51bWJlci5oICovLAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEwMDQxMjNG
RiAvKiBEZWNvZGVyLmggKi8sCisJCQkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVy
cmFibGVSZWZDb3VudGVkLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8qIERl
cXVlLmggKi8sCiAJCQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUu
aCAqLywKIAkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5o
ICovLApAQCAtNjQ4LDYgKzY1Myw3IEBACiAJCQkJMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5oICovLAogCQkJCUE4QTQ3MkEzMTUxQTgyNUEwMDQxMjNGRiAvKiBG
aXhlZEFycmF5LmggKi8sCisJCQkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRl
cy5oICovLAogCQkJCUE4QTQ3MkE2MTUxQTgyNUEwMDQxMjNGRiAvKiBGb3J3YXJkLmggKi8sCiAJ
CQkJQThBNDcyQTcxNTFBODI1QTAwNDEyM0ZGIC8qIEZ1bmN0aW9uYWwuaCAqLywKIAkJCQkxQTFE
OEI5RDE3MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCAqLywKQEAgLTk5
NCw2ICsxMDAwLDcgQEAKIAkJCQlBOEE0NzNGNjE1MUE4MjVCMDA0MTIzRkYgLyogT1NBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZBMTUxQTgyNUIwMDQxMjNGRiAvKiBPU1Jh
bmRvbVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRkIxNTFBODI1QjAwNDEyM0ZG
IC8qIE93bkFycmF5UHRyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBNjE3QjZCNEZCMDBB
N0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
M0ZDMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
M0ZEMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25QdHJDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0ZFMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTA1Nyw2ICsxMDY0LDcgQEAKIAkJCQlBOEE0NzQzMzE1MUE4MjVCMDA0MTIzRkYg
LyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NDE1MUE4MjVC
MDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0NzE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRh
dGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw3IEBAIHNldChXVEZfSEVBREVSUwog
ICAgIERhdGFMb2cuaAogICAgIERlY2ltYWxOdW1iZXIuaAogICAgIERlY29kZXIuaAorICAgIERl
ZmVycmFibGVSZWZDb3VudGVkLmgKICAgICBEZXF1ZS5oCiAgICAgRGlzYWxsb3dDVHlwZS5oCiAg
ICAgRG91Ymx5TGlua2VkTGlzdC5oCkBAIC0yOCw2ICsyOSw3IEBAIHNldChXVEZfSEVBREVSUwog
ICAgIEZlYXR1cmVEZWZpbmVzLmgKICAgICBGaWxlUHJpbnRTdHJlYW0uaAogICAgIEZpeGVkQXJy
YXkuaAorICAgIEZsaXBCeXRlcy5oCiAgICAgRm9yd2FyZC5oCiAgICAgRnVuY3Rpb25EaXNwYXRj
aGVyLmgKICAgICBGdW5jdGlvbmFsLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVS
ZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3Vu
dGVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyYWJsZVJlZkNvdW50ZWRf
aAorI2RlZmluZSBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIHZhcmlhbnQgb2YgUmVmQ291
bnRlZCB0aGF0IGFsbG93cyByZWZlcmVuY2UgY291bnRpbmcgdG8gYmUgZGVmZXJyZWQsCisvLyBh
bmQgY2FuIHRlbGwgeW91IGlmIHRoYXQgaGFzIGhhcHBlbmVkLiBZb3UgY2FuIHRoaW5rIG9mIGEg
ZGVmZXJyYWwgYXMKKy8vIGp1c3QgYmVpbmcgYW4gYWRkaXRpb25hbCAicmVmIiwgZXhjZXB0IHRo
YXQgeW91IGNhbiBkZXRlY3QgaWYgaXQgaGFzCisvLyBzcGVjaWZpY2FsbHkgaGFwcGVuZWQgLSB0
aGlzIGNhbiBiZSB1c2VmdWwgZWl0aGVyIGZvciBkZWJ1Z2dpbmcsIG9yCisvLyBzb21ldGltZXMg
ZXZlbiBmb3Igc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuCisKK2NsYXNzIERlZmVycmFi
bGVSZWZDb3VudGVkQmFzZSB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmVycmVkRmxh
ZyA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5vcm1hbEluY3JlbWVudCA9IDI7Cisg
ICAgCitwdWJsaWM6CisgICAgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAr
PSBub3JtYWxJbmNyZW1lbnQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzT25lUmVmKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWZDb3VudCgpID09IDE7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIHJlZkNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jl
ZkNvdW50IC8gbm9ybWFsSW5jcmVtZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGlzRGVmZXJy
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKG1fcmVmQ291bnQgJiBkZWZlcnJl
ZEZsYWcpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2UoKQorICAgICAgICA6IG1fcmVmQ291bnQobm9ybWFsSW5jcmVtZW50KQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgfkRlZmVycmFibGVSZWZDb3VudGVkQmFzZSgpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIGRlcmVmQmFzZSgpCisgICAgeworICAgICAgICBtX3JlZkNvdW50IC09
IG5vcm1hbEluY3JlbWVudDsKKyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKwor
ICAgIGJvb2wgc2V0SXNEZWZlcnJlZEJhc2UoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZSkgeworICAgICAgICAgICAgbV9yZWZDb3VudCB8PSBkZWZlcnJlZEZsYWc7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yZWZDb3VudCAmPSB+
ZGVmZXJyZWRGbGFnOworICAgICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIERlZmVycmFibGVSZWZDb3VudGVkIDogcHVibGljIERlZmVycmFibGVSZWZD
b3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJyYWJsZVJlZkNvdW50
ZWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGRlcmVmKCkK
KyAgICB7CisgICAgICAgIGlmIChkZXJlZkJhc2UoKSkKKyAgICAgICAgICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxUKj4odGhpcyk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2V0SXNEZWZlcnJlZChi
b29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFzZXRJc0RlZmVycmVkQmFzZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxU
Kj4odGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZCgpIHsgfQorICAgIH5EZWZlcnJhYmxlUmVmQ291bnRl
ZCgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGVmZXJyYWJs
ZVJlZkNvdW50ZWQ7CisKKyNlbmRpZiAvLyBEZWZlcnJhYmxlUmVmQ291bnRlZF9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvRmxpcEJ5dGVzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRmxpcEJ5dGVzX2gKKyNkZWZpbmUgRmxpcEJ5
dGVzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
aW5saW5lIGJvb2wgbmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oYm9vbCBsaXR0bGVFbmRp
YW4pCit7CisjaWYgQ1BVKEJJR19FTkRJQU4pCisgICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKKyNl
bHNlCisgICAgcmV0dXJuICFsaXR0bGVFbmRpYW47CisjZW5kaWYKK30KKworaW5saW5lIHVpbnQx
Nl90IGZsaXBCeXRlcyh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2YWx1ZSAmIDB4
MDBmZikgPDwgOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwKSA+PiA4KTsKK30KKworaW5s
aW5lIHVpbnQzMl90IGZsaXBCeXRlcyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKCh2
YWx1ZSAmIDB4MDAwMDAwZmYpIDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDBmZjAw
KSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwZmYwMDAwKSA+PiA4KQorICAgICAgICB8
ICgodmFsdWUgJiAweGZmMDAwMDAwKSA+PiAyNCk7Cit9CisKK2lubGluZSB1aW50NjRfdCBmbGlw
Qnl0ZXModWludDY0X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMDAw
MDAwMDAwZmZsbHUpIDw8IDU2KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDAwMGZm
MDBsbHUpIDw8IDQwKQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwMDBmZjAwMDBsbHUp
IDw8IDI0KQorICAgICAgICB8ICgodmFsdWUgJiAweDAwMDAwMDAwZmYwMDAwMDBsbHUpIDw8IDgp
CisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMDAwZmYwMDAwMDAwMGxsdSkgPj4gOCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMDAwMDAwMDAwbGx1KSA+PiAyNCkKKyAgICAgICAgfCAo
KHZhbHVlICYgMHgwMGZmMDAwMDAwMDAwMDAwbGx1KSA+PiA0MCkKKyAgICAgICAgfCAoKHZhbHVl
ICYgMHhmZjAwMDAwMDAwMDAwMDAwbGx1KSA+PiA1Nik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitpbmxpbmUgVCBmbGlwQnl0ZXMoVCB2YWx1ZSkKK3sKKyAgICBpZiAoc2l6ZW9mKHZhbHVl
KSA9PSAxKQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0g
MikgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAg
ICAgdWludDE2X3Qgd29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFs
dWU7CisgICAgICAgIHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4g
dS5vcmlnaW5hbDsKKyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gNCkgeworICAgICAg
ICB1bmlvbiB7CisgICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDMyX3Qg
d29yZDsKKyAgICAgICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAg
IHUud29yZCA9IGZsaXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsK
KyAgICB9CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gOCkgeworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBUIG9yaWdpbmFsOworICAgICAgICAgICAgdWludDY0X3Qgd29yZDsKKyAgICAg
ICAgfSB1OworICAgICAgICB1Lm9yaWdpbmFsID0gdmFsdWU7CisgICAgICAgIHUud29yZCA9IGZs
aXBCeXRlcyh1LndvcmQpOworICAgICAgICByZXR1cm4gdS5vcmlnaW5hbDsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVCgpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4oVCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCit7CisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxl
RW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHJldHVybiBmbGlwQnl0ZXModmFsdWUpOwor
ICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6
bmVlZFRvRmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47Cit1c2luZyBXVEY6OmZsaXBCeXRlczsKK3Vz
aW5nIFdURjo6ZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW47CisKKyNlbmRpZiAvLyBGbGlwQnl0ZXNf
aAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNzQgQEAKKzIwMTMtMDgtMTQgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hv
dWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisKKyAg
ICAgICAgVHlwZWQgYXJyYXlzIGFyZSBub3cgaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdENvcmUs
IGFuZCBXZWJDb3JlIGlzIG1lcmVseSBhCisgICAgICAgIGNsaWVudCBvZiB0aGVtLiBUaGVyZSBp
cyBvbmx5IG9uZSBsYXllcmluZyB2aW9sYXRpb246IFdlYkNvcmUgaW5zdGFsbHMgYQorICAgICAg
ICBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgb24gVk0sIHdoaWNoIG1ha2VzIHRoZQorICAg
ICAgICBBcnJheUJ1ZmZlcjwtPkpTQXJyYXlCdWZmZXIgcmVsYXRpb25zaGlwIHJlc2VtYmxlIERP
TSB3cmFwcGVycy4gQnkgZGVmYXVsdCwKKyAgICAgICAgSlNDIG1ha2VzIHRoZSBvd25lcnNoaXAg
Z28gb25lIHdheTsgdGhlIEpTQXJyYXlCdWZmZXIga2VlcHMgdGhlIEFycmF5QnVmZmVyCisgICAg
ICAgIGFsaXZlIGJ1dCBpZiBBcnJheUJ1ZmZlciBpcyBrZXB0IGFsaXZlIGZyb20gbmF0aXZlIGNv
ZGUgdGhlbiB0aGUKKyAgICAgICAgSlNBcnJheUJ5ZmZlciBtYXkgZGllLiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIgd2lsbCBrZWVwIHRoZQorICAgICAgICBKU0FycmF5QnVmZmVyIGFsaXZl
IGlmIHRoZSBBcnJheUJ1ZmZlciBpcyBpbiB0aGUgb3BhcXVlIHJvb3Qgc2V0LgorICAgICAgICAK
KyAgICAgICAgVG8gbWFrZSBub24tSlNET01XcmFwcGVycyBiZWhhdmUgbGlrZSBET00gd3JhcHBl
cnMsIGEgYnVuY2ggb2YgY29kZSBpcworICAgICAgICBjaGFuZ2VkIHRvIG1ha2UgbW9zdCByZWZl
cmVuY2VzIHRvIHdyYXBwZXJzIHJlZmVyIHRvIEpTT2JqZWN0KiByYXRoZXIgdGhhbgorICAgICAg
ICBKU0RPTVdyYXBwZXIqLgorICAgICAgICAKKyAgICAgICAgQXJyYXkgYnVmZmVyIHZpZXdzIGFy
ZSBub3cgdHJhbnNpZW50OyB0aGUgSlMgYXJyYXkgYnVmZmVyIHZpZXcgd3JhcHBlcnMKKyAgICAg
ICAgZG9uJ3Qgb3duIHRoZW0gb3Iga2VlcCB0aGVtIGFsaXZlLiBUaGlzIHJlcXVpcmVkIGEgYnVu
Y2ggb2YgY2hhbmdlcyB0byBtYWtlCisgICAgICAgIGJpbmRpbmdzIGNvZGUgdXNlIFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IHRvIGhvbGQgb250byB0aGVpciB2aWV3cy4KKyAgICAgICAgCisgICAg
ICAgIEFsc28gdGhlcmUgaXMgYSBidW5jaCBvZiBuZXcgY29kZSB0byBtYWtlIEpTQy1wcm92aWRl
ZCBhcnJheSBidWZmZXJzIGFuZAorICAgICAgICB2aWV3cyBvYmV5IHRoZSB0b0pTL3RvPENsYXNz
TmFtZT4gaWRpb20gZm9yIHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nLgorICAgICAgICAKKyAgICAg
ICAgRmluYWxseSwgdGhlIERhdGFWaWV3IEFQSSBpcyBub3cgY29tcGxldGVseSBkaWZmZXJlbnQ6
IHRoZSBKU0RhdGFWaWV3CisgICAgICAgIHByb3ZpZGVzIHRoZSBzYW1lIHVzZXItdmlzaWJsZSBK
UyBBUEkgYnV0IHVzaW5nIGl0cyBvd24gaW50ZXJuYWwgbWFnaWM7IHRoZQorICAgICAgICBDKysg
Y29kZSB0aGF0IHVzZXMgRGF0YVZpZXcgbm93IHVzZXMgYSByYXRoZXIgZGlmZmVyZW50IEFQSSB0
aGF0IGlzIG5vdAorICAgICAgICBhd2FyZSBvZiB1c3VhbCBET00gc2VtYW50aWNzLCBzaW5jZSBp
dCdzIGluIEpTQyBhbmQgbm90IFdlYkNvcmUuIEl0J3MKKyAgICAgICAgZXF1YWxseSB1c2VmdWwg
Zm9yIGFsbCBvZiBXZWJDb3JlJ3MgcHVycG9zZXMsIGJ1dCBzb21lIGNvZGUgaGFkIHRvIGNoYW5n
ZQorICAgICAgICB0byBhZGFwdCB0aGUgbmV3IGNvbnZlbnRpb25zLgorICAgICAgICAKKyAgICAg
ICAgU29tZSB0ZXN0cyBoYXZlIGJlZW4gY2hhbmdlZCBvciByZWJhc2VkIGR1ZSB0byBjaGFuZ2Vz
IGluIGJlaGF2aW9yLCB0aGF0CisgICAgICAgIGJyaW5nIHVzIGludG8gY29uZm9ybWFuY2Ugd2l0
aCB3aGVyZSB0aGUgc3RhbmRhcmRzIGFyZSBnb2luZyBhbmQgYWxsb3cgdXMgdG8KKyAgICAgICAg
bWF0Y2ggRmlyZWZveCBiZWhhdmlvci4KKworICAgICAgICBBdXRvbWFrZSB3b3JrIGFuZCBzb21l
IGFkZGl0aW9uYWwgR1RLIGNoYW5nZXMgY291cnRlc3kgb2YKKyAgICAgICAgWmFuIERvYmVyc2Vr
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtl
OgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQu
CisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyLmg6IEFk
ZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFW
aWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBl
ZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5
cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVBbmFseXNl
ci5oOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29y
bGQuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlck93bmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdldElubGluZUNhY2hlZFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpjbGVhcklubGluZUNhY2hlZFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpjYWNoZVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6dW5jYWNoZVdyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvQXJyYXlCdWZmZXJWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50OEFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MTZBcnJheSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0ludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50OEFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVWludDhDbGFtcGVkQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9V
aW50MTZBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQzMkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OnRvRmxvYXQzMkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvRmxvYXQ2NEFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvRGF0YVZpZXcpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRGljdGlvbmFyeS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5Lmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0RvY3VtZW50Ojpsb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0
ZUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MVGVtcGxhdGVFbGVt
ZW50Ojpjb250ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0eWxl
U2hlZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp0cmFuc2ZlckFycmF5QnVmZmVycyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6aW5pdE5vcm1hbFdv
cmxkQ2xpZW50RGF0YSk6CisgICAgICAgICogYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0
b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNB
cnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6
ZmluYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcjo6d3JhcHBlck93bmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG06CisgICAgICAgIChGb3JBbGxQYXJlbnRzKToKKyAgICAgICAgKFBhcnNlSW50ZXJm
YWNlKToKKyAgICAgICAgKFNraXBJbmNsdWRlSGVhZGVyKToKKyAgICAgICAgKElzVHlwZWRBcnJh
eVR5cGUpOgorICAgICAgICAoSXNXcmFwcGVyVHlwZSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChBZGRJbmNsdWRlc0ZvclR5cGUpOgor
ICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChHZXROYXRp
dmVUeXBlKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChOYXRpdmVUb0pT
VmFsdWUpOgorICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAg
ICAoR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMpOgorICAgICAgICAqIGZpbGVhcGkv
V2ViS2l0QmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmFw
cGVuZCk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0RhdGFWaWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9EYXRhVmlldy5o
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3LmlkbDogUmVtb3ZlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRt
bC9jYW52YXMvSW50MTZBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
SW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvSW50OEFycmF5
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsOiBSZW1vdmVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAq
IGh0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRGF0YSk6CisgICAgICAgICogcGFn
ZS9DcnlwdG8uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaG91bGRXYWl0Rm9yTG9h
ZGluZ09mUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6ZXh0cmFjdEtleVVSSUtleUlEQW5kQ2VydGlmaWNhdGVGcm9tSW5pdERh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6
CisgICAgICAgICogdGVzdGluZy9Nb2NrQ0RNLmNwcDoKKwogMjAxMy0wOC0xNCAgUm9iIEJ1aXMg
IDxyd2xidWlzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXNzZXJ0aW9uIGZhaWx1cmUgaW4gUmVu
ZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk5LDMxICs0OTksMTkgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAg
aHRtbC9WYWxpZGl0eVN0YXRlLmlkbAogICAgIGh0bWwvVm9pZENhbGxiYWNrLmlkbAogCi0gICAg
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCi0gICAgaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJW
aWV3LmlkbAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbAogICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsCiAg
ICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAogICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsCi0gICAgaHRtbC9jYW52YXMvRGF0YVZpZXcu
aWRsCiAgICAgaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwKICAgICBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5pZGwKICAgICBodG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
aWRsCi0gICAgaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAotICAgIGh0bWwv
Y2FudmFzL0ludDMyQXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAogICAg
IGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsCiAgICAgaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmlkbAogICAgIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aWRsCiAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsCiAgICAgaHRtbC9j
YW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MTZBcnJh
eS5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9V
aW50OEFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1
ZmZlci5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmlkbApJ
bmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zODIs
MzEgKzM4MiwxOSBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL1RpbWVS
YW5nZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAogICAg
ICQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJh
eUJ1ZmZlclZpZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0gICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvRE9NUGF0aC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1
ZmZlcnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYy5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKLSAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L0ludDhBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0Lmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwg
XAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9VaW50OEFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50
OENsYW1wZWRBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3Rp
dmVJbmZvLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5p
ZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQwNjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMCArMzAsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNBYnN0cmFjdFdvcmtlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNBYnN0cmFjdFdvcmtlci5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZm
ZXIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZmZXIuaCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyVmlldy5jcHAgXAotCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0F0dHIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXR0ci5oIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTQXVkaW9CdWZmZXIuY3BwIFwKQEAgLTE1Niw4ICsxNTIsNiBA
QCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNE
YXRhVHJhbnNmZXJJdGVtLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJhbnNmZXJJ
dGVtTGlzdC5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuY3BwIFwKLQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNEZWxheU5vZGUuY3BwIFwKQEAgLTI4OCwxMCArMjgyLDYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmlsZVdyaXRlckNh
bGxiYWNrLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5jcHAg
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5oIFwKLQlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTRmxvYXQzMkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0Zsb2F0MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmxvYXQ2
NEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zsb2F0NjRBcnJheS5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9jdXNFdmVudC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNGb2N1c0V2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNG
b250TG9hZGVyLmNwcCBcCkBAIC00ODksMTIgKzQ3OSw2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNl
cyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luamVjdGVkU2NyaXB0SG9zdC5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKLQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSW50MTZBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbnQzMkFy
cmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDMyQXJyYXkuaCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDhBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJbnQ4QXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NjcmlwdFBy
b2Nlc3Nvck5vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU2NyaXB0UHJvY2Vz
c29yTm9kZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAgXApAQCAtNzU5LDE0ICs3NDMsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAog
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNUcmVlV2Fsa2VyLmggXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVSUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VJRXZl
bnQuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmNwcCBcCi0JRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNVaW50MzJBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50
MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDhBcnJheS5jcHAgXAot
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50OEFycmF5LmggXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNVaW50OENsYW1wZWRBcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVmFs
aWRpdHlTdGF0ZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWYWxpZGl0eVN0YXRl
LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWb2lkQ2FsbGJhY2suY3BwIFwKQEAgLTE1
NDMsMzEgKzE1MTksMTkgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9odG1s
L1RpbWVSYW5nZXMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAog
CSQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL0FycmF5QnVmZmVyLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZl
clZpZXcuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbCBc
CiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAJJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9EYXRh
Vmlldy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwgXAogCSQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXAotCSQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9h
dDY0QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwK
LQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL0ludDhBcnJheS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUZsb2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwgXAotCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OEFy
cmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCiAJJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApAQCAtMjMzNCw5ICsyMjk4LDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
aCBcCi0JU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBcCkBA
IC0yMzg4LDcgKzIzNTAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XcmFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XcmFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0
b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZp
Y2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXApAQCAtMjU0MSw2ICsyNTAyLDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dv
cmtlclNjcmlwdENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKQEAgLTMzMTksOCArMzI4Miw2IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmggXAotCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRGF0YVZpZXcuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRE9NUGF0aC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvVXNlSlNDLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpT
Qy5jbWFrZQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
T1VSQ0VTCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdz
L2pzL0RpY3Rpb25hcnkuY3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAotICAg
IGJpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNB
dWRpb0J1ZmZlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ0RBVEFT
ZWN0aW9uQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNDU1NGb250RmFjZVJ1bGVDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNDU1NJbXBvcnRSdWxlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ1NTTWVkaWFS
dWxlQ3VzdG9tLmNwcApAQCAtMTUwLDYgKzE0OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAogICAgIGJpbmRpbmdzL2pzL1Nj
cmlwdFZhbHVlLmNwcAogICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KyAgICBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCiAKICAgICBi
cmlkZ2UvSWRlbnRpZmllclJlcC5jcHAKICAgICBicmlkZ2UvTlBfanNvYmplY3QuY3BwCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNiBAQCBfX1pON1dl
YkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQCiBfX1pON1dlYkNvcmUxMmRlbGV0ZUNv
b2tpZUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfNEtVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRh
YmFzZUV2Ci1fX1pON1dlYkNvcmUxMnRvVWludDhBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdX
ZWJDb3JlMTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYKIF9fWk43V2ViQ29yZTEzQVhPYmpl
Y3RDYWNoZTE4cm9vdE9iamVjdEZvckZyYW1lRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxM0FY
T2JqZWN0Q2FjaGUyMWdBY2Nlc3NpYmlsaXR5RW5hYmxlZEUKQEAgLTI4OCw3ICsyODcsNiBAQCBf
X1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTCiBfX1pON1dlYkNvcmUxM2Rp
cmVjdG9yeU5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxM2xpc3REaXJlY3RvcnlF
UktOM1dURjZTdHJpbmdFUzNfCiBfX1pON1dlYkNvcmUxM3BvaW50ZXJDdXJzb3JFdgotX19aTjdX
ZWJDb3JlMTN0b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM3RvSFRN
TEVsZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pT
RE9NV2luZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJy
ZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkBAIC05MDcsNyArOTA1LDYg
QEAgX19aTjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9fWk43V2Vi
Q29yZTRjb3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0Y29yZUVQMjhO
U1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi1fX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhl
Y1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOUzBfMTFBcnJheUJ1ZmZlckUKIF9fWk43
V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5T
XzEwQ2xpZW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3
SlNET01HbG9iYWxPYmplY3RFUE5TXzEzRE9NU3RyaW5nTGlzdEUKIF9fWk43V2ViQ29yZTR0b0pT
RVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE0Q2xpZW50UmVj
dExpc3RFCkBAIC0yNzQzLDcgKzI3NDAsNiBAQCBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQxNnJldHVyblRvCiBfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTJpc0Z1bGxzY3Jl
ZW5FdgogX19aTjdXZWJDb3JlMTBUaW1lUmFuZ2VzM2FkZEVkZAogX19aTjdXZWJDb3JlMTJ0b1Rp
bWVSYW5nZXNFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTE0dG9GbG9hdDMyQXJyYXlFTjNK
U0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNE
T01HbG9iYWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0UKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5n
ZXM3bmVhcmVzdEVkCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjZGVmaW5l
IFdlYkNvcmVfRldEX0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EYXRhVmll
dy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0pTQXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZl
cl9oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQXJyYXlCdWZmZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBA
CisjaWZuZGVmIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgV2ViQ29y
ZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJy
YXlCdWZmZXJWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3
X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNEYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNEYXRhVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBl
ZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9G
V0RfSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTVHlwZWRBcnJheXNfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJheXMuaD4KKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlD
b250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlDb250cm9sbGVyLmg+CisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJh
eUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5SW5s
aW5lc3NfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5SW5saW5lc3NfaAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVk
QXJyYXlzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lm
bmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVk
QXJyYXlzX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgorI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXIuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwx
MiBAQAogI2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXku
aCIKKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
VWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIEZsb2F0MzJBcnJheTsKLWNsYXNzIFVpbnQ4QXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9CdXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE3NDI4LDYgKzE3NDI4LDIwIEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYmluZGluZ3NcanNcV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCI+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
PC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVk
ZWRGcm9tQnVpbGQ+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2
ICsyNDIsOCBAQAogCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1M
b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQzQ1MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAg
Ki87IH07CiAJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1
MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9Owog
CQkwRjA5MDg3RjE0NDRGREIyMDAwMjg5MTcgLyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAw
REIzM0JBIC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAw
RkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0Qjkg
LyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5
NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4
NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAv
KiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9u
SW5mby5oICovOyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyB9OwogCQkw
RjEzMTY0MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RF
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04MjgsMTEgKzgz
MCw2IEBACiAJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1
ODQxQzEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovOyB9Owog
CQkyRTk0RjQzQjExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3
Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3
NUQgLyogSlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87
IH07Ci0JCTJFOTdDQ0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEyOTM5Q0I4MDBD
NUM4RkYgLyogRGF0YVZpZXcuY3BwICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYg
LyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFOTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9OwotCQkyRTk3
Q0NGNzEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4
RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5M0FENkIwMEM1
QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAq
LzsgfTsKLQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZFMTI5M0FENkIw
MEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4
QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8q
IEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFu
ZGxlLmNwcCAqLzsgfTsKIAkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJj
ZUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OwpA
QCAtMTI4OCw4ICsxMjg1LDYgQEAKIAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QjM3NjBCMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJCTQ5QzdCOTkz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMQnVmZmVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07Ci0J
CTQ5QzdCOTk1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovOyB9Owog
CQk0OUM3Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg0MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNXZWJHTEZyYW1lYnVmZmVyLmggKi87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3Bw
ICovOyB9OwpAQCAtMTM1MCwyMiArMTM0NSw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVD
RUI2RjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3OTBEMDBDREQz
QTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5OTc5MEQwMENE
RDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmgg
Ki87IH07Ci0JCTQ5RUVDRjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEw
NTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwMzEw
NTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zs
b2F0MzJBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQz
MkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovOyB9OwotCQk0
OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBK
U0ludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi87IH07
Ci0JCTQ5RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0ludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAq
LzsgfTsKLQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkIxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQz
MkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJ
NDlFRUNGMEIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1VpbnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAq
LzsgfTsKLQkJNDlFRUNGMEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZGMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwICovOyB9OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNB
cnJheUJ1ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUVEMTQy
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQz
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBAIC0xODI3LDgg
KzE4MDYsNiBAQAogCQk2RTY3RDJBNjEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3Bl
bkdMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
NjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovOyB9Owog
CQk2RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBNTEyODBFOEE0
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi87IH07CiAJCTZFNjdEMkE5MTI4MEU4
QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25z
M0QuaCAqLzsgfTsKLQkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1
RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi87IH07Ci0JCTZFQkM1
RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8q
IEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZFQkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBP
RVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAg
Ki87IH07CiAJCTZFQkYwRTQ5MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ2MTJB
ODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNTQxMkE4
OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTUyMTJBODkyOTgwMERCMTcwOSAvKiBXZWJH
TEV4dGVuc2lvbi5jcHAgKi87IH07CkBAIC0yNTg5LDcgKzI1NjYsNiBAQAogCQk4NUZGMzE1QjBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50Lm1tICovOyB9OwogCQk4NjFDMkVBNDEzRkI0RkREMDAwNjJBQkIgLyog
RG9jdW1lbnRMb2FkVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1p
bmcuY3BwICovOyB9OwogCQk4NjFDMkVBNjEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2Fk
VGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovOyB9
OwotCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjQzRDAw
MTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovOyB9OwogCQk4
NjUxMkVERTE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQjE1
NEEyQUVFMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgKi87IH07CiAJ
CTg2NTEyRURGMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQzE1
NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovOyB9OwogCQk4
NkJBNzY2RTE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkJBNzY2RDE2NjQyN0E4MDA1
QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAgKi87IH07CkBAIC0yNzAzLDggKzI2NzksNiBA
QAogCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0Ux
MkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKIAkJOTAw
MTc4ODAxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3RTEyRTAz
NzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLzsgfTsKIAkJOTAw
MTc4ODExMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4N0YxMkUwMzcw
NzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwotCQk5MTA4OUQz
MjE0QzMzNjAwMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5
IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsgfTsKLQkJOTEwODlEMzMxNEMzMzYwNTAwNUFG
QzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuY3BwICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFn
ZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAy
QjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFn
ZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyog
VGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNDY1NSw3ICs0NjI5LDYgQEAKIAkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZS5oICovOyB9OwogCQlCQzI3NEIzMTE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMjc0QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuY3BwICovOyB9OwogCQlCQzI3NUI3OTExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQ
b2ludEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzI3NUI3ODExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAg
Ki87IH07Ci0JCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1
Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJ
QkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjk5MzVDMTdBMURENTgwMEJD
RTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi87IH07CiAJCUJDMkNCRjRFMTQwRjFBQkQwMDM4
NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENv
bnRleHRFdmVudC5oICovOyB9OwogCQlCQzJDQkY3QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJH
TENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzJDQkY3QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5j
cHAgKi87IH07CkBAIC02NDgwLDYgKzY0NTMsOCBAQAogCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJD
RTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlv
bi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI1MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA2MTdC
OTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4
NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVj
dGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0
aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsgcGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0Mw
NCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRm
b3JtQ0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzEzNCwx
MiArNzEwOSw2IEBACiAJCTJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9h
ZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJM
b2FkZXJDbGllbnQuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyog
SlNGaWxlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RmlsZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDNBMTE5
MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNGaWxlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJF
OTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhVmlldy5jcHA7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4
RkYgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YVZp
ZXcuaDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IERhdGFWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBK
U0RhdGFWaWV3Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRGF0YVZpZXdDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3
Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU5N0NFNkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9h
ZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlw
dExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1
IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY1NCw4ICs3NjIzLDYgQEAKIAkJNDlCMzc2MEIx
NUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJyYXlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3
Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJ
bnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MzEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODQx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZy
YW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFt
ZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4ODEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTFByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNzY2OSw3ICs3NjM2LDYgQEAKIAkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdl
YkdMQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
QnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEJ1ZmZlci5oOyBwYXRoID0g
Y2FudmFzL1dlYkdMQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdC
OUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV2ViR0xCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIElu
dDhBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50OEFycmF5LmlkbDsgcGF0aCA9
IGNhbnZhcy9JbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3
QjlBRTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5
QjAxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzcyNSwzMCArNzY5MSw2
IEBACiAJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBm
aWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9
IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuaDsgcGF0aCA9IGZp
bHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OUVFQ0RDOTEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXJWaWV3LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBBcnJheUJ1ZmZlclZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVm
ZmVyVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENDMTA1MDND
MjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJy
YXlCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJh
eS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQzMkFycmF5LmlkbDsgcGF0aCA9IGNh
bnZhcy9GbG9hdDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0REMjEwNTAzQzIzMDAwOTlGQUIgLyogSW50MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gSW50MzJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvSW50MzJBcnJheS5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQx
NkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQxNkFycmF5LmlkbDsgcGF0aCA9
IGNhbnZhcy9JbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlF
RUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IFVpbnQ4QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQ4QXJyYXkuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWlu
dDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQzMkFycmF5LmlkbDsgcGF0
aCA9IGNhbnZhcy9VaW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBVaW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gVWludDE2QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1VpbnQxNkFycmF5Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
RUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
RmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQz
MkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNJbnQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ludDE2QXJyYXkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJ
bnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlG
QUIgLyogSlNVaW50OEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTVWludDhBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
RUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDMyQXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50
MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZB
QiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTVWludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVF
RDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC04MjM4LDkgKzgxODAsNiBAQAogCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5z
aW9uczNET3BlbkdMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
dGVuc2lvbnMzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFNjdE
MkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9h
dDY0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBh
dGggPSBjYW52YXMvRmxvYXQ2NEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxv
YXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJBODkyNjEwMERC
MTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxv
YXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEyQTg5MjYxMDBE
QjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9FU1RleHR1cmVGbG9hdC5oOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBEQjE3MDkgLyog
T0VTVGV4dHVyZUZsb2F0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxv
YXQuaWRsOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04OTc4LDcgKzg5MTcsNiBAQAogCQk4NUZGMzE1OTBBQUZCRkNCMDAz
NzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjFDMkVBMzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZFRpbWlu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNGQjRGRkYwMDA2
MkFCQiAvKiBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3
SGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURCMTU0QTJBRUUw
MEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2NTEyRUREMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5n
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkxMTMsOSArOTA1MSw2IEBACiAJCTkw
MDE3NzNGMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgcGF0aCA9IGNh
bnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTAwMTc4N0UxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RjEy
RTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50
OENsYW1wZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1VpbnQ4Q2xhbXBlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEw
ODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk5MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFt
cGVkQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9V
aW50OENsYW1wZWRBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJC
MEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTM0Miw3ICsxMTI3Nyw2IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMjc0QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzVCNzgxMUM1
RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVm
ZmVyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJy
YXlCdWZmZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI5OTM1
QzE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzJDQkY0QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4
NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQwMjUsOCArMTM5NTksNiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdE
RDMgLyogY2FudmFzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLAotCQkJ
CTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovLAogCQkJ
CTZFNEU5MUE3MTBGN0ZCMzEwMEEyNzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAg
Ki8sCiAJCQkJNkU0RTkxQTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1
dGVzLmggKi8sCiAJCQkJNDk0ODRGQjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50
LmNwcCAqLywKQEAgLTE0MDQ3LDkgKzEzOTc5LDYgQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0Yy
M0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5MzlDQjgwMEM1
QzhGRiAvKiBEYXRhVmlldy5jcHAgKi8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8q
IERhdGFWaWV3LmggKi8sCi0JCQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3
LmlkbCAqLywKIAkJCQlGQjkxMzkyMDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovLAog
CQkJCUZCOTEzOTIxMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywKIAkJCQlBMDI0
NTc0RTE2Q0VBQTI3MDAwRTU2NzEgLyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApAQCAtMTQwNTgs
MTEgKzEzOTg3LDYgQEAKIAkJCQk3NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1MDBGNDg0REMg
LyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5NEQxNEY4ODgy
NTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8sCi0JCQkJNDlF
RUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0JCQkJNkVCQzVE
ODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDUx
MDUwM0MyMzAwMDk5RkFCIC8qIEludDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQyMTA1MDND
MjMwMDA5OUZBQiAvKiBJbnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEwNDJEMzJFMDAw
OUQ0NDcgLyogSW50OEFycmF5LmlkbCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQg
LyogT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2
QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEyRTAzNDc4MDA2
NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA3NywxMCArMTQw
MDEsNiBAQAogCQkJCTc3QTE3QTZFMTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9i
amVjdC5jcHAgKi8sCiAJCQkJNzdBMTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFy
cmF5T2JqZWN0LmggKi8sCiAJCQkJNzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRl
eEFycmF5T2JqZWN0LmlkbCAqLywKLQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWlu
dDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJB
cnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXku
aWRsICovLAotCQkJCTkxQTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJh
eS5pZGwgKi8sCiAJCQkJQTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5m
by5oICovLAogCQkJCUE3RDIwRjNCMTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8u
aWRsICovLAogCQkJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAg
Ki8sCkBAIC0xNjY0NSwxMCArMTY1NjUsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAwQjA4MjUg
LyogSFRNTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
NDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAotCQkJCTQ5
RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0JCQkJNDlFRUNG
MTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKLQkJCQk0OUVF
Q0YxQTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQlCRThF
RjAzRTE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJCQlCRThFRjAz
RjE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4RUYwNDAxNzFD
OEZGOTAwOUI0OEMzIC8qIEpTQXVkaW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2NjIsOCArMTY1
NzgsNiBAQAogCQkJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCAqLywKIAkJCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZEMTI5M0FENkIw
MEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4
RkYgLyogSlNEYXRhVmlldy5oICovLAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBK
U0RPTUZvcm1EYXRhLmNwcCAqLywKIAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUgLyogSlNE
T01Gb3JtRGF0YS5oICovLAogCQkJCUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBh
dGguY3BwICovLApAQCAtMTY2NzgsMTAgKzE2NTkyLDYgQEAKIAkJCQk2RUJGMEU3NTEyQTk4Njg4
MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgxMTRGRDlBREEw
MEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcy
ODY5ODIxNEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgg
Ki8sCi0JCQkJNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAq
LywKLQkJCQk0OUVFQ0VGNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLywK
LQkJCQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovLAot
CQkJCTZFQkM1RUFFMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAogCQkJ
CUJDOTdFNDEwMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywK
IAkJCQlCQzk3RTQxMTEwOTE1NEZBMDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oICov
LAogCQkJCTFBNEEyREVCMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNw
cCAqLywKQEAgLTE2ODM1LDEyICsxNjc0NSw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2ODI2OTAwRkFE
QTc1IC8qIEpTSFRNTFZpZGVvRWxlbWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4
NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5
IC8qIEpTSW1hZ2VEYXRhLmggKi8sCi0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
SW50MTZBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MTZBcnJheS5oICovLAotCQkJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJy
YXkuY3BwICovLAotCQkJCTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXku
aCAqLywKLQkJCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICov
LAotCQkJCTQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovLAogCQkJ
CUNEMjdGNkUyMTQ1NzY3NTgwMDc4MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJ
CQkJQ0QyN0Y2RTMxNDU3Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmggKi8sCiAJ
CQkJRTQ0NjE0MTAwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAgKi8sCkBAIC0x
Njg3MywxNCArMTY3NzcsNiBAQAogCQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1Rp
bWVSYW5nZXMuaCAqLywKIAkJCQkwNzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2
ZW50LmNwcCAqLywKIAkJCQkwNzg0NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50
LmggKi8sCi0JCQkJNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3Bw
ICovLAotCQkJCTQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8s
Ci0JCQkJNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovLAot
CQkJCTQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCi0JCQkJ
NDlFRUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlF
RUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTkxMDg5RDJG
MTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywKLQkJCQk5MTA4
OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTE1
Qzc3MDkyMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovLAogCQkJCTE1
Qzc3MDkxMTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywKIAkJCQlCRThF
RjA0NjE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAgLTE4NzgwLDYg
KzE4Njc2LDggQEAKIAkJCQlBNzVFNDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCAqLywKIAkJCQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmggKi8sCiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdl
YkNvcmVKU0NsaWVudERhdGEuaCAqLywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyog
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQwNzE3Qjk2OEEx
MDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJRTFBNjQz
RkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJ
CUUxQTY0M0YxMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8s
CiAJCQkJRjM0NzQyRTYxMzQzNjM1MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVy
LmNwcCAqLywKQEAgLTE4ODM1LDggKzE4NzMzLDYgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VE
RDQ5IC8qIEN1c3RvbSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3Bw
ICovLAotCQkJCTg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oICovLAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20u
Y3BwICovLAogCQkJCUNEREU2OTFEMTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlvQnVmZmVyQ3Vz
dG9tLmNwcCAqLywKIAkJCQlGREVBQUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZl
clNvdXJjZU5vZGVDdXN0b20uY3BwICovLApAQCAtMTg4NjIsNyArMTg3NTgsNiBAQAogCQkJCUFE
NzI2RkVBMTZEOUY0MEIwMDNBNEU2RCAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCAq
LywKIAkJCQlFMUFEMTRFNzEyOTczNzc0MDBBQ0E5ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20u
Y3BwICovLAogCQkJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9t
LmNwcCAqLywKLQkJCQkyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3Rv
bS5jcHAgKi8sCiAJCQkJNDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwICovLAogCQkJCTMxRkIxQTZCMTIwQTVENjkwMERDMDJB
MCAvKiBKU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk1OTBFMUI0QTExRTRF
RjcwMDA2OUY3ODQgLyogSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKQEAg
LTIxMzIxLDcgKzIxMjE2LDYgQEAKIAkJCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0
YXNldERPTVN0cmluZ01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OTkxMzE2MzZFNjAw
MDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTlB
MTMxNjM2RTYwMDA5QTdFMCAvKiBEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMkU5N0NDRUIxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTczMkIwQjEzNkExNjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY1NUIzREI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRp
bWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLApAQCAtMjE4MzAsNiArMjE3MjQsNyBAQAogCQkJCTg5
M0M0ODBGMTI0OEJEM0EwMDJCM0Q4NiAvKiBGaWxlRW50cnlTeW5jLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzZENkM4MzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRURGMzY5RjEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYwOTlEMDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3
NEY5IC8qIEZpbGVJY29uTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCRTEyNTFG
MTJEMDAzRUYyNjkgLyogRmlsZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZD
ODYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjM5
LDkgKzIyMTM0LDYgQEAKIAkJCQkxQzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlw
dENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1
IC8qIEpTQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNBMTJCMDNG
NTAwMDNBNTgzQSAvKiBKU0FuYWx5c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNG
MDExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTQ5RUVDRjFDMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJODYyNDNEMDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3
SGVscGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyog
SlNBdHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyog
SlNBdWRpb0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAwQTUx
RUFDIC8qIEpTQXVkaW9CdWZmZXJDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMwMiw3
ICsyMjE5NCw2IEBACiAJCQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUI1OURENjk5MTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFi
YXNlQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5
MCAvKiBKU0RhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NFNzAxMjkzQUQ2
QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDU4MTAx
MTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGREExNUVEMjEyQjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxRkIxQTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzc1LDggKzIyMjY2LDYgQEAKIAkJCQk4OTg3
ODVCMzEyMkNBMkE3MDAzQUFCREEgLyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ2REE4NDRFMTIyNEEwNzEwMDYwRDAwNiAvKiBKU0ZpbGVXcml0ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg5M0M0N0JDMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk2RUJDNUVCMDEzOEI1MEYyMDBB
MENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjdCMTRF
QUMwODYwMDkwRDc1RSAvKiBKU0ZvY3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVC
REMwMTZCN0YzOEUwMENCQTNGQyAvKiBKU0ZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZEQTE1RUFDMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0dhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywK
QEAgLTIyNDc3LDkgKzIyMzY2LDYgQEAKIAkJCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyog
SlNJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBMEU3NkRCMTBCRjA1OTgwMEEwMjc2
RSAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MUYx
MEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUVFQ0YwNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDNUZBRUQyMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0ph
dmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUQzMDlEQTJCNDgw
MDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUY0NTQz
MEY3QzNCNUYwMEQ3QzFGQiAvKiBKU0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTIyNzI5LDEwICsyMjYxNSw2IEBACiAJCQkJRTE3QjQ5MjExNkE5QjhGRjAwMUM4ODM5IC8q
IEpTVHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ1RDBBOTBERUUx
MDAwRkYyMTUgLyogSlNUcmVlV2Fsa2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlDRjA5
REEyQjQ3MDA5NjMzQTUgLyogSlNVSUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
RDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlFRUNGMEIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAotCQkJCTQ5RUVDRjA5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTkxMDg5RDMyMTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQUE0RkFEMjE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNV
SVJlcXVlc3RFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJB
MjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFD
OTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDczMiw3
ICsyNDYxNCw2IEBACiAJCQkJOTdCQzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBE
YXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAw
NjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5
N0NDRUExMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE1NzMyQjBBMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGNTVCM0RCNTEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJ
bnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTM4OCw5ICsyNTI2OSw2IEBACiAJCQkJ
MUM4MUJBMDkwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE4Rjg4MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3Jr
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpT
QW5hbHlzZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjAwMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjc1Q0IzMTFD
NUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk2NURGMzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFOUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpT
QXVkaW9CdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTQ3MCw4ICsyNTM0OCw2IEBACiAJ
CQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRh
YmFzZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZG
IC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAw
QzVDOEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0
NTcxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDEx
MkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1
NDMsOCArMjU0MTksNiBAQAogCQkJCTg5ODc4NUY0MTIyRTFFQUMwMDNBQUJEQSAvKiBKU0ZpbGVS
ZWFkZXJTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5ODc4NUIyMTIyQ0EyQTcwMDNBQUJE
QSAvKiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdC
QjEyMzhBMEE5MDAyQjNEODYgLyogSlNGaWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNDlFRUNGMDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRB
cnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDI3QzE0RUFDMDg2MDA5MEQ3NUUgLyog
SlNGb2N1c0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUFCMTJCMDNFRTEwMDNB
NTgzQSAvKiBKU0dhaW5Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBEQTYzMEU5QzQ3
MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2MDMs
NiArMjU0NzcsNyBAQAogCQkJCUE2MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXln
ZW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIy
NSAvKiBKU0hUTUxMYWJlbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMw
QTFDRTYzQjAwQjQyQjI1IC8qIEpTSFRNTExlZ2VuZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyog
SlNIVE1MTElFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYw
MDdGQjhDNSAvKiBKU0hUTUxMaW5rRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFE
MTM5QjEyOTVEOTI2MDBBQ0E5ODkgLyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNTY1Nyw5ICsyNTUzMiw2IEBACiAJCQkJRjMxNjM5NkUxMzI5NDg3NjAw
QTY0OUNCIC8qIEpTSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdBMEU3NzFFMTBDMDBEQjEwMEEwMjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0
b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDYxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5QzdCOTk1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBK
U0phdmFTY3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5
RDQwOURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI1OTQxLDEwICsyNTgxMyw2IEBACiAJCQkJMUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8q
IEpTVHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1
MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYy
OUQwMDlEQTJCNDgwMDk2MzNBNSAvKiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDlFRUNGMEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNDlFRUNGMEExMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNV
aW50OENsYW1wZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQUE0RkFEMzE3NUQ1Q0Iz
MDA3NDM4NzMgLyogSlNVSVJlcXVlc3RFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3
NzA5NDEwMEQzQ0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJFOEVGMDRBMTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29y
bGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVy
V29ybGQuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
RE9NV3JhcHBlcldvcmxkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3Mg
Q1NTVmFsdWU7CiBjbGFzcyBKU0RPTVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwog
Ci10eXBlZGVmIEhhc2hNYXA8dm9pZCosIEpTQzo6V2VhazxKU0RPTVdyYXBwZXI+ID4gRE9NT2Jq
ZWN0V3JhcHBlck1hcDsKK3R5cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTQzo6SlNP
YmplY3Q+ID4gRE9NT2JqZWN0V3JhcHBlck1hcDsKIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3Ry
aW5nSW1wbCosIEpTQzo6SlNTdHJpbmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+ID4gSlNTdHJpbmdD
YWNoZTsKIAogY2xhc3MgRE9NV3JhcHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3Jh
cHBlcldvcmxkPiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVm
ZmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0FycmF5QnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
U0FycmF5QnVmZmVyLmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9BcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBcnJh
eUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMt
PmNhbGxlZSgpKTsKLQotICAgIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPiAwKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMy
KGV4ZWMpOyAvLyBOYU4vK2luZi8taW5mIHJldHVybnMgMCwgdGhpcyBpcyBpbnRlbmRlZCBieSBX
ZWJJREwKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoID49
IDApCi0gICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGxlbmd0aCksIDEpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVy
IHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKSwgYnVmZmVyLmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlC
dWZmZXJWaWV3SGVscGVyLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
Mjg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0jZGVmaW5lIEpT
QXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKLQotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgot
I2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJn
TGlzdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlCYXNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRvb0xhcmdlU2l6ZSA9ICJTaXplIGlzIHRvbyBsYXJn
ZSAob3IgaXMgbmVnYXRpdmUpLiI7Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1i
b29sIGNvcHlUeXBlZEFycmF5QnVmZmVyKEMqIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFycmF5
QnVmZmVyVmlldzo6Vmlld1R5cGUgc291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAg
IEFTU0VSVChzb3VyY2VUeXBlICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KTsKLQot
ICAgIGlmICh0YXJnZXQtPmdldFR5cGUoKSA9PSBzb3VyY2VUeXBlKSB7Ci0gICAgICAgIGlmICgh
dGFyZ2V0LT5zZXQoc3RhdGljX2Nhc3Q8Qyo+KHNvdXJjZSksIG9mZnNldCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
dGFyZ2V0LT5jaGVja0luYm91bmREYXRhKG9mZnNldCwgc291cmNlTGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChzb3VyY2VUeXBlKSB7Ci0gICAgY2FzZSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVJbnQ4OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAo
VCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8c2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0
ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVV
aW50ODoKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNl
PHVuc2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQo
aSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBzaG9ydD4g
Kj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVm
ZmVyVmlldzo6VHlwZVVpbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNv
dXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQp
KHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5p
dGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBl
SW50MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxU
eXBlZEFycmF5QmFzZTxpbnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MzI6Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+
c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBp
bnQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJh
eUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0
LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8ZmxvYXQ+ICo+KHNvdXJjZSktPml0ZW0o
aSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9h
dDY0OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlw
ZWRBcnJheUJhc2U8ZG91YmxlPiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgc2V0V2ViR0xBcnJh
eVdpdGhUeXBlZEFycmF5QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17
Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhl
eGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBhcnJheVR5cGUgPSBhcnJheS0+Z2V0
VHlwZSgpOwotICAgIGlmIChhcnJheVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZp
ZXcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAyKQotICAgICAgICBvZmZzZXQgPSBleGVj
LT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNP
YmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlC
dWZmZXI8QywgVD4oaW1wbCwgYXJyYXkuZ2V0KCksIGxlbmd0aCwgb2Zmc2V0KSkpCi0gICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9m
IHJhbmdlLiIpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0
eXBlbmFtZSBUPgotSlNDOjpKU1ZhbHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEMqIGltcGwpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
Ci0gICAgICAgIHJldHVybiBKU0M6OnRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgaWYgKHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJh
eUFyZ3VtZW50PEMsIFQ+KGV4ZWMsIGltcGwpKQotICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJH
TDw+QXJyYXkgYXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
KDApLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4g
YXJyYXksIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6
OkpTT2JqZWN0KiBhcnJheSA9IEpTQzo6YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAg
ICAgICB1aW50MzJfdCBvZmZzZXQgPSAwOwotICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDIpCi0gICAgICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAo
IWltcGwtPmNoZWNrSW5ib3VuZERhdGEob2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICAgICAgdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFu
Z2UuIikpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJy
YXktPmdldChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAg
ICAgICAgICAgICAgaW1wbC0+c2V0KGkgKyBvZmZzZXQsIHYudG9OdW1iZXIoZXhlYykpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCAiSW52YWxp
ZCBhcmd1bWVudCIpOwotfQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5
Q29uc3RydWN0b3JzLgotLy8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZl
IHRocm93biBhIEphdmFTY3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5h
bWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJy
YXlBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiBzb3VyY2UgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFzb3VyY2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQXJyYXlCdWZmZXJWaWV3
OjpWaWV3VHlwZSBzb3VyY2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHNvdXJj
ZVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5n
ZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMp
OwotICAgIFJlZlB0cjxDPiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsK
LSAgICBpZiAoIWFycmF5KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0K
LQotICAgIGlmICghKGNvcHlUeXBlZEFycmF5QnVmZmVyPEMsIFQ+KGFycmF5LmdldCgpLCBzb3Vy
Y2UuZ2V0KCksIGxlbmd0aCwgMCkpKSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgIH0KLQotICAgIHJldHVybiBhcnJheTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNl
ZCBieSBYWFhBcnJheUNvbnN0cnVjdG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxs
IGFscmVhZHkgaGF2ZSB0aHJvd24gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNs
YXNzIEMsIHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmll
d1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQg
b2Zmc2V0ID0gKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSku
dG9VSW50MzIoZXhlYykgOiAwOwotICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1
bWVudCgyKS50b1VJbnQzMihleGVjKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKChidWZmZXIt
PmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgJSBzaXplb2YoVCkpIHsKLSAgICAgICAgICAgIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1p
bnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUu
IikpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0g
KGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICB9Ci0gICAg
UmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOwotICAg
IGlmICghYXJyYXkpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIEMsIHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmll
dyhKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3Rv
cnM6Ci0gICAgLy8KLSAgICAvLyAgMSkgKGluIGludCBzaXplKQotICAgIC8vICAyKSAoaW4gQXJy
YXlCdWZmZXIgYnVmZmVyLCBbT3B0aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4g
dW5zaWduZWQgaW50IGxlbmd0aCkKLSAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMg
ZW5kcyB1cCBiZWluZyBhIEpTICJhcnJheS1saWtlIiBvYmplY3QKLSAgICAvLyAgICAKLSAgICAv
LyBGb3IgdGhlIDAgYXJncyBjYXNlLCBqdXN0IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIHZpZXcuIFdl
IGNvdWxkCi0gICAgLy8gY29uc2lkZXIgcmFpc2luZyBhIFN5bnRheEVycm9yIGZvciB0aGlzIGNh
c2UsIGJ1dCBub3QgYWxsCi0gICAgLy8gSmF2YVNjcmlwdCBET00gYmluZGluZ3MgY2FuIGRpc3Rp
bmd1aXNoIGJldHdlZW4gIm5ldwotICAgIC8vIDxUeXBlPkFycmF5KCkiIGFuZCB3aGF0IG9jY3Vy
cyB3aGVuIGEgcHJldmlvdXNseS1jb25zdHJ1Y3RlZAotICAgIC8vIEFycmF5QnVmZmVyVmlldyBp
cyByZXR1cm5lZCB0byBKYXZhU2NyaXB0OyBlLmcuLCBmcm9tCi0gICAgLy8gImFycmF5LnN1YnNl
dCgpIi4KLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJu
IEM6OmNyZWF0ZSgwKTsKLSAgICAKLSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkp
IHsKLSAgICAgICAgLy8gSW52YWxpZCBmaXJzdCBhcmd1bWVudAotICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgUmVmUHRyPEM+IHZpZXcgPSBjb25zdHJ1
Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudDxDLCBUPihleGVjKTsKLSAg
ICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICByZXR1cm4gdmlldzsKLSAgICAKLSAgICAgICAg
dmlldyA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQ8Qywg
VD4oZXhlYyk7Ci0gICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0K
LSAgICAgICAgSlNDOjpKU09iamVjdCogc3JjQXJyYXkgPSBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IHNyY0FycmF5LT5nZXQoZXhlYywgZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBS
ZWZQdHI8Qz4gYXJyYXkgPSBDOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgICAg
IGlmICghYXJyYXkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGkpOwot
ICAgICAgICAgICAgYXJyYXktPnNldChpLCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgUmVmUHRyPEM+IHJlc3VsdDsKLSAgICBpZiAo
bGVuZ3RoID49IDApCi0gICAgICAgIHJlc3VsdCA9IEM6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obGVuZ3RoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSlNUeXBlLCB0eXBlbmFtZSBXZWJDb3JlVHlw
ZT4KLXN0YXRpYyBKU0M6OkpTVmFsdWUgdG9KU0FycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQ29yZVR5cGUqIG9i
amVjdCkKLXsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0KLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJy
ZW50V29ybGQoZXhlYyksIG9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAg
ZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qob2JqZWN0LT5ieXRlTGVuZ3RoKCkp
OwotICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPEpTVHlwZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBv
YmplY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0FycmF5
QnVmZmVyVmlld0hlbHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1
ZGlvQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDEzICsyOSwxMyBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogCiAj
aW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5j
bHVkZSAiSlNBdWRpb0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5j
bHVkZSAiSlNPZmZsaW5lQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29u
dGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmlu
ZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5jcHAiCiAjaW5jbHVk
ZSAiRGljdGlvbmFyeS5jcHAiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmNwcCIKLSNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0F0dHJDdXN0b20uY3BwIgog
I2luY2x1ZGUgIkpTQXVkaW9UcmFja0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNBdWRpb1RyYWNr
TGlzdEN1c3RvbS5jcHAiCkBAIC03MCw3ICs2OSw2IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dD
dXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuY3BwIgogI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5jcHAiCi0jaW5jbHVkZSAiSlNEYXRhVmlld0N1c3RvbS5jcHAiCiAjaW5jbHVk
ZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNE
ZXZpY2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RvY3VtZW50Q3Vz
dG9tLmNwcCIKQEAgLTE3MCw1ICsxNjgsNiBAQAogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmNw
cCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5jcHAiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIgog
I2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIgogI2luY2x1ZGUgIldvcmtlclNj
cmlwdERlYnVnU2VydmVyLmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE0
IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVy
LmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKICNpbmNsdWRlICJKU0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNp
bmNsdWRlICJXZWJLaXRCbG9iQnVpbGRlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgcnVsZSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgcnVsZSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAg
ICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NTU1ZhbHVlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
ICAgIGlmICghdmFsdWUtPmlzQ1NTT01TYWZlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsK
IAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdv
cmxkKGV4ZWMpLCB2YWx1ZSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFw
cGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdmFsdWUpOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAg
ICAgIHJldHVybiB3cmFwcGVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
cnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCAr
MjYsMTAgQEAKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDxydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
QEAgLTQxLDEyICs0MSwxMiBAQCBKU1ZhbHVlIEpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhl
Y1N0CiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMpKTsKIAogICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQo
MCk7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVy
VmlldyhidWZmZXIpOworICAgIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmll
dyA9IHRvQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlcik7CiAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIGltcGwoKS0+Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldywg
ZWMpOworICAgIGltcGwoKS0+Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldy5nZXQoKSwg
ZWMpOwogCiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNp
b24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICszMSwyMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
SW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3IuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNs
dWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTRGF0YVZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMu
aD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9OdWxsUHRyLmg+CkBAIC0xMjgsNiArMTM0LDE2IEBAIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4o
YXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYywgSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsK
ICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihE
T01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC0+
dm0oKS0+bV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworICAg
IH0KKyAgICAKKyAgICBpbmxpbmUgdm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCisgICAgeworICAgICAgICByZXR1cm4gd29ybGQ7
CisgICAgfQorCiAgICAgaW5saW5lIEpTRE9NV3JhcHBlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQqLCB2b2lkKikgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSBib29s
IHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3Jh
cHBlciosIEpTQzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCos
IHZvaWQqLCBKU0RPTVdyYXBwZXIqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM5LDYgKzE1NSwx
MyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFw
cGVyKCk7CiAgICAgfQogCisgICAgaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5l
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBi
dWZmZXIpCisgICAgeworICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKKyAg
ICB9CisKICAgICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQp
CiAgICAgewogICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTQ3LDYgKzE3MCwx
NCBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
KyAgICBpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCog
d29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0
KQorICAgIHsKKyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFr
PEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9t
T2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAoIXdvcmxk
LT5pc05vcm1hbCgpKQpAQCAtMTU1LDI0ICsxODYsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERP
TUNsYXNzPiBpbmxpbmUgSlNET01XcmFwcGVyKiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QpCisgICAgaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQogICAgIHsKLSAgICAg
ICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29y
bGQsIGRvbU9iamVjdCkpCisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHdlYWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBl
ciwgd3JhcHBlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGlmIChKU0M6OkpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cih3b3JsZCwgZG9tT2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAg
ICByZXR1cm4gd29ybGQtPm1fd3JhcHBlcnMuZ2V0KGRvbU9iamVjdCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3
cmFwcGVyKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwg
RE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAg
ICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21P
YmplY3QpOwogICAgICAgICB2b2lkKiBjb250ZXh0ID0gd3JhcHBlckNvbnRleHQod29ybGQsIGRv
bU9iamVjdCk7CiAgICAgICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21P
YmplY3QsIHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgSlNDOjpQYXNzV2VhazxKU0RPTVdyYXBwZXI+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVy
LCBjb250ZXh0KTsKKyAgICAgICAgSlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0PiBwYXNzV2Vh
ayh3cmFwcGVyLCBvd25lciwgY29udGV4dCk7CiAgICAgICAgIHdlYWtBZGQod29ybGQtPm1fd3Jh
cHBlcnMsICh2b2lkKilkb21PYmplY3QsIHBhc3NXZWFrKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCogd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBl
cikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9N
Q2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAg
aWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5NSw3ICsyMzQsNyBAQCBjbGFzcyBET01TdHJpbmdM
aXN0OwogICAgIHsKICAgICAgICAgaWYgKCFkb21PYmplY3QpCiAgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQorICAgICAgICBpZiAo
SlNDOjpKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBkb21PYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJl
dHVybiBjcmVhdGVXcmFwcGVyPFdyYXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBkb21P
YmplY3QpOwogICAgIH0KQEAgLTMyMyw2ICszNjIsMjUgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsK
ICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVy
KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIGlmIChKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gZ2V0RXhpc3RpbmdXcmFwcGVyPEpTQzo6SlNBcnJheUJ1ZmZlcj4oZXhl
YywgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJ1ZmZlci0+
cmVmKCk7CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciA9IEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1
Y3R1cmUoKSwgYnVmZmVyKTsKKyAgICAgICAgY2FjaGVXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVj
KSwgYnVmZmVyLCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisg
ICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKKyAg
ICB7CisgICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgICAgICByZXR1cm4gdmlldy0+d3JhcChleGVjLCBnbG9iYWxPYmplY3QpOworICAgIH0K
KwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxUPiBwdHIpCiAgICAgewpAQCAtMzc2LDYgKzQzNCwzMiBAQCBjbGFzcyBET01T
dHJpbmdMaXN0OwogCiAgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogCisgICAgaW5s
aW5lIFBhc3NSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvQXJyYXlCdWZmZXJWaWV3KEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcq
IHdyYXBwZXIgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZh
bHVlKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiB3cmFwcGVyLT5pbXBsKCk7CisgICAgfQorICAgIAorICAgIGlubGluZSBQYXNz
UmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b0ludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odmFsdWUpOyB9
CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b0ludDE2QXJyYXkoSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
MTZBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDMyQXJy
YXk+IHRvSW50MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRp
dmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNz
UmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VaW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odmFsdWUp
OyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VaW50
OENsYW1wZWRBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUg
UGFzc1JlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1VpbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+
KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWlu
dDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRW
aWV3PEpTQzo6VWludDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvRmxvYXQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2YWx1ZSk7
IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJy
YXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6RmxvYXQ2NEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRy
PEpTQzo6RGF0YVZpZXc+IHRvRGF0YVZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSlNDOjpKU0RhdGFWaWV3KiB3cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6
SlNEYXRhVmlldyo+KHZhbHVlKTsKKyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM7CiAKICAgICB0
ZW1wbGF0ZTw+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFW
aWV3Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgot
Ci0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVu
dW0gRGF0YVZpZXdBY2Nlc3NUeXBlIHsKLSAgICBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQz
MiwKLSAgICBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NAotfTsKLQotSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRGF0YVZp
ZXcqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gd3JhcDxKU0RhdGFWaWV3PihleGVjLCBnbG9iYWxP
YmplY3QsIG9iamVjdCk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEYXRh
Vmlld0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0RhdGFWaWV3KEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkgfHwgIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotCi0g
ICAgUmVmUHRyPERhdGFWaWV3PiB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFy
cmF5QnVmZmVyQXJndW1lbnQ8RGF0YVZpZXcsIGNoYXI+KGV4ZWMpOwotICAgIGlmICghdmlldy5n
ZXQoKSkgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQot
ICAgIEpTRGF0YVZpZXdDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RhdGFW
aWV3Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCB2
aWV3LmdldCgpKSkpOwotfQotCi1zdGF0aWMgSlNWYWx1ZSBnZXREYXRhVmlld01lbWJlcihFeGVj
U3RhdGUqIGV4ZWMsIERhdGFWaWV3KiBpbXAsIERhdGFWaWV3QWNjZXNzVHlwZSB0eXBlKQotewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZh
bHNlOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxICYmICh0eXBlID09IEFjY2Vz
c0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyIHx8IHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJB
c0Zsb2F0NjQpKSB7Ci0gICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
Qm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVy
QXNGbG9hdDMyOgotICAgIGNhc2UgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQ6IHsKLSAg
ICAgICAgZG91YmxlIHZhbHVlID0gKHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0
MzIpID8gaW1wLT5nZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpIDogaW1w
LT5nZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotICAgICAgICByZXN1
bHQgPSBzdGQ6OmlzbmFuKHZhbHVlKSA/IGpzTmFOKCkgOiBqc051bWJlcih2YWx1ZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0gZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQzMihF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0
YXRpY19jYXN0PERhdGFWaWV3Kj4oaW1wbCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0
MzIpOwotfQotCi1KU1ZhbHVlIEpTRGF0YVZpZXc6OmdldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBnZXREYXRhVmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRh
Vmlldyo+KGltcGwoKSksIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAg
QEAKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNpbmNsdWRl
ICJKU1RyYWNrQ3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAi
SlNWb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPGlu
dGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNyBAQCBKU1ZhbHVlIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSog
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IGZy
YW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+bG9jYXRpb24oKTsKLSAgICBpZiAoSlNET01X
cmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxv
Y2F0aW9uKSkKKyAgICBpZiAoSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1
cnJlbnRXb3JsZChleGVjKSwgbG9jYXRpb24pKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAog
ICAgIEpTTG9jYXRpb24qIGpzTG9jYXRpb24gPSBKU0xvY2F0aW9uOjpjcmVhdGUoZ2V0RE9NU3Ry
dWN0dXJlPEpTTG9jYXRpb24+KGV4ZWMsIGdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCks
IGxvY2F0aW9uKTsKQEAgLTgzLDcgKzgzLDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVu
dFdvcmxkKGV4ZWMpLCBkb2N1bWVudCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNo
ZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVy
KQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw3ICs1OSw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAg
ICBpZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBw
ZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZXZlbnQp
OworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIGV2ZW50KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBA
QAogI2luY2x1ZGUgIkpTRmlsZVJlYWRlci5oIgogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgot
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVy
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rp
b25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhCiAgICAgaWYgKCFjb2xsZWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAg
ICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgY29sbGVjdGlvbik7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFw
cGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29sbGVjdGlvbik7CiAKICAgICBpZiAod3JhcHBlcikK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRl
RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1
ZSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQoRQogICAgIEhUTUxUZW1wbGF0ZUVsZW1l
bnQqIGltcCA9IHN0YXRpY19jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQqPihpbXBsKCkpOwogICAg
IERvY3VtZW50RnJhZ21lbnQqIGNvbnRlbnQgPSBpbXAtPmNvbnRlbnQoKTsKIAotICAgIEpTRE9N
V3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBj
b250ZW50KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVu
dFdvcmxkKGV4ZWMpLCBjb250ZW50KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlRGF0YUN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyAr
MjUsNiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIK
LSNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiCiAKICNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC00MCw3ICszOSw3IEBAIEpTVmFs
dWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWltYWdlRGF0YSkK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBpbWFnZURhdGEpOworICAg
IEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyks
IGltYWdlRGF0YSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NiwxOSArNDYsMTEgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVu
dExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiSlNGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Zs
b2F0NjRBcnJheS5oIgogI2luY2x1ZGUgIkpTSFRNTEFsbENvbGxlY3Rpb24uaCIKICNpbmNsdWRl
ICJKU0hUTUxDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiSlNJbnQxNkFycmF5LmgiCi0jaW5jbHVk
ZSAiSlNJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNJbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJK
U05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgi
Ci0jaW5jbHVkZSAiSlNVaW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIK
LSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlN0b3JhZ2UuaCIKICNpbmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgpAQCAtNjcs
OCArNTksMTEgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50
aW1lL1JlZ0V4cE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNNZXNzYWdlRXZlbnQuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
ICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTVdpbmRvdy5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkpTTWVzc2FnZVBv
cnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlIDxydW50aW1l
L0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMyArMzAsMTMgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIK
ICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3Vz
dG9tLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbWljU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSB0b0pTKEV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1
cm4ganNOdWxsKCk7CiAKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVk
V3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVjdCkpCisgICAgaWYgKEpTT2JqZWN0KiB3
cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVjdCkpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAgICAgc3dpdGNoIChvYmplY3QtPnBhdGhTZWdUeXBl
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFz
dHlsZVNoZWV0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVl
dCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3Js
ZChleGVjKSwgc3R5bGVTaGVldCk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3
cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIAogICAgIGlmICghdHJhY2spCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOworICAgIEpTT2JqZWN0
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHRyYWNrKTsK
ICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDE4ICszNiwxNCBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJKU0VYVERyYXdCdWZmZXJzLmgiCiAjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmls
dGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUg
IkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5oIgogI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCiAjaW5jbHVkZSAi
SlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCiAjaW5jbHVkZSAiSlNPRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXku
aCIKICNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDLmgiCiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aCIKQEAgLTg1LDEwICs4MSw5IEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRB
cnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAK
ICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NRm9ybURhdGEu
aCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgpAQCAtNTAsNiArNDgsOCBAQAogI2lu
Y2x1ZGUgPGludGVycHJldGVyL1N0YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Fy
cmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMTI3LDkgKzEyNywxMCBAQCBKU1ZhbHVl
IEpTWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRXhlY1N0YXRlCiAgICAgICAgICAgICBpbXBsKCktPnNl
bmQodG9ET01Gb3JtRGF0YSh2YWwpLCBlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0
cyhKU0FycmF5QnVmZmVyOjppbmZvKCkpKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJy
YXlCdWZmZXIodmFsKSwgZWMpOwotICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNBcnJh
eUJ1ZmZlclZpZXc6OmluZm8oKSkpCi0gICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1
ZmZlclZpZXcodmFsKSwgZWMpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYgKHZhbC5p
bmhlcml0cyhKU0FycmF5QnVmZmVyVmlldzo6aW5mbygpKSkgeworICAgICAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyVmlldz4gdmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZhbCk7CisgICAgICAg
ICAgICBpbXBsKCktPnNlbmQodmlldy5nZXQoKSwgZWMpOworICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGltcGwoKS0+c2VuZCh2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBlYyk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDI1ICszMiwxMyBAQAogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlTGlz
dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIK
LSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgotI2lu
Y2x1ZGUgIkpTRGF0YVZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTRmlsZS5oIgogI2luY2x1ZGUgIkpTRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJKU0Zs
b2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDMy
QXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBv
cnQuaCIKICNpbmNsdWRlICJKU05hdmlnYXRvci5oIgotI2luY2x1ZGUgIkpTVWludDE2QXJyYXku
aCIKLSNpbmNsdWRlICJKU1VpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNVaW50OENsYW1wZWRBcnJheS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKQEAgLTYzLDEyICs1MSwxNyBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRGF0YVZp
ZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50
aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvUmVnRXhwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9SZWdFeHBPYmplY3QuaD4KLSNpbmNsdWRl
IDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTcyMiw0
NyArMTcxNSw2IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYKICAg
ICBtX2Jsb2JVUkxzLnN3YXAoYmxvYlVSTHMpOwogfQogCi1zdGF0aWMgdm9pZCBuZXV0ZXJWaWV3
KEpTQ2VsbCoganNWaWV3KQotewotICAgIGlmICghanNWaWV3KQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgc3dpdGNoIChqc1ZpZXctPmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpIHsKLSAgICBjYXNlIFR5cGVkQXJyYXlOb25lOgotICAgICAgICAvLyBUaGlzIGNvdWxkIGJl
IGEgRGF0YVZpZXcsIGZvciBleGFtcGxlLiBBc3N1bWUgdGhhdCB0aGVyZSBhcmUgdmlld3MgdGhh
dCB0aGUKLSAgICAgICAgLy8gREZHIGRvZXNuJ3QgY2FyZSBhYm91dC4KLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAgICAgIGpzQ2FzdDxKU0ludDhBcnJheSo+
KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAganNDYXN0PEpTSW50MTZBcnJheSo+KGpzVmlldykt
Pm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJy
YXlJbnQzMjoKLSAgICAgICAganNDYXN0PEpTSW50MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFn
ZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoK
LSAgICAgICAganNDYXN0PEpTVWludDhBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9
IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0g
ICAgICAgIGpzQ2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVu
Z3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAg
ICAgICAganNDYXN0PEpTVWludDE2QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAw
OwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICBq
c0Nhc3Q8SlNVaW50MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICBqc0Nhc3Q8
SlNGbG9hdDMyQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQ2NDoKLSAgICAgICAganNDYXN0PEpTRmxv
YXQ2NEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBQYXNzT3du
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVyQXJyYXlCdWZmZXJzKAogICAgIEV4ZWNTdGF0ZSog
ZXhlYywgQXJyYXlCdWZmZXJBcnJheSYgYXJyYXlCdWZmZXJzLCBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZSYgY29kZSkKIHsKQEAgLTE3NzksMjYgKzE3MzEsMTUgQEAgUGFzc093blB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OkFycmF5QgogCiAgICAgSGFzaFNldDxKU0M6OkFycmF5QnVmZmVyKj4g
dmlzaXRlZDsKICAgICBmb3IgKHNpemVfdCBhcnJheUJ1ZmZlckluZGV4ID0gMDsgYXJyYXlCdWZm
ZXJJbmRleCA8IGFycmF5QnVmZmVycy5zaXplKCk7IGFycmF5QnVmZmVySW5kZXgrKykgewotICAg
ICAgICBWZWN0b3I8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gPiBuZXV0ZXJlZFZpZXdzOwotCiAg
ICAgICAgIGlmICh2aXNpdGVkLmNvbnRhaW5zKGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4
XS5nZXQoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmlzaXRlZC5hZGQoYXJy
YXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLmdldCgpKTsKIAotICAgICAgICBib29sIHJlc3Vs
dCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIoY29udGVudHMtPmF0
KGFycmF5QnVmZmVySW5kZXgpLCBuZXV0ZXJlZFZpZXdzKTsKKyAgICAgICAgYm9vbCByZXN1bHQg
PSBhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0tPnRyYW5zZmVyKGNvbnRlbnRzLT5hdChh
cnJheUJ1ZmZlckluZGV4KSk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBj
b2RlID0gVmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSB2aWV3cyBtYXkgaGF2ZSBiZWVuIG5ldXRl
cmVkLCBidXQgdGhlaXIgd3JhcHBlcnMgYWxzbyBuZWVkIHRvIGJlIG5ldXRlcmVkLCB0b28uCi0g
ICAgICAgIGZvciAoc2l6ZV90IHZpZXdJbmRleCA9IG5ldXRlcmVkVmlld3Muc2l6ZSgpOyB2aWV3
SW5kZXgtLTspIHsKLSAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogdmlldyA9IG5ldXRlcmVk
Vmlld3Nbdmlld0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IHdvcmxkSW5k
ZXggPSB3b3JsZHMuc2l6ZSgpOyB3b3JsZEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCA9IHdvcmxkc1t3b3JsZEluZGV4XS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICBuZXV0ZXJWaWV3KGdldENhY2hlZFdyYXBwZXIod29ybGQsIHZpZXcpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gY29udGVudHMucmVsZWFzZSgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0Ns
aWVudERhdGEuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBA
CiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJET01PYmplY3RIYXNo
VGFibGVNYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNzUs
NiArNzYsNyBAQCBpbmxpbmUgdm9pZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTCiAgICAg
V2ViQ29yZUpTQ2xpZW50RGF0YSogd2ViQ29yZUpTQ2xpZW50RGF0YSA9IG5ldyBXZWJDb3JlSlND
bGllbnREYXRhOwogICAgIHZtLT5jbGllbnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8g
flZNIGRlbGV0ZXMgdGhpcyBwb2ludGVyLgogICAgIHdlYkNvcmVKU0NsaWVudERhdGEtPm1fbm9y
bWFsV29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7CisgICAgdm0tPm1f
dHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKwor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0Lmgi
CisjaW5jbHVkZSA8aGVhcC9QYXNzV2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZm
ZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50
aW1lL09wZXJhdGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCitXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcigpCisgICAgOiBtX293bmVyKCkKK3sKK30KK1dlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVm
ZmVyKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUJ1ZmZlciogbmF0aXZlKQor
eworICAgIHJldHVybiBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KAorICAgICAgICBXZWJDb3JlOjp0
b0pTKGV4ZWMsIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIG5hdGl2
ZSkpOworfQorCitib29sIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZl
ck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cygKKyAgICBIYW5kbGU8VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZl
cioganNBcnJheUJ1ZmZlciA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFz
Q2VsbCgpKTsKKyAgICBpZiAoIWpzQXJyYXlCdWZmZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFycmF5QnVmZmVyKiByb290ID0ganNBcnJheUJ1
ZmZlci0+aW1wbCgpOworICAgIHJldHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290
KTsKK30KKwordm9pZCBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJP
d25lcjo6ZmluYWxpemUoCisgICAgSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4
dCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlC
dWZmZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIERPTVdyYXBwZXJXb3JsZCogd29y
bGQgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hl
V3JhcHBlcih3b3JsZCwganNBcnJheUJ1ZmZlci0+aW1wbCgpLCBqc0FycmF5QnVmZmVyKTsKKyAg
ICBqc0FycmF5QnVmZmVyLT5pbXBsKCktPmRlcmVmKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisjZGVmaW5l
IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5Q29udHJvbGxlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdl
YkNvcmVUeXBlZEFycmF5Q29udHJvbGxlciA6IHB1YmxpYyBKU0M6OlR5cGVkQXJyYXlDb250cm9s
bGVyIHsKK3B1YmxpYzoKKyAgICBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICB2
aXJ0dWFsIH5XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFs
IEpTQzo6SlNBcnJheUJ1ZmZlciogdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7CisgICAgCisgICAgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcigpIHsgcmV0dXJuICZtX293bmVyOyB9CisKK3ByaXZhdGU6CisgICAg
Y2xhc3MgSlNBcnJheUJ1ZmZlck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKKyAgICB9OworCisgICAgSlNBcnJheUJ1ZmZlck93
bmVyIG1fb3duZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtp
bmcgY29weSkKQEAgLTE4MCwyMSArMTgwLDIyIEBAIHN1YiBGb3JBbGxQYXJlbnRzCiAKICAgICBt
eSAkcmVjdXJzZTsKICAgICAkcmVjdXJzZSA9IHN1YiB7CisgICAgICAgIG15ICRvdXRlckludGVy
ZmFjZSA9IHNoaWZ0OwogICAgICAgICBteSAkY3VycmVudEludGVyZmFjZSA9IHNoaWZ0OwogCiAg
ICAgICAgIGZvciAoQHskY3VycmVudEludGVyZmFjZS0+cGFyZW50c30pIHsKICAgICAgICAgICAg
IG15ICRpbnRlcmZhY2VOYW1lID0gJF87Ci0gICAgICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNl
ID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJGludGVyZmFjZU5hbWUpOworICAgICAgICAgICAg
bXkgJHBhcmVudEludGVyZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRvdXRlckludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUpOwogCiAgICAgICAgICAgICBpZiAoJGJlZm9yZVJlY3Vyc2lv
bikgewogICAgICAgICAgICAgICAgICYkYmVmb3JlUmVjdXJzaW9uKCRwYXJlbnRJbnRlcmZhY2Up
IGVxICdwcnVuZScgYW5kIG5leHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAmJHJlY3Vy
c2UoJHBhcmVudEludGVyZmFjZSk7CisgICAgICAgICAgICAmJHJlY3Vyc2UoJG91dGVySW50ZXJm
YWNlLCAkcGFyZW50SW50ZXJmYWNlKTsKICAgICAgICAgICAgICYkYWZ0ZXJSZWN1cnNpb24oJHBh
cmVudEludGVyZmFjZSkgaWYgJGFmdGVyUmVjdXJzaW9uOwogICAgICAgICB9CiAgICAgfTsKIAot
ICAgICYkcmVjdXJzZSgkaW50ZXJmYWNlKTsKKyAgICAmJHJlY3Vyc2UoJGludGVyZmFjZSwgJGlu
dGVyZmFjZSk7CiB9CiAKIHN1YiBGaW5kU3VwZXJNZXRob2QKQEAgLTIzOCw2ICsyMzksNyBAQCBz
dWIgSURMRmlsZUZvckludGVyZmFjZQogc3ViIFBhcnNlSW50ZXJmYWNlCiB7CiAgICAgbXkgJG9i
amVjdCA9IHNoaWZ0OworICAgIG15ICRvdXRlckludGVyZmFjZSA9IHNoaWZ0OwogICAgIG15ICRp
bnRlcmZhY2VOYW1lID0gc2hpZnQ7CiAKICAgICByZXR1cm4gdW5kZWYgaWYgJGludGVyZmFjZU5h
bWUgZXEgJ09iamVjdCc7CkBAIC0yNDgsNyArMjUwLDcgQEAgc3ViIFBhcnNlSW50ZXJmYWNlCiAK
ICAgICAjIFN0ZXAgIzE6IEZpbmQgdGhlIElETCBmaWxlIGFzc29jaWF0ZWQgd2l0aCAnaW50ZXJm
YWNlJwogICAgIG15ICRmaWxlbmFtZSA9ICRvYmplY3QtPklETEZpbGVGb3JJbnRlcmZhY2UoJGlu
dGVyZmFjZU5hbWUpCi0gICAgICAgIG9yIGRpZSgiQ291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9y
IGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCIhXG4iKTsKKyAgICAgICAgb3IgZGllKCJDb3Vs
ZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5hbWVcIiwgcmVh
Y2hhYmxlIGZyb20gXCIiIC4gJG91dGVySW50ZXJmYWNlLT5uYW1lIC4gIlwiIVxuIik7CiAKICAg
ICBwcmludCAiICB8ICB8PiAgUGFyc2luZyBwYXJlbnQgSURMIFwiJGZpbGVuYW1lXCIgZm9yIGlu
dGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCJcbiIgaWYgJHZlcmJvc2U7CiAKQEAgLTI3Nyw2ICsy
NzksMTAgQEAgc3ViIFNraXBJbmNsdWRlSGVhZGVyCiAKICAgICAjIFNwZWNpYWwgY2FzZTogU1ZH
TnVtYmVyLmggZG9lcyBub3QgZXhpc3QuCiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlNWR051
bWJlciI7CisgICAgCisgICAgIyBUeXBlZCBhcnJheXMgYWxyZWFkeSBpbmNsdWRlZCBieSBKU0RP
TUJpbmRpbmcuaC4KKyAgICByZXR1cm4gMSBpZiAkb2JqZWN0LT5Jc1R5cGVkQXJyYXlUeXBlKCR0
eXBlKTsKKyAgICAKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzY4LDcgKzM3NCw3IEBAIHN1YiBJ
c1R5cGVkQXJyYXlUeXBlCiAgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiQXJyYXlCdWZmZXIi
KSBvciAoJHR5cGUgZXEgIkFycmF5QnVmZmVyVmlldyIpKTsKICAgICByZXR1cm4gMSBpZiAoKCR0
eXBlIGVxICJVaW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50OENsYW1wZWRBcnJheSIpIG9y
ICgkdHlwZSBlcSAiVWludDE2QXJyYXkiKSBvciAoJHR5cGUgZXEgIlVpbnQzMkFycmF5IikpOwog
ICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkludDhBcnJheSIpIG9yICgkdHlwZSBlcSAiSW50
MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiSW50MzJBcnJheSIpKTsKLSAgICByZXR1cm4gMSBpZiAo
KCR0eXBlIGVxICJGbG9hdDMyQXJyYXkiKSBvciAoJHR5cGUgZXEgIkZsb2F0NjRBcnJheSIpKTsK
KyAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJGbG9hdDMyQXJyYXkiKSBvciAoJHR5cGUgZXEg
IkZsb2F0NjRBcnJheSIpIG9yICgkdHlwZSBlcSAiRGF0YVZpZXciKSk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTYwOSw2ICs2MTUsNyBAQCBzdWIgSXNXcmFwcGVyVHlwZQogICAgIHJldHVybiAw
IGlmICRvYmplY3QtPkdldFNlcXVlbmNlVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJG9i
amVjdC0+SXNFbnVtVHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNTdHJp
bmdUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1R5cGVkQXJyYXlUeXBl
KCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkd2ViQ29yZVR5cGVIYXNoeyR0eXBlfTsKICAgICBy
ZXR1cm4gMCBpZiAkdHlwZSBlcSAiYW55IjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDE1NDA2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQog
ICAgIG15ICRpbmNsdWRlc1JlZiA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIGlmIFNraXBJbmNsdWRl
SGVhZGVyKCR0eXBlKTsKLQorICAgIAogICAgICMgV2hlbiB3ZSdyZSBmaW5pc2hlZCB3aXRoIHRo
ZSBvbmUtZmlsZS1wZXItY2xhc3MKICAgICAjIHJlb3JnYW5pemF0aW9uLCB3ZSB3b24ndCBuZWVk
IHRoZXNlIHNwZWNpYWwgY2FzZXMuCiAgICAgaWYgKCR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIi
KSB7CkBAIC0yMjUsOCArMjI1LDYgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICAgICAk
aW5jbHVkZXNSZWYtPnsiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCJ9ID0gMTsKICAgICB9IGVs
c2lmICgkaXNDYWxsYmFjayAmJiAkY29kZUdlbmVyYXRvci0+SXNXcmFwcGVyVHlwZSgkdHlwZSkp
IHsKICAgICAgICAgJGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5oIn0gPSAxOwotICAgIH0gZWxz
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAk
aW5jbHVkZXNSZWYtPnsiPHJ1bnRpbWUvJHt0eXBlfS5oPiJ9ID0gMTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAjIGRlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAgICAk
aW5jbHVkZXNSZWYtPnsiJHt0eXBlfS5oIn0gPSAxOwpAQCAtNjgyLDExICs2ODAsNyBAQCBzdWIg
R2VuZXJhdGVIZWFkZXIKICAgICB9CiAKICAgICBpZiAoJGhhc1BhcmVudCAmJiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0In0pIHsKLSAg
ICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbnRlcmZhY2VOYW1l
KSkgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS8kaW50ZXJmYWNlTmFt
ZS5oPiJ9ID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNsdWRl
c3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKLSAgICAgICAgfQorICAgICAgICAkaGVhZGVySW5j
bHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7CiAgICAgfQogICAgIAogICAgICRoZWFkZXJJ
bmNsdWRlc3siPHJ1bnRpbWUvSlNPYmplY3QuaD4ifSA9IDE7CkBAIC05NjUsMjIgKzk1OSw2IEBA
IHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1c
biIpOwogICAgIH0KIAotICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgk
aW1wbFR5cGUpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBs
VHlwZSBuZSAiQXJyYXlCdWZmZXIiKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSA9IEpTQzo6Iik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50
OCIpIGlmICRpbXBsVHlwZSBlcSAiSW50OEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIlR5cGVkQXJyYXlJbnQxNiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MTZBcnJheSI7Ci0g
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5SW50MzIiKSBpZiAkaW1wbFR5
cGUgZXEgIkludDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheVVpbnQ4IikgaWYgJGltcGxUeXBlIGVxICJVaW50OEFycmF5IjsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50OENsYW1wZWQiKSBpZiAkaW1wbFR5cGUgZXEg
IlVpbnQ4Q2xhbXBlZEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVk
QXJyYXlVaW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQxNkFycmF5IjsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlVaW50MzIiKSBpZiAkaW1wbFR5cGUgZXEgIlVp
bnQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9h
dDMyIikgaWYgJGltcGxUeXBlIGVxICJGbG9hdDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0NjQiKSBpZiAkaW1wbFR5cGUgZXEgIkZsb2F0NjRB
cnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICI7XG4iKTsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBpbnRwdHJfdCBtX3N0b3JhZ2VMZW5ndGg7XG4iKTsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkKiBtX3N0b3JhZ2U7XG4iKTsKLSAg
ICB9Ci0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJvdGVjdGVkOlxuIik7CiAgICAgIyBD
b25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewpAQCAt
MTg2OSwxMiArMTg0Nyw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSlcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XG4iKTsKLSAgICAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgk
aW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1
ZmZlciIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBUeXBlZEFycmF5
RGVzY3JpcHRvciBkZXNjcmlwdG9yKCR7Y2xhc3NOYW1lfTo6aW5mbygpLCBPQkpFQ1RfT0ZGU0VU
T0YoJHtjbGFzc05hbWV9LCBtX3N0b3JhZ2UpLCBPQkpFQ1RfT0ZGU0VUT0YoJHtjbGFzc05hbWV9
LCBtX3N0b3JhZ2VMZW5ndGgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgdm0ucmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihpbXBsKCksIGRlc2NyaXB0b3Ip
O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2UgPSBp
bXBsKCktPmRhdGEoKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
bV9zdG9yYWdlTGVuZ3RoID0gaW1wbCgpLT5sZW5ndGgoKTtcbiIpOwotICAgICAgICB9CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQpAQCAtMjM3NCw3
ICsyMzQ2LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAoJGZ1bmN0aW9u
TmFtZSwgQGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+U2V0dGVyRXhwcmVzc2lvbihcJWlt
cGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFsdWUiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNU
eXBlZEFycmF5VHlwZSgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUpIGFuZCBub3QgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJBcnJheUJ1ZmZlciIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJuYXRpdmVWYWx1ZS5n
ZXQoKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJu
YXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEJ5ID0gJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9OwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7aW1w
bGVtZW50ZWRCeX0uaCJ9ID0gMTsKQEAgLTI1MjYsMTMgKzI1MDIsNiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkaXNDdXN0b20pIHsKICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYXN0ZWRUaGlzLT4iIC4gJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIihleGVjKSk7
XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgZXEgInNldCIgYW5kICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFycmF5In0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG15ICR2aWV3VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFy
cmF5In07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldFdlYkdMQXJyYXlIZWxwZXI8JGltcGxUeXBlLCAkdmll
d1R5cGU+KGV4ZWMsIGNhc3RlZFRoaXMtPmltcGwoKSkpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuZXh0OwotICAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgJGltcGxUeXBlKiBpbXBsID0gc3RhdGljX2Nhc3Q8JGlt
cGxUeXBlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoJHN2Z1Byb3BlcnR5VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKGltcGwtPmlzUmVhZE9ubHkoKSkge1xuIik7CkBAIC0zMDg3LDcg
KzMwNTYsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAgICAg
ICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIiB8fCAoJGNvZGVHZW5lcmF0b3ItPklzVHlw
ZWRBcnJheVR5cGUoJGFyZ1R5cGUpIGFuZCBub3QgJGFyZ1R5cGUgZXEgIkFycmF5QnVmZmVyIikp
IHsKICAgICAgICAgICAgIHB1c2ggQGFyZ3VtZW50cywgIiRuYW1lLmdldCgpIjsKICAgICAgICAg
fSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhcmdUeXBl
KSBhbmQgbm90ICRpbnRlcmZhY2VOYW1lID1+IC9MaXN0JC8pIHsKICAgICAgICAgICAgIHB1c2gg
QGFyZ3VtZW50cywgIiRuYW1lLT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKQEAgLTMzNjksNiArMzMz
OCw3IEBAIHN1YiBHZXROYXRpdmVUeXBlCiAgICAgbXkgJHN2Z05hdGl2ZVR5cGUgPSAkY29kZUdl
bmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCR0eXBlKTsKICAgICByZXR1cm4gIiR7
c3ZnTmF0aXZlVHlwZX0qIiBpZiAkc3ZnTmF0aXZlVHlwZTsKICAgICByZXR1cm4gIlJlZlB0cjxE
T01TdHJpbmdMaXN0PiIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZ0xpc3QiOworICAgIHJldHVybiAi
UmVmUHRyPCR7dHlwZX0+IiBpZiAkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlw
ZSkgYW5kIG5vdCAkdHlwZSBlcSAiQXJyYXlCdWZmZXIiOwogICAgIHJldHVybiAkbmF0aXZlVHlw
ZXskdHlwZX0gaWYgZXhpc3RzICRuYXRpdmVUeXBleyR0eXBlfTsKIAogICAgIG15ICRhcnJheVR5
cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKQEAgLTM1MDgsNiArMzQ3
OCwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJK
U0RPTVN0cmluZ0xpc3QuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIHJldHVybiAidG9ET01T
dHJpbmdMaXN0KGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KKyAgICAKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVybiAidG8kdHlw
ZSgkdmFsdWUpIjsKKyAgICB9CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSFRNTE9wdGlvbkVs
ZW1lbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIkhUTUxPcHRpb25FbGVtZW50IjsK
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRXZlbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUg
ZXEgIkV2ZW50IjsKQEAgLTM1NzcsNyArMzU1MSw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lL0pTU3RyaW5nLmg+IiwgJGNvbmRpdGlv
bmFsKTsKICAgICAgICAgcmV0dXJuICJqc1N0cmluZ1dpdGhDYWNoZShleGVjLCAkdmFsdWUpIjsK
ICAgICB9Ci0KKyAgICAKICAgICBteSAkZ2xvYmFsT2JqZWN0OwogICAgIGlmICgkdGhpc1ZhbHVl
KSB7CiAgICAgICAgICRnbG9iYWxPYmplY3QgPSAiJHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCki
OwpAQCAtMzYxOCwxNCArMzU5MiwxMiBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgfSBlbHNp
ZiAoJHR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgb3IgJHR5cGUgZXEgImFueSIpIHsK
ICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIiwgJGNv
bmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICIkdmFsdWUgPyAkdmFsdWUtPmRlc2VyaWFsaXpl
KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpIjsKKyAgICB9
IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgIyBEbyBub3RoaW5nIC0gYWxsIGhlYWRlcnMgYXJlIGFscmVhZHkgaW5jbHVkZWQuCiAgICAg
fSBlbHNlIHsKICAgICAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIGhlYWRlciB3aXRoIHNhbWUgbmFt
ZS4KICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIsICRjb25kaXRpb25hbCk7
Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsK
LSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS8kdHlwZS5oPiIsICRjb25k
aXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUu
aCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRl
cigkdHlwZSk7Ci0gICAgICAgIH0KKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiR0eXBlLmgi
LCAkY29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIo
JHR5cGUpOwogICAgIH0KIAogICAgIHJldHVybiAkdmFsdWUgaWYgJGNvZGVHZW5lcmF0b3ItPklz
U1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKTsKQEAgLTQxMDgsMzAgKzQwODAsNiBAQCBFTkQKIH0KIAog
RU5ECi0gICAgICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxh
dGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgewotICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCJ9ID0gMTsKLSAgICAgICAgICAgIG15ICR2aWV3
VHlwZSA9ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFycmF5In07Ci0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMICR7Y29uc3RydWN0b3JDbGFzc05hbWV9Ojpjb25zdHJ1Y3Qke2NsYXNzTmFtZX0oRXhlY1N0
YXRlKiBleGVjKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAke2NvbnN0cnVjdG9yQ2xhc3NO
YW1lfSoganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDwke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfSo+KGV4
ZWMtPmNhbGxlZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IFJlZlB0cjwkaW50ZXJmYWNlTmFtZT4gYXJyYXkgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXc8
JGludGVyZmFjZU5hbWUsICR2aWV3VHlwZT4oZXhlYyk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWFycmF5LmdldCgpKVxuIik7Ci0gICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIC8vIEV4Y2VwdGlvbiBoYXMgYWxyZWFkeSBiZWVu
IHRocm93bi5cbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMo
ZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFycmF5LmdldCgpKSkpO1xuIik7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICJKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgJHtpbnRlcmZhY2VOYW1lfSog
b2JqZWN0KVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gdG9KU0FycmF5QnVmZmVy
Vmlldzwke2NsYXNzTmFtZX0+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0p
IHsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ2b2lkICR7Y2xhc3NOYW1l
fTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6
OkpTVmFsdWUgdmFsdWUpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICJ7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaW1wbCgp
LT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcbiIpOwotICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzaWYgKCFIYXNDdXN0b21Db25zdHJ1Y3RvcigkaW50ZXJmYWNlKSAmJiAoISRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZENvbnN0cnVjdG9yIn0gfHwgJGdlbmVyYXRpbmdO
YW1lZENvbnN0cnVjdG9yKSkgewogICAgICAgICAgICAgbXkgJG92ZXJsb2FkZWRJbmRleFN0cmlu
ZyA9ICIiOwogICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+e292ZXJsb2FkZWRJbmRleH0gJiYg
JGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSA+IDApIHsKQEAgLTQyMTAsNyArNDE1OCw3IEBA
IHN1YiBHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVyTWV0aG9kcwogCiAgICAgbXkgJGNvbnN0cnVj
dG9yQ2xhc3NOYW1lID0gJGdlbmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yID8gIiR7Y2xhc3NOYW1l
fU5hbWVkQ29uc3RydWN0b3IiIDogIiR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yIjsKICAgICBteSAk
bGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDA7Ci0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0Nv
bnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2ZW50IikgfHwgJGNvZGVHZW5lcmF0b3It
PklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7CisgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIkV2
ZW50IikpIHsKICAgICAgICAgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGggPSAxOwogICAgIH0gZWxz
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvciJ9IHx8ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Db25zdHJ1Y3RvciJ9KSB7CiAg
ICAgICAgIG15IEBjb25zdHJ1Y3RvcnMgPSBAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc307Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBCbG9iQnVpbGRlcjo6
YXBwZW5kKEFycmF5QnVmZmVyKiBhcgogICAgIGFwcGVuZEJ5dGVzRGF0YShhcnJheUJ1ZmZlci0+
ZGF0YSgpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKIH0KIAotdm9pZCBCbG9iQnVpbGRl
cjo6YXBwZW5kKEFycmF5QnVmZmVyVmlldyogYXJyYXlCdWZmZXJWaWV3KQordm9pZCBCbG9iQnVp
bGRlcjo6YXBwZW5kKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheUJ1ZmZlclZpZXcp
CiB7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUu
QmxvYi5jb25zdHJ1Y3Rvci5BcnJheUJ1ZmZlck9yVmlldyIsIEJsb2JDb25zdHJ1Y3RvckFycmF5
QnVmZmVyVmlldywgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJPclZpZXdNYXgpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmcpOwogI2lmIEVOQUJMRShCTE9C
KQogICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXIqKTsKLSAgICB2b2lkIGFwcGVuZChK
U0M6OkFycmF5QnVmZmVyVmlldyopOworICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+KTsKICNlbmRpZgogCiAgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9i
KGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQXJyYXlCdWZmZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29y
a2VyR2xvYmFsU2NvcGUsCi0gICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsLAotICAgIEN1c3Rv
bUNvbnN0cnVjdG9yKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKSwKLSAgICBKU05vU3RhdGljVGFibGVz
LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQywKLSAgICBJbXBsZW1lbnRhdGlvbkxh
Y2tzVlRhYmxlCi1dIGludGVyZmFjZSBBcnJheUJ1ZmZlciB7Ci0gICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aDsKLSAgICBBcnJheUJ1ZmZlciBzbGljZShsb25n
IGJlZ2luLCBvcHRpb25hbCBsb25nIGVuZCk7Ci19OwotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBDdXN0b21Ub0pTT2JqZWN0
LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlND
Ci1dIGludGVyZmFjZSBBcnJheUJ1ZmZlclZpZXcgewotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
cnJheUJ1ZmZlciBidWZmZXI7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
Ynl0ZU9mZnNldDsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlTGVu
Z3RoOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5jcHAJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgotCi1uYW1lc3BhY2UgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdW5pb24gVmFsdWUgewot
ICAgIFQgZGF0YTsKLSAgICBjaGFyIGJ5dGVzW3NpemVvZihUKV07Ci19OwotCi19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHVpbnQ4X3QpKTsKLSAgICBpZiAoIWJ1ZmZl
ci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAs
IGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBieXRlTGVuZ3RoKQotewotICAgIGlmIChieXRlT2Zmc2V0ID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkT2Zmc2V0KGJ5dGVPZmZzZXQpOwotICAgIENoZWNrZWQ8dWludDMyX3QsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkTGVuZ3RoKGJ5dGVMZW5ndGgpOwotICAgIENoZWNrZWQ8dWlu
dDMyX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkTWF4ID0gY2hlY2tlZE9mZnNldCArIGNoZWNr
ZWRMZW5ndGg7Ci0gICAgaWYgKGNoZWNrZWRNYXguaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRN
YXgudW5zYWZlR2V0KCkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpKTsKLX0KLQotRGF0YVZpZXc6OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKLSAg
ICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgLCBtX2J5dGVMZW5n
dGgoYnl0ZUxlbmd0aCkKLXsKLX0KLQotc3RhdGljIGJvb2wgbmVlZFRvRmxpcEJ5dGVzKGJvb2wg
bGl0dGxlRW5kaWFuKQotewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgIHJldHVybiBsaXR0bGVF
bmRpYW47Ci0jZWxzZQotICAgIHJldHVybiAhbGl0dGxlRW5kaWFuOwotI2VuZGlmCi19Ci0KLWlu
bGluZSB2b2lkIHN3YXBCeXRlcyhjaGFyKiBwLCBjaGFyKiBxKQotewotICAgIGNoYXIgdGVtcCA9
ICpwOwotICAgICpwID0gKnE7Ci0gICAgKnEgPSB0ZW1wOwotfQotCi1zdGF0aWMgdm9pZCBmbGlw
Qnl0ZXNGb3IxNkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCArIDEpOwotfQot
Ci1zdGF0aWMgdm9pZCBmbGlwQnl0ZXNGb3IzMkJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0
ZXMocCwgcCArIDMpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDIpOwotfQotCi1zdGF0aWMg
dm9pZCBmbGlwQnl0ZXNGb3I2NEJpdHMoY2hhciogcCkKLXsKLSAgICBzd2FwQnl0ZXMocCwgcCAr
IDcpOwotICAgIHN3YXBCeXRlcyhwICsgMSwgcCArIDYpOwotICAgIHN3YXBCeXRlcyhwICsgMiwg
cCArIDUpOwotICAgIHN3YXBCeXRlcyhwICsgMywgcCArIDQpOwotfQotCi1zdGF0aWMgdm9pZCBm
bGlwQnl0ZXNJZk5lZWRlZChjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsIGJvb2wgbGl0dGxlRW5k
aWFuKQotewotICAgIGlmICghbmVlZFRvRmxpcEJ5dGVzKGxpdHRsZUVuZGlhbikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHN3aXRjaCAoc2l6ZSkgewotICAgIGNhc2UgMToKLSAgICAgICAgLy8g
Tm90aGluZyB0byBkby4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBmbGlw
Qnl0ZXNGb3IxNkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAg
ICAgIGZsaXBCeXRlc0ZvcjMyQml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
ODoKLSAgICAgICAgZmxpcEJ5dGVzRm9yNjRCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgRGF0YVZpZXc6OmdldERhdGEo
dW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAotewotICAgIGlmIChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAg
ICBlYyA9IElOREVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAv
LyBXZSBkbyBub3Qgd2FudCB0byBsb2FkIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxk
IGNhdXNlIGEgYnVzIGVycm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVu
YWxpZ25lZCBsb2Fkcy4KLSAgICBWYWx1ZTxUPiB2YWx1ZTsKLSAgICBtZW1jcHkodmFsdWUuYnl0
ZXMsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5dGVPZmZzZXQs
IHNpemVvZihUKSk7Ci0gICAgZmxpcEJ5dGVzSWZOZWVkZWQodmFsdWUuYnl0ZXMsIHNpemVvZihU
KSwgbGl0dGxlRW5kaWFuKTsKLSAgICByZXR1cm4gdmFsdWUuZGF0YTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXZvaWQgRGF0YVZpZXc6OnNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
IChiZXlvbmRSYW5nZTxUPihieXRlT2Zmc2V0KSkgewotICAgICAgICBlYyA9IElOREVYX1NJWkVf
RVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdG8g
c3RvcmUgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Ig
b24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIHN0b3Jlcy4KLSAg
ICBWYWx1ZTxUPiB0ZW1wVmFsdWU7Ci0gICAgdGVtcFZhbHVlLmRhdGEgPSB2YWx1ZTsKLSAgICBm
bGlwQnl0ZXNJZk5lZWRlZCh0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSwgbGl0dGxlRW5kaWFu
KTsKLSAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9m
ZnNldCwgdGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCkpOwotfQotCi1pbnQ4X3QgRGF0YVZpZXc6
OmdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
cmV0dXJuIGdldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOwotfQotCi11aW50
OF90IERhdGFWaWV3OjpnZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0LCBmYWxzZSwg
ZWMpOwotfQotCi1pbnQxNl90IERhdGFWaWV3OjpnZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdl
dERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQx
Nl90IERhdGFWaWV3OjpnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQxNl90
PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotaW50MzJfdCBEYXRhVmlldzo6
Z2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi11aW50MzJfdCBEYXRhVmlldzo6Z2V0VWludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICByZXR1cm4gZ2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBl
Yyk7Ci19Ci0KLWZsb2F0IERhdGFWaWV3OjpnZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0
RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWRvdWJsZSBE
YXRhVmlldzo6Z2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8ZG91YmxlPihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHNldERhdGE8aW50OF90PihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQot
dm9pZCBEYXRhVmlldzo6c2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50OF90PihieXRlT2Zmc2V0
LCB2YWx1ZSwgZmFsc2UsIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0
bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5k
aWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHNldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRp
YW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIHNldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBk
b3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBzZXREYXRhPGRvdWJsZT4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpuZXV0ZXIoKQotewotICAgIEFycmF5QnVmZmVyVmlldzo6bmV1
dGVyKCk7Ci0gICAgbV9ieXRlTGVuZ3RoID0gMDsKLX0KLQotfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9EYXRhVmlldy5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBEYXRhVmlld19oCi0jZGVmaW5lIERhdGFWaWV3X2gKLQotI2luY2x1
ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci1jbGFzcyBEYXRhVmlldyA6IHB1YmxpYyBBcnJheUJ1ZmZlclZpZXcgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVu
Z3RoOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gc2xpY2UoaW50
LCBpbnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIGludDhfdCBnZXRJbnQ4KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50OF90IGdldFVpbnQ4KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBpbnQxNl90IGdldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQxNihi
eXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgaW50MTZfdCBnZXRJbnQxNih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQx
Nl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gZ2V0VWludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MTZfdCBn
ZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRJbnQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9
Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0VWludDMyKGJ5dGVPZmZz
ZXQsIGZhbHNlLCBlYyk7IH0KLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBmbG9hdCBnZXRG
bG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBn
ZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBmbG9hdCBnZXRGbG9hdDMy
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0NjQoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAg
IGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFu
LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHNldEludDgodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWlu
dDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBp
bnQzMl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRJbnQzMihieXRlT2Zmc2V0LCB2
YWx1ZSwgZmFsc2UsIGVjKTsgfSAKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVj
KTsgfQotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQg
c2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0
ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDY0KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQotcHJpdmF0ZToKLSAgICBEYXRhVmlldyhQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIGJleW9uZFJhbmdl
KHVuc2lnbmVkIGJ5dGVPZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGJ5dGVPZmZzZXQgPj0gbV9ieXRl
TGVuZ3RoIHx8IGJ5dGVPZmZzZXQgKyBzaXplb2YoVCkgPiBtX2J5dGVMZW5ndGg7IH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgVCBnZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgc2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdW5zaWduZWQg
bV9ieXRlTGVuZ3RoOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBEYXRhVmlld19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRs
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDdXN0b21Db25zdHJ1
Y3RvcihBcnJheUJ1ZmZlciBidWZmZXIsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoKSwKLSAgICBDdXN0b21Ub0pTT2Jq
ZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMKLV0gaW50ZXJmYWNlIERhdGFWaWV3IDogQXJyYXlC
dWZmZXJWaWV3IHsKLSAgICAvLyBBbGwgdGhlc2UgbWV0aG9kcyByYWlzZSBhbiBleGNlcHRpb24g
aWYgdGhleSB3b3VsZCByZWFkIG9yIHdyaXRlIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB2aWV3Lgot
Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gYnl0ZSBnZXRJbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9m
ZnNldCk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gb2N0ZXQgZ2V0VWludDgodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gc2hvcnQgZ2V0SW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29s
ZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB1bnNpZ25lZCBzaG9ydCBnZXRVaW50MTYodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBv
cHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSBsb25nIGdldEludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwg
b3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdW5zaWduZWQgbG9uZyBnZXRVaW50MzIodW5zaWduZWQgbG9uZyBi
eXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0KLSAgICAvLyBVc2Ug
Y3VzdG9tIGNvZGUgdG8gaGFuZGxlIE5hTiBjYXNlLgotICAgIFtDdXN0b20sIFN0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBmbG9hdCBnZXRGbG9hdDMyKHVuc2lnbmVkIGxvbmcg
Ynl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtDdXN0b20s
IFN0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBkb3VibGUgZ2V0RmxvYXQ2NCh1
bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsK
LQotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBsb25nIGJ5dGVP
ZmZzZXQsIGJ5dGUgdmFsdWUpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDgo
dW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvY3RldCB2YWx1ZSk7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50MTYodW5zaWduZWQgbG9uZyBi
eXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50MTYo
dW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgb3B0aW9uYWwg
Ym9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGxvbmcgdmFs
dWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4p
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9h
dDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIG9wdGlvbmFsIGJvb2xl
YW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1
ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotfTsKLQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTAgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1mbG9hdCwK
LSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZsb2F0MzJBcnJh
eSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJf
RUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5n
dGg7Ci0gICAgRmxvYXQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9u
YWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcg
ZW5kKTsKLQotICAgIGdldHRlciBmbG9hdCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAv
LyB2b2lkIHNldChGbG9hdDMyQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zm
c2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5z
aWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJh
eSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVj
dCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9O
b3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWRvdWJsZSwKLSAgICBJbXBsZW1lbnRh
dGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEZsb2F0NjRBcnJheSA6IEFycmF5QnVmZmVy
VmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDg7Ci0K
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgRmxvYXQ2
NEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdl
dHRlciBkb3VibGUgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoRmxv
YXQ2NEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8g
dm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zm
c2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0ludDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW50OEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvSW50OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9c2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3Bh
Y2U9SlNDCi1dIGludGVyZmFjZSBJbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDhBcnJheSBzdWJhcnJheShb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAg
ICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgYnl0ZSAodW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQ4QXJyYXkgYXJyYXksIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBh
cnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMTAgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAg
Q29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIs
Ci0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0g
ICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVk
QXJyYXk9c2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFj
ZSBJbnQxNkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25n
IEJZVEVTX1BFUl9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxlbmd0aDsKLSAgICBJbnQxNkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwot
Ci0gICAgLy8gdm9pZCBzZXQoSW50MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9u
ZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25h
bCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9
RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlw
ZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2
ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0g
ICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWludCwKLSAgICBJbXBsZW1l
bnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDMyQXJyYXkgOiBBcnJheUJ1ZmZl
clZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA0Owot
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDMy
QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRl
ciBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDMyQXJy
YXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNl
dChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWlu
dDhBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWlu
dDhBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1VpbnQ4QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29w
ZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhl
ZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1Rh
YmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0g
ICAgVHlwZWRBcnJheT11bnNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNl
PUpTQwotXSBpbnRlcmZhY2UgVWludDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29u
c3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDhBcnJheSBzdWJhcnJheShb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5k
KTsKLQotICAgIGdldHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2
b2lkIHNldChVaW50OEFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7
Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25l
ZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWlu
dDhDbGFtcGVkQXJyYXkgOiBVaW50OEFycmF5IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZ
VEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKLSAgICBVaW50OENsYW1wZWRBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRl
ZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdl
dHRlciBvY3RldCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyBGSVhNRTogTWlzc2lu
ZyBvdGhlciBzZXR0ZXJzIQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4Q2xhbXBlZEFycmF5IGFycmF5
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVu
Y2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lk
IHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZBcnJh
eS5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Vp
bnQxNkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0g
ICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0
ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMs
Ci0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5
cGVkQXJyYXk9dW5zaWduZWQgc2hvcnQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlND
Ci1dIGludGVyZmFjZSBVaW50MTZBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3Qg
dW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDE2QXJyYXkgc3ViYXJyYXkoW0Rl
ZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7
Ci0KLSAgICBnZXR0ZXIgdW5zaWduZWQgc2hvcnQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0g
ICAgLy8gdm9pZCBzZXQoVWludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0
PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5
cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRp
dmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAot
ICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBpbnQsCi0g
ICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50MzJBcnJheSA6
IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxF
TUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
Ci0gICAgVWludDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBs
b25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgdW5zaWduZWQgbG9u
ZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MzJBcnJheSBh
cnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNl
cXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
dm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDggQEAKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNs
dWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgogCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRp
b25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CkBAIC0zNDE1LDcgKzM0MTcsNyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCi0gICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4KSB7Cisg
ICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7CiAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
YWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC01MTU2LDcgKzUxNTgsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVUZXhGCiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgpIHsKKyAgICAgICAgaWYgKHBpeGVscy0+
Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
InR5cGUgVU5TSUdORURfQllURSBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUxNjQsMTMgKzUxNjYs
MTMgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0
VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQxNikgeworICAgICAgICBpZiAocGl4
ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7CiAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2
QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVf
ZmxvYXQKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6
VHlwZUZsb2F0MzIpIHsKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlw
ZUZsb2F0MzIpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJy
YXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxNCArNDEsNyBAQCBuYW1lc3BhY2UgewogCiBib29sIGlzSW50ZWdlckFycmF5KEFycmF5QnVm
ZmVyVmlldyogYXJyYXkpCiB7Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSB0eXBlID0g
YXJyYXktPmdldFR5cGUoKTsKLSAgICByZXR1cm4gdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVJbnQ4Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgK
LSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OENsYW1wZWQK
LSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQxNgotICAgICAg
ICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQxNgotICAgICAgICAgICB8
fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDMyCi0gICAgICAgICAgIHx8IHR5cGUg
PT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDMyOworICAgIHJldHVybiBKU0M6OmlzSW50KGFy
cmF5LT5nZXRUeXBlKCkpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0
ICJEYXRhVmlldy5oIgogI2ltcG9ydCAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW1w
b3J0ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgpAQCAt
NDcsNiArNDYsOSBAQAogI2ltcG9ydCAiV2ViQ29yZUFWRlJlc291cmNlTG9hZGVyLmgiCiAjaW1w
b3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
KyNpbXBvcnQgPHJ1bnRpbWUvRGF0YVZpZXcuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvT3BlcmF0aW9u
cy5oPgorI2ltcG9ydCA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2ltcG9ydCA8cnVu
dGltZS9VaW50MTZBcnJheS5oPgogI2ltcG9ydCA8cnVudGltZS9VaW50MzJBcnJheS5oPgogI2lt
cG9ydCA8cnVudGltZS9VaW50OEFycmF5Lmg+CkBAIC05MjMsOCArOTI1LDggQEAgYm9vbCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgICAgICAvLyBbNCBieXRlczoga2V5
VVJJIHNpemVdLCBba2V5VVJJIHNpemUgYnl0ZXM6IGtleVVSSV0KICAgICAgICAgdW5zaWduZWQg
a2V5VVJJU2l6ZSA9IGtleVVSSS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhcik7CiAgICAgICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERhdGFCdWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKDQg
KyBrZXlVUklTaXplLCAxKTsKLSAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBpbml0RGF0YVZpZXcg
PSBEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpKTsKLSAgICAgICAgaW5pdERhdGFWaWV3LT5zZXRVaW50MzIoMCwga2V5VVJJU2l6
ZSwgdHJ1ZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3
PiBpbml0RGF0YVZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAs
IGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBpbml0RGF0YVZpZXctPnNl
dDx1aW50MzJfdD4oMCwga2V5VVJJU2l6ZSwgdHJ1ZSk7CiAKICAgICAgICAgUmVmUHRyPFVpbnQx
NkFycmF5PiBrZXlVUklBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIs
IDQsIGtleVVSSS5sZW5ndGgoKSk7CiAgICAgICAgIGtleVVSSUFycmF5LT5zZXRSYW5nZShrZXlV
UkkuY2hhcmFjdGVycygpLCBrZXlVUkkubGVuZ3RoKCkgLyBzaXplb2YodW5zaWduZWQgY2hhciks
IDApOwpAQCAtMTIwNCwxMyArMTIwNiwxMyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IGlu
aXREYXRhLT5idWZmZXIoKTsKIAogICAgIC8vIFVzZSBhIERhdGFWaWV3IHRvIHJlYWQgdWludDMy
IHZhbHVlcyBmcm9tIHRoZSBidWZmZXIsIGFzIFVpbnQzMkFycmF5IHJlcXVpcmVzIHRoZSByZWFk
cyBiZSBhbGlnbmVkIG9uIDQtYnl0ZSBib3VuZGFyaWVzLiAKLSAgICBSZWZQdHI8RGF0YVZpZXc+
IGluaXREYXRhVmlldyA9IERhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXRE
YXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOworICAgIFJlZlB0cjxKU0M6OkRhdGFWaWV3PiBpbml0
RGF0YVZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXRE
YXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBzdGF0dXMgPSB0cnVlOwogCi0gICAgdWlu
dDMyX3Qga2V5VVJJTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVl
LCBlYyk7CisgICAgdWludDMyX3Qga2V5VVJJTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWlu
dDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYg
KGVjIHx8IG9mZnNldCArIGtleVVSSUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBp
ZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBrZXlVUklMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5VVJJ
QXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGtleVVS
SUxlbmd0aCk7CkBAIC0xMjIwLDkgKzEyMjIsOSBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAgICAga2V5VVJJID0gU3RyaW5nKGtleVVSSUFycmF5LT5kYXRhKCks
IGtleVVSSUxlbmd0aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwogICAgIG9mZnNldCArPSBr
ZXlVUklMZW5ndGg7CiAKLSAgICB1aW50MzJfdCBrZXlJRExlbmd0aCA9IGluaXREYXRhVmlldy0+
Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0g
aW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAgICAg
b2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGtleUlETGVuZ3RoID4gaW5pdERh
dGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8IG9mZnNldCArIGtleUlETGVuZ3RoID4g
aW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8
VWludDE2QXJyYXk+IGtleUlEQXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVm
ZmVyLCBvZmZzZXQsIGtleUlETGVuZ3RoKTsKQEAgLTEyMzIsOSArMTIzNCw5IEBAIGJvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBrZXlJRCA9IFN0cmluZyhrZXlJ
REFycmF5LT5kYXRhKCksIGtleUlETGVuZ3RoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAg
ICAgb2Zmc2V0ICs9IGtleUlETGVuZ3RoOwogCi0gICAgdWludDMyX3QgY2VydGlmaWNhdGVMZW5n
dGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50
MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZz
ZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZz
ZXQgKyBjZXJ0aWZpY2F0ZUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0
YXR1cyB8fCBvZmZzZXQgKyBjZXJ0aWZpY2F0ZUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2VydGlmaWNhdGUgPSBVaW50OEFycmF5Ojpj
cmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwgY2VydGlmaWNhdGVMZW5ndGgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDdXN0b21GaWx0ZXIuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMiArMzcsOSBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkZpbHRlckVm
ZmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ3VzdG9tRmlsdGVyUmVuZGVyZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVy
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDggQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVh
bS5oIgogCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKICNpZiBIQVZF
KEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tD
RE0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIkNETS5oIgogI2lu
Y2x1ZGUgIk1lZGlhS2V5RXJyb3IuaCIKKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9VaW50OEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1NDA2OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgWW91IGRvbid0
IG5lZWQgdG8gaW5jbHVkZSBKU1VpbnQ4QXJyYXkgYW55bW9yZSBpZiB5b3UganVzdCB3YW50IHRv
CisgICAgICAgIHVud3JhcCBvbmU7IEpTRE9NQmluZGluZyBnaXZlcyB5b3UgYWxsIG9mIHRoZSB0
aGluZ3MgeW91IG5lZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcDoKKwogMjAxMy0wOC0xNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTUzODc3KTogUGx1Z2luIHNj
YW5uaW5nIHNsb3dzIGNyZWF0aW9uIG9mIFdlYlZpZXdzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU05vdGlmaWNhdGlv
bi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSlNVaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1ByaW50Q29udGV4dC5oPgpJbmRleDogU291cmNlL2F1dG90b29scy9zeW1ib2xzLmZpbHRl
cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmlsdGVyCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMuZmlsdGVyCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjAsNyArMjYwLDYgQEAgX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdzZXRUcmFja3NS
ZXBhaW50cwogX1pOSzdXZWJDb3JlNUZyYW1lMjV0cmFja2VkUmVwYWludFJlY3RzQXNUZXh0RXY7
CiBfWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmpl
Y3RFUE4zV1RGMTFBcnJheUJ1ZmZlckU7CiBfWk43V2ViQ29yZTExRnJhbWVMb2FkZXI2cmVsb2Fk
RWI7Ci1fWk43V2ViQ29yZTEzdG9BcnJheUJ1ZmZlckVOM0pTQzdKU1ZhbHVlRTsKIF9aTjdXZWJD
b3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RWpqamo7CiBfWk43V2ViQ29y
ZTE1SGl0VGVzdExvY2F0aW9uMTJyZWN0Rm9yUG9pbnRFUktOU18xMUxheW91dFBvaW50RWpqamo7
CiBfWk43V2ViQ29yZTIxU2VyaWFsaXplZFNjcmlwdFZhbHVlNmNyZWF0ZUVSS04zV1RGNlN0cmlu
Z0U7CkBAIC0zMDcsOCArMzA2LDYgQEAgX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktO
M1dURjZWZQogX1pON1dlYkNvcmUxNENsaWVudFJlY3RMaXN0QzFFUktOM1dURjZWZWN0b3JJTlNf
OUZsb2F0UXVhZEVMajBFTlMxXzE1Q3Jhc2hPbk92ZXJmbG93RUVFOwogX1pON1dlYkNvcmUxMFRp
bWVSYW5nZXMzYWRkRWRkOwogX1pON1dlYkNvcmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVl
RTsKLV9aTjdXZWJDb3JlMTR0b0Zsb2F0MzJBcnJheUVOM0pTQzdKU1ZhbHVlRTsKLV9aTjdXZWJD
b3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlMwXzEx
QXJyYXlCdWZmZXJFOwogX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pT
RE9NR2xvYmFsT2JqZWN0RVBOU18xMFRpbWVSYW5nZXNFOwogX1pOSzdXZWJDb3JlMTBUaW1lUmFu
Z2VzN25lYXJlc3RFZDsKIF9aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDE5cmVjdEJhc2VkVGVz
dFJlc3VsdEV2OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTMtMDgtMTQgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxk
IGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisKKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtaW52YWxpZC1hcmd1bWVudHMtZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1vdXQtb2YtYm91
bmRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0
LXRlc3RzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11
bml0LXRlc3RzLmh0bWw6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZGF0YS12aWV3LWNy
YXNoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVz
dHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJvbC5qczoKKyAgICAgICAgKGNoZWNrVmll
dyk6CisgICAgICAgICogZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24t
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1h
LWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGguaHRt
bDoKKyAgICAgICAgKiBmYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1kZWRp
Y2F0ZWQtd29ya2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2dsb2JhbC1jb25z
dHJ1Y3RvcnMtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxv
bmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVm
ZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1s
YXJnZS1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9B
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5
LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJy
YXktYWxsb2MtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5
LXZpZXctYWxsb2MuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2Mt
aHVnZS1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9J
bnQzMkFycmF5LWFsbG9jLWh1Z2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdy
ZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxs
b2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanM6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWxhcmdlLWxvbmctbGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVm
ZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQz
MkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJy
YXktYWxsb2MtaHVnZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanM6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJn
ZS5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQz
MkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy5qczogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiB3ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBl
ZGFycmF5cy9hcnJheS11bml0LXRlc3RzLmh0bWw6CisgICAgICAgICogd2ViZ2wvcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvZGF0YS12aWV3LXRlc3Qu
aHRtbDoKKwogMjAxMy0wOC0xNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29t
PgogCiAgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMTk4MTc+IEFYOiBJbnRlZ3JhdGUg
bGF5b3V0IHRlc3RzIGZyb20gb3ZlcmZsb3cgYm91bmRpbmcgYm94ZXMgYXJlIHdheSB0b28gYmln
OyBwcmV2ZW50cyBWb2ljZU92ZXIgdGFwcyBmcm9tIGFjdGl2YXRpbmcgdGhlIHJpZ2h0IGVsZW1l
bnRzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtaW52YWxp
ZC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNl
dC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMjcg
KzIsMjcgQEAgVmVyaWZpZXMgdGhhdCBhdHRlbXB0aW5nIHRvIHNldCBpbnZhbGlkIAogCiBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJheS5z
ZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBhcmd1
bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9u
IFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXkuc2V0
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNT
IHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB0
eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJn
dW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChvdGhl
ckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJh
bmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBO
b3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRB
cnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4
IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdo
ZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQu
Ci1QQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBl
ZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZh
bGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRB
cnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50
cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJh
eSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4u
CitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0
ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29y
bGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUg
YW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcy4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJy
YXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFy
Z3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJy
YXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9m
ZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVu
dC4KK1BBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRB
cnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNT
IHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQg
bGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2Jq
ZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0
IG9mIGJvdW5kcy4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0
KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50
IHNob3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBh
bmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BB
U1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5z
ZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNp
c3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVk
QXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qg
b25lIGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0Lgor
UEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJv
dW5kcy4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3Vu
ZHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2FycmF5LXNldC1vdXQtb2YtYm91bmRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0MDY0
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3Vu
ZHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDI2ICs0LDI2IEBAIE9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogUmVncmVzc2lvbiB0ZXN0IGZvciBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMzNTIgOiBQYXNzaW5nIGFy
cmF5IHRoYXQgaXMgdG9vIGxhcmdlIHRvIHNldCBtZXRob2Qgb2YgV2ViR0xBcnJheXMgZG9lcyBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCiBUZXN0aW5nIEludDhBcnJheQotUEFTUyB3ZWJHTEFycmF5
LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQg
b2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5n
IG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5
LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0
aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50
OEFycmF5Ci1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0
LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5n
ZS4uCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBi
b3VuZHMuCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBv
ZiBib3VuZHMuCiBUZXN0aW5nIEludDE2QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVd
LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4K
LVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAx
KSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQg
YW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUs
IDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZz
ZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFRlc3RpbmcgVWludDE2QXJyYXkKLVBB
U1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
SW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0
aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mg
d2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BB
U1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjog
UmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4K
IFRlc3RpbmcgSW50MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJH
TEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBp
cyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVu
Z3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50MzJBcnJheQotUEFTUyB3ZWJHTEFy
cmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBv
dXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2Vw
dGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5
LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0
aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFy
cmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25z
aXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBG
bG9hdDMyQXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJheS5z
ZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9m
IHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24g
UmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0
IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUg
b3V0IG9mIGJvdW5kcy4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBD
T01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10
ZXN0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA2NCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDE5ICs0LDkgQEAgT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQQogCiBQQVNTIHRlc3RTbGljZQogdGVzdCBpbmhlcml0YW5jZSBo
aWVyYXJjaHkgb2YgdHlwZWQgYXJyYXkgdmlld3MKLVBBU1MgQXJyYXlCdWZmZXJWaWV3IGRvZXMg
bm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYW5kIHNob3Vs
ZCBiZSBkZWZpbmVkCi1QQVNTIG5ldyBJbnQ4QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZl
clZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgVWludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVm
ZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9m
IEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBJbnQxNkFycmF5KDEpIGluc3RhbmNl
b2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IFVpbnQxNkFycmF5KDEpIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEludDMyQXJyYXkoMSkgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgVWludDMyQXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgRmxvYXQzMkFycmF5
KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEZsb2F0NjRB
cnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBEYXRh
VmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRy
dWUKLVBBU1MgbmV3IEFycmF5QnVmZmVyVmlldygpIHRocmV3IFR5cGVFcnJvcgotUEFTUyBuZXcg
VWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50OEFycmF5IGlzIHRydWUKK1BBU1Mg
QXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYW5kIGlzCitXQVJOOiBzaG91bGRC
ZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cworUEFTUyBuZXcgVWludDhDbGFtcGVkQXJyYXko
MSkgaW5zdGFuY2VvZiBVaW50OEFycmF5IGlzIGZhbHNlCiBQQVNTIHRlc3QgRmxvYXQzMkFycmF5
IFNldEFuZEdldFBvczEwVG9OZWcxMAogUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBDb25zdHJ1Y3RX
aXRoQXJyYXlPZlNpZ25lZFZhbHVlcwogUEFTUyB0ZXN0IEZsb2F0MzJBcnJheSBDb25zdHJ1Y3RX
aXRoVHlwZWRBcnJheU9mU2lnbmVkVmFsdWVzCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCShyZXZpc2lvbiAxNTQwNjQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSwyNiArMTE5LDEyIEBAIGZ1bmN0aW9uIHRlc3RJbmhlcml0
YW5jZUhpZXJhcmNoeSgpIHsKIAogICB0cnkgewogICAgIHZhciBmb28gPSBBcnJheUJ1ZmZlclZp
ZXc7Ci0gICAgdGVzdFBhc3NlZCgnQXJyYXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUgW05vSW50
ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYW5kIHNob3VsZCBiZSBkZWZpbmVkJyk7
Ci0KLSAgICBzaG91bGRCZSgnbmV3IEludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVy
VmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50OEFycmF5KDEpIGluc3RhbmNl
b2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xh
bXBlZEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBz
aG91bGRCZSgnbmV3IEludDE2QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAn
dHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDE2QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJh
eUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgSW50MzJBcnJheSgxKSBp
bnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBV
aW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAg
c2hvdWxkQmUoJ25ldyBGbG9hdDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcn
LCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRmxvYXQ2NEFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IERhdGFWaWV3KG5l
dyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwot
Ci0gICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7IG5ldyBBcnJheUJ1ZmZlclZp
ZXcoKSB9LCAibmV3IEFycmF5QnVmZmVyVmlldygpIik7CisgICAgdGVzdEZhaWxlZCgiQXJyYXlC
dWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYnV0IGlzIGRlZmluZWQiKTsKICAgfSBjYXRj
aCAoZSkgewotICAgIHRlc3RGYWlsZWQoJ0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZlIFtO
b0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRlIGJ1dCB3YXMgbm90IGRlZmluZWQn
KTsKKyAgICB0ZXN0UGFzc2VkKCdBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBh
bmQgaXMnKTsKICAgfQogCi0gIC8vIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBraW5kIG9m
IHZpZXcgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIKLSAgc2hvdWxkQmUoJ25ldyBVaW50OENs
YW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXknLCAndHJ1ZScpOworICBzaG91bGRC
ZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScsIGZhbHNl
KTsKIH0KIAogLy8KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2RhdGEtdmll
dy1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZGF0YS12aWV3LWNyYXNoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0MDY0KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZGF0YS12aWV3LWNyYXNoLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw4ICsyLDggQEAgVGVzdCB0aGF0IERhdGFWaWV3IGRv
ZXMgbm90IGNyYXNoIHdpdGggYgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLVBBU1Mg
dmlldyA9IG5ldyBEYXRhVmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAwKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogU2l6ZSBpcyB0b28gbGFyZ2UgKG9yIGlzIG5lZ2F0aXZlKS4uCi1Q
QVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVmZmVyLCAtNDUwMDAwMDAwMCwgNDUwMDAw
MDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFNpemUgaXMgdG9vIGxhcmdlIChvciBp
cyBuZWdhdGl2ZSkuLgorUEFTUyB2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5LmJ1ZmZlciwgLTQ1
MDAwMDAwMDApIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBCeXRlIG9mZnNldCBhbmQgbGVu
Z3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIuCitQQVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJy
YXkuYnVmZmVyLCAtNDUwMDAwMDAwMCwgNDUwMDAwMDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdl
RXJyb3I6IEJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlci4KIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5z
ZmVyLW9mLWNvbnRyb2wuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10
ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0xMyw2ICsxMyw3IEBAIHZhciBiYXNpY0J1ZmZlclR5cGVzID0KICAgICBbIlVpbnQzMiIsIFVp
bnQzMkFycmF5LCA0XSwKICAgICBbIkludDgiLCBJbnQ4QXJyYXksIDFdLAogICAgIFsiVWludDgi
LCBVaW50OEFycmF5LCAxXSwKKyAgICBbIlVpbnQ4Q2xhbXBlZCIsIFVpbnQ4Q2xhbXBlZEFycmF5
LCAxXSwKICAgICBbIkludDE2IiwgSW50MTZBcnJheSwgMl0sCiAgICAgWyJVaW50MTYiLCBVaW50
MTZBcnJheSwgMl0sCiAgICAgWyJGbG9hdDMyIiwgRmxvYXQzMkFycmF5LCA0XSwKQEAgLTIwMCw3
ICsyMDEsNyBAQCBmdW5jdGlvbiBjaGVja1ZpZXcodGVzdE5hbWUsIHR5cGVkQXJyYXlUCiAgICAg
fQogICAgIGlmICh2aWV3LmJ1ZmZlci5ieXRlTGVuZ3RoICE9PSBhcnJheVNpemUgfHwKICAgICAg
ICAgKCEodmlldyBpbnN0YW5jZW9mIERhdGFWaWV3KSAmJiB2aWV3Lmxlbmd0aCAhPT0gYXJyYXlF
ZmZlY3RpdmVTaXplIC8gdmlldy5CWVRFU19QRVJfRUxFTUVOVCkpIHsKLSAgICAgICAgdGVzdEZh
aWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgaGFzIHRoZSB3cm9uZyBsZW5ndGggKCIgKyB2aWV3Lmxl
bmd0aCArICIpIik7CisgICAgICAgIHRlc3RGYWlsZWQodGVzdE5hbWUgKyAiOiB2aWV3IGhhcyB0
aGUgd3JvbmcgbGVuZ3RoICgiICsgdmlldy5sZW5ndGggKyAiIGluc3RlYWQgb2YgIiArIGFycmF5
RWZmZWN0aXZlU2l6ZSArICIgLyAiICsgdmlldy5CWVRFU19QRVJfRUxFTUVOVCArICIpIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHZpZXcuYnl0ZU9mZnNldCAhPT0g
YXJyYXlPZmZzZXQpIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1
Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1
Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMywyNSAr
MywxNSBAQCBUaGlzIHRlc3RzIGlmIFR5cGVFcnJvciBpcyB0aHJvd24gb3Igbm90CiBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBBcnJheUJ1ZmZlcigpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEFycmF5QnVmZmVyQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2
YWx1YXRpbmcgJ0FycmF5QnVmZmVyKCknKS4KIFNLSVAgQXVkaW9Db250ZXh0IGlzIG5vdCBpbXBs
ZW1lbnRlZC4KIFBBU1MgRm9ybURhdGEoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGb3Jt
RGF0YUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdGb3JtRGF0YSgp
JykuCi1QQVNTIERhdGFWaWV3KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRGF0YVZpZXdD
b25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnRGF0YVZpZXcoKScpLgog
UEFTUyBFdmVudFNvdXJjZSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEV2ZW50U291cmNl
Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0V2ZW50U291cmNlKCkn
KS4KIFBBU1MgRmlsZVJlYWRlcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpbGVSZWFk
ZXJDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnRmlsZVJlYWRlcigp
JykuCi1QQVNTIEZsb2F0MzJBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZsb2F0
MzJBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdGbG9hdDMy
QXJyYXkoKScpLgotUEFTUyBGbG9hdDY0QXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAn
RmxvYXQ2NEFycmF5KCknKS4KIFBBU1MgQXVkaW8oKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBBdWRpb0NvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdBdWRpbygp
JykuCiBQQVNTIEltYWdlKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW1hZ2VDb25zdHJ1
Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnSW1hZ2UoKScpLgogUEFTUyBPcHRp
b24oKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25Db25zdHJ1Y3RvciBpcyBub3Qg
YSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnT3B0aW9uKCknKS4KLVBBU1MgSW50MTZBcnJheSgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDE2QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBm
dW5jdGlvbiAoZXZhbHVhdGluZyAnSW50MTZBcnJheSgpJykuCi1QQVNTIEludDMyQXJyYXkoKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnQzMkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEg
ZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0ludDMyQXJyYXkoKScpLgotUEFTUyBJbnQ4QXJyYXkoKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnQ4QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBm
dW5jdGlvbiAoZXZhbHVhdGluZyAnSW50OEFycmF5KCknKS4KIFBBU1MgTWVzc2FnZUNoYW5uZWwo
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yIGlz
IG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdNZXNzYWdlQ2hhbm5lbCgpJykuCiBQQVNTIFNo
YXJlZFdvcmtlcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFNoYXJlZFdvcmtlckNvbnN0
cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdTaGFyZWRXb3JrZXIoKScpLgot
UEFTUyBVaW50MTZBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFVpbnQxNkFycmF5
Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1VpbnQxNkFycmF5KCkn
KS4KLVBBU1MgVWludDMyQXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVaW50MzJB
cnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdVaW50MzJBcnJh
eSgpJykuCi1QQVNTIFVpbnQ4QXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBVaW50
OEFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1VpbnQ4QXJy
YXkoKScpLgogUEFTUyBXZWJLaXRDU1NNYXRyaXgoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGlu
ZyAnV2ViS2l0Q1NTTWF0cml4KCknKS4KIFBBU1MgV2ViS2l0UG9pbnQoKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBXZWJLaXRQb2ludENvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdXZWJLaXRQb2ludCgpJykuCiBQQVNTIFdlYlNvY2tldCgpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IFdlYlNvY2tldENvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdXZWJTb2NrZXQoKScpLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vY2Fs
bC1hLWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sCShyZXZp
c2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3It
YXMtYS1mdW5jdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQAogCiBkZXNj
cmlwdGlvbigiVGhpcyB0ZXN0cyBpZiBUeXBlRXJyb3IgaXMgdGhyb3duIG9yIG5vdCB3aGVuIHdl
IGNhbGwgYSBjb25zdHJ1Y3RvciBhcyBhIG5vcm1hbCBmdW5jdGlvbi4iKTsKIAotdmFyIHRlc3Rf
Y29uc3RydWN0b3JzID0gWyJBcnJheUJ1ZmZlciIsICJBdWRpb0NvbnRleHQiLCAiRm9ybURhdGEi
LCAiRGF0YVZpZXciLCAiRXZlbnRTb3VyY2UiLCAiRmlsZVJlYWRlciIsICJGbG9hdDMyQXJyYXki
LCAiRmxvYXQ2NEFycmF5IiwgIkF1ZGlvIiwgIkltYWdlIiwgIk9wdGlvbiIsICJJbnQxNkFycmF5
IiwgIkludDMyQXJyYXkiLCAiSW50OEFycmF5IiwgIk1lc3NhZ2VDaGFubmVsIiwgIlNoYXJlZFdv
cmtlciIsICJVaW50MTZBcnJheSIsICJVaW50MzJBcnJheSIsICJVaW50OEFycmF5IiwgIldlYktp
dENTU01hdHJpeCIsICJXZWJLaXRQb2ludCIsICJXZWJTb2NrZXQiLCAiV29ya2VyIiwgIlhNTEh0
dHBSZXF1ZXN0IiwgIlhTTFRQcm9jZXNzb3IiXTsKK3ZhciB0ZXN0X2NvbnN0cnVjdG9ycyA9IFsi
QXVkaW9Db250ZXh0IiwgIkZvcm1EYXRhIiwgIkV2ZW50U291cmNlIiwgIkZpbGVSZWFkZXIiLCAi
QXVkaW8iLCAiSW1hZ2UiLCAiT3B0aW9uIiwgIk1lc3NhZ2VDaGFubmVsIiwgIlNoYXJlZFdvcmtl
ciIsICJXZWJLaXRDU1NNYXRyaXgiLCAiV2ViS2l0UG9pbnQiLCAiV2ViU29ja2V0IiwgIldvcmtl
ciIsICJYTUxIdHRwUmVxdWVzdCIsICJYU0xUUHJvY2Vzc29yIl07CiAKIHRlc3RfY29uc3RydWN0
b3JzLmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSB7CiAgICAgaWYgKGV2YWwoIndpbmRv
dy4iICsgY29uc3RydWN0b3IpKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9jb25zdHJ1Y3Rv
ci1sZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2NvbnN0cnVj
dG9yLWxlbmd0aC5odG1sCShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L2NvbnN0cnVjdG9yLWxlbmd0aC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNSwxOCArMTUsMTgg
QEAgc2hvdWxkQmUoJ0Nsb3NlRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3VsZEJlKCdDdXN0b21F
dmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0RPTUZvcm1EYXRhLmxlbmd0aCcsICcwJyk7
CiBzaG91bGRCZSgnRE9NUGFyc2VyLmxlbmd0aCcsICcwJyk7Ci1zaG91bGRCZSgnRGF0YVZpZXcu
bGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdEYXRhVmlldy5sZW5ndGgnLCAnMycpOwogc2hvdWxk
QmUoJ0Vycm9yRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3VsZEJlKCdFdmVudC5sZW5ndGgnLCAn
MScpOwogc2hvdWxkQmUoJ0V2ZW50U291cmNlLmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnRmxv
YXQzMkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnRmxvYXQ2NEFycmF5Lmxlbmd0aCcs
ICcxJyk7CitzaG91bGRCZSgnRmxvYXQzMkFycmF5Lmxlbmd0aCcsICczJyk7CitzaG91bGRCZSgn
RmxvYXQ2NEFycmF5Lmxlbmd0aCcsICczJyk7CiBzaG91bGRCZSgnRmlsZVJlYWRlci5sZW5ndGgn
LCAnMCcpOwogc2hvdWxkQmUoJ0ZpbGVSZWFkZXJTeW5jLmxlbmd0aCcsICcwJyk7CiBzaG91bGRC
ZSgnSGFzaENoYW5nZUV2ZW50Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnSW50MTZBcnJheS5s
ZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ0ludDMyQXJyYXkubGVuZ3RoJywgJzEnKTsKLXNob3Vs
ZEJlKCdJbnQ4QXJyYXkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdJbnQxNkFycmF5Lmxlbmd0
aCcsICczJyk7CitzaG91bGRCZSgnSW50MzJBcnJheS5sZW5ndGgnLCAnMycpOworc2hvdWxkQmUo
J0ludDhBcnJheS5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ0ludGVudC5sZW5ndGgnLCAnMycp
Owogc2hvdWxkQmUoJ01lZGlhQ29udHJvbGxlci5sZW5ndGgnLCAnMCcpOwogc2hvdWxkQmUoJ01l
ZGlhU3RyZWFtLmxlbmd0aCcsICcwJyk7CkBAIC00MiwxMCArNDIsMTAgQEAgc2hvdWxkQmUoJ1No
YXJlZFdvcmtlci5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1N0b3JhZ2VFdmVudC5sZW5ndGgn
LCAnMScpOwogc2hvdWxkQmUoJ1RleHRUcmFja0N1ZS5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUo
J1RyYWNrRXZlbnQubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdVaW50MTZBcnJheS5sZW5ndGgn
LCAnMScpOwotc2hvdWxkQmUoJ1VpbnQzMkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgn
VWludDhBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQ4Q2xhbXBlZEFycmF5Lmxl
bmd0aCcsICcxJyk7CitzaG91bGRCZSgnVWludDE2QXJyYXkubGVuZ3RoJywgJzMnKTsKK3Nob3Vs
ZEJlKCdVaW50MzJBcnJheS5sZW5ndGgnLCAnMycpOworc2hvdWxkQmUoJ1VpbnQ4QXJyYXkubGVu
Z3RoJywgJzMnKTsKK3Nob3VsZEJlKCdVaW50OENsYW1wZWRBcnJheS5sZW5ndGgnLCAnMycpOwog
c2hvdWxkQmUoJ1dlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnV2Vi
S2l0QW5pbWF0aW9uRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3VsZEJlKCdXZWJLaXRDU1NNYXRy
aXgubGVuZ3RoJywgJzAnKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0
cnVjdG9ycy1hdHRyaWJ1dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVz
LWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1kZWRpY2F0ZWQt
d29ya2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNCwyMSArNCwxMSBAQCBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogU3RhcnRpbmcgd29ya2Vy
OiBzY3JpcHQtdGVzdHMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLmpzCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZm
ZXInKS52YWx1ZSBpcyBBcnJheUJ1ZmZlcgotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdB
cnJheUJ1ZmZlcicpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnQmxvYicpLnZhbHVlIGlzIEJsb2IKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnQmxvYicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5lbnVt
ZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnQmxvYicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS52YWx1
ZSBpcyBEYXRhVmlldwotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0
YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmVudW1lcmFi
bGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdEYXRhVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUnKS52YWx1ZSBpcyBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZQogUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlJykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGUnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKQEAg
LTM5LDMxICsyOSw2IEBAIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3IK
IFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
aWxlUmVhZGVyU3luYycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJT
eW5jJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuY29uZmlndXJhYmxlIGlz
IHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdGbG9hdDMyQXJyYXknKS52YWx1ZSBpcyBGbG9hdDMyQXJyYXkKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQz
MkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS52YWx1ZSBpcyBGbG9h
dDY0QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9h
dDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykudmFsdWUgaXMgSW50MTZBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgn
Z2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW50MTZBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuY29uZmlndXJhYmxl
IGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQzMkFycmF5JykudmFsdWUgaXMgSW50MzJBcnJheQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5oYXNP
d25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3Nl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5Jyku
Y29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS52YWx1ZSBpcyBJbnQ4QXJyYXkKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJy
YXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFy
cmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLnZhbHVlIGlzIE1lc3Nh
Z2VDaGFubmVsCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UK
IFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdN
ZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtNzksMjYg
KzQ0LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcgogUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwn
KS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykudmFsdWUgaXMgVWludDE2QXJyYXkK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5Jyku
aGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5lbnVtZXJhYmxlIGlz
IGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnVWludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykudmFs
dWUgaXMgVWludDMyQXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJy
YXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQ4QXJyYXknKS52YWx1ZSBpcyBVaW50OEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3Bl
cnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdVaW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykudmFsdWUgaXMgVWludDhDbGFtcGVkQXJy
YXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4
Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVk
QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5jb25maWd1cmFi
bGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1dlYlNvY2tldCcpLnZhbHVlIGlzIFdlYlNvY2tldAogUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3Jz
LWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJp
YnV0ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04LDE2ICs4LDYgQEAgUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsbwogUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0FuYWx5c2VyTm9kZScpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBbmFseXNlck5vZGUnKS5jb25maWd1cmFibGUg
aXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Fy
cmF5QnVmZmVyJykudmFsdWUgaXMgQXJyYXlCdWZmZXIKLVBBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093blByb3BlcnR5KCdnZXQn
KSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5lbnVtZXJh
YmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnQXJyYXlCdWZmZXInKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmlldycpLnZhbHVlIGlzIEFy
cmF5QnVmZmVyVmlldwotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0FycmF5QnVmZmVyVmlldycpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmll
dycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmlldycpLmVudW1lcmFibGUgaXMg
ZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJh
eUJ1ZmZlclZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0F0dHInKS52YWx1ZSBpcyBBdHRyCiBQQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXR0cicpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0F0dHInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKQEAgLTI2MywxMSAr
MjUzLDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsbwogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRva2VuTGlzdCcpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRva2VuTGlzdCcpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdET01Ub2tlbkxpc3Qn
KS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykudmFsdWUgaXMgRGF0YVZpZXcKLVBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5lbnVtZXJh
YmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnRGF0YVZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScpLnZhbHVlIGlzIERlbGF5Tm9kZQog
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScp
Lmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBp
cyBmYWxzZQpAQCAtMzQ4LDE2ICszMzMsNiBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnRmlsZVJlYWRlcicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXInKS5lbnVtZXJh
YmxlIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnRmlsZVJlYWRlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykudmFsdWUgaXMgRmxvYXQz
MkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuaGFzT3duUHJv
cGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmNvbmZp
Z3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRmxvYXQ2NEFycmF5JykudmFsdWUgaXMgRmxvYXQ2NEFycmF5Ci1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJv
cGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNl
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFy
cmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRm9jdXNFdmVudCcpLnZh
bHVlIGlzIEZvY3VzRXZlbnQKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdGb2N1c0V2ZW50JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRm9jdXNFdmVudCcpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtNzQ4LDIxICs3MjMsNiBAQCBQQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW1hZ2VEYXRhJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ltYWdlRGF0YScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1Q
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScp
LnZhbHVlIGlzIEludDE2QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1Q
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScp
Lmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1Q
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLnZhbHVlIGlzIEludDMyQXJyYXkKLVBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuaGFzT3duUHJv
cGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQot
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXkn
KS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykudmFsdWUgaXMg
SW50OEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmNvbmZpZ3VyYWJsZSBp
cyB0cnVlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnS2V5
Ym9hcmRFdmVudCcpLnZhbHVlIGlzIEtleWJvYXJkRXZlbnQKIFBBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdLZXlib2FyZEV2ZW50JykuaGFzT3duUHJvcGVydHko
J2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnS2V5Ym9hcmRFdmVudCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAt
MTc5OCwyNiArMTc1OCw2IEBAIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5o
YXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuY29uZmlndXJhYmxlIGlz
IHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
MTZBcnJheScpLnZhbHVlIGlzIFVpbnQxNkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0Jykg
aXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuZW51bWVyYWJs
ZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQxNkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLnZhbHVlIGlzIFVpbnQzMkFy
cmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMy
QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5
KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuY29uZmlndXJhYmxl
IGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50OEFycmF5JykudmFsdWUgaXMgVWludDhBcnJheQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0Jykg
aXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmVudW1lcmFibGUg
aXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50OEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLnZhbHVlIGlzIFVpbnQ4
Q2xhbXBlZEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRB
cnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuZW51bWVyYWJs
ZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQ4Q2xhbXBlZEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXYXZlU2hhcGVyTm9kZScpLnZhbHVlIGlz
IFdhdmVTaGFwZXJOb2RlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnV2F2ZVNoYXBlck5vZGUnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXYXZlU2hhcGVyTm9k
ZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0
b3JzLWF0dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA2
NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVz
LXNoYXJlZC13b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDIxICs0LDEx
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBTdGFydGlu
ZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMuanMK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdB
cnJheUJ1ZmZlcicpLnZhbHVlIGlzIEFycmF5QnVmZmVyCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9w
ZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093blByb3BlcnR5KCdzZXQnKSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyJykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuY29u
ZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykudmFsdWUgaXMgQmxvYgogUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxv
YicpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmll
dycpLnZhbHVlIGlzIERhdGFWaWV3Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3Jyku
ZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdFdmVudFNv
dXJjZScpLnZhbHVlIGlzIEV2ZW50U291cmNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRXZlbnRTb3VyY2UnKS5oYXNPd25Qcm9wZXJ0eSgn
Z2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxz
ZQpAQCAtMzQsMzEgKzI0LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ZpbGVSZWFkZXJTeW5jJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJl
YWRlclN5bmMnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5jb25maWd1cmFi
bGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLnZhbHVlIGlzIEZsb2F0MzJBcnJheQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJh
eScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmhhc093blBy
b3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
bG9hdDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLnZhbHVlIGlz
IEZsb2F0NjRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJh
eScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0ludDE2QXJyYXknKS52YWx1ZSBpcyBJbnQxNkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blByb3Bl
cnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdJbnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS52YWx1ZSBpcyBJbnQzMkFycmF5Ci1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScp
Lmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJy
YXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLnZhbHVlIGlzIEludDhBcnJheQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0lu
dDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJ
bnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykudmFsdWUgaXMg
TWVzc2FnZUNoYW5uZWwKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkBAIC03
OSwyNiArNDQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJM
JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuZW51bWVyYWJsZSBpcyBmYWxz
ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VSTCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS52YWx1ZSBpcyBVaW50MTZB
cnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJy
YXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmVudW1lcmFi
bGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVaW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXkn
KS52YWx1ZSBpcyBVaW50MzJBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBp
cyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnVWludDhBcnJheScpLnZhbHVlIGlzIFVpbnQ4QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS52YWx1ZSBpcyBVaW50OENsYW1w
ZWRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
VWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENs
YW1wZWRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmNvbmZp
Z3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykudmFsdWUgaXMgV2ViU29ja2V0CiBQQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0Jyku
aGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlC
dWZmZXItSW50OEFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5
LWFsbG9jLWh1Z2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1s
aXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdl
LWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2Ut
bG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9B
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1h
bGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZl
ZC1idWZmZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2
ZWQtYnVmZmVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
QXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJy
YXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2
ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
QXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVk
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVk
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZp
ZXctYWxsb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJy
YXktdmlldy1hbGxvYworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXkt
SW50OEFycmF5LXZpZXctYWxsb2MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5
LXZpZXctYWxsb2MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1h
bGxvYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2Mt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXkt
YWxsb2MtaHVnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtaHVnZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJy
YXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25n
LWxpdmVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1o
dWdlLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZl
ZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1odWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFy
Z2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXkt
YWxsb2MtbGFyZ2UKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0lu
dDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmct
bGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9u
IHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxh
cmdlLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1s
b25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1s
aXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJn
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxs
b2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sb25nLWxp
dmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxs
b2MtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1odWdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxv
bmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK3ZhciBhcnJheSA9IG5l
dyBBcnJheSgxMDAwKTsKKwordmFyIG4gPSAxMDAwMDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICBhcnJheVsoaSAvIChuIC8gYXJyYXkubGVuZ3RoKSkgfCAwXSA9IG5ldyBJ
bnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKDEwMDAwMCkpOworfQorCitmb3IgKHZhciBpID0gMDsg
aSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMDAw
MDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5W2ld
Lmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGggIT0gMTAwMDAwKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBhcnJheSBidWZmZXIgbGVuZ3RoOiAiICsgYXJyYXlb
aV0uYnVmZmVyLmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxp
dmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDExIEBACit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMDApOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhd
ID0gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTAwMCkpOworCitmb3IgKHZhciBpID0g
MDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAx
MDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBsZW5ndGg6ICIgKyBhcnJheVtpXS5sZW5n
dGg7CisgICAgaWYgKGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoICE9IDEwMDApCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIGJ1ZmZlci5ieXRlTGVuZ3RoOiAiICsgYXJyYXlbaV0uYnVmZmVy
LmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZm
ZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmpzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMCk7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5Lmxlbmd0aF0gPSBuZXcg
SW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigxMCkpLmJ1ZmZlcjsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIGlmIChhcnJheVtpXS5ieXRlTGVuZ3RoICE9
IDEwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBieXRlTGVuZ3RoOiAiICsgYXJyYXlbaV0u
Ynl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZl
ci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK3ZhciBhcnJh
eSA9IG5ldyBBcnJheSgxMDAwMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgNzAwMDA7ICsraSkK
KyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQ4QXJyYXkobmV3IEFycmF5QnVm
ZmVyKDEwKSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAg
ICBpZiAoYXJyYXlbaV0ubGVuZ3RoICE9IDEwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBs
ZW5ndGg6ICIgKyBhcnJheVtpXS5sZW5ndGg7CisgICAgaWYgKGFycmF5W2ldLmJ1ZmZlci5ieXRl
TGVuZ3RoICE9IDEwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBidWZmZXIuYnl0ZUxlbmd0
aDogIiArIGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1h
bGxvYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitmb3IgKHZhciBpID0gMDsgaSA8
IDcwMDAwOyArK2kpCisgICAgbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTApKTsKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5
LUludDhBcnJheS12aWV3LWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5q
cwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1IEBACitmb3IgKHZhciBpID0gMDsgaSA8IDMwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJy
YXkxID0gbmV3IEludDMyQXJyYXkoMTApOworICAgIHZhciBhcnJheTIgPSBuZXcgSW50OEFycmF5
KGFycmF5MS5idWZmZXIpOworfQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJh
eS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxp
dmVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACit2YXIgYXJyYXkgPSBuZXcgQXJy
YXkoMTAwMCk7CisKK3ZhciBuID0gMTAwMDA7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgYXJyYXlbKGkgLyAobiAvIGFycmF5Lmxlbmd0aCkpIHwgMF0gPSBuZXcgSW50MzJB
cnJheSgxMDAwMDApOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytp
KSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMDAwMDApCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKK30KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1o
dWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyAr
K2kpCisgICAgbmV3IEludDMyQXJyYXkoMTAwMDAwMCk7CisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxp
dmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAordmFy
IGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAw
OyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5Lmxlbmd0aF0gPSBuZXcgSW50MzJBcnJheSgxMDAw
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIGlmIChh
cnJheVtpXS5sZW5ndGggIT0gMTAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkg
bGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJh
eS1hbGxvYy1sYXJnZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJnZS5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyIEBACitmb3IgKHZhciBpID0gMDsgaSA8IDUwMDA7ICsraSkKKyAgICBuZXcg
SW50MzJBcnJheSgxMDAwMCk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2Mt
bG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMDApOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDIwMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3Ro
XSA9IG5ldyBJbnQzMkFycmF5KDEwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5n
dGg7ICsraSkgeworICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTApCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKK30KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxv
Yy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktYWxsb2MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMiBAQAorZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDA7ICsraSkKKyAgICBu
ZXcgSW50MzJBcnJheSgxMCk7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9q
cy9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2pzL2Nv
bnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExLDE4ICsx
MSwxOCBAQCBQQVNTIENsb3NlRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgQ3VzdG9tRXZlbnQubGVu
Z3RoIGlzIDEKIEZBSUwgRE9NRm9ybURhdGEubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNl
cHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IERPTUZvcm1EYXRhCiBQ
QVNTIERPTVBhcnNlci5sZW5ndGggaXMgMAotUEFTUyBEYXRhVmlldy5sZW5ndGggaXMgMQorUEFT
UyBEYXRhVmlldy5sZW5ndGggaXMgMwogUEFTUyBFcnJvckV2ZW50Lmxlbmd0aCBpcyAxCiBQQVNT
IEV2ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIEV2ZW50U291cmNlLmxlbmd0aCBpcyAxCi1QQVNTIEZs
b2F0MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBGbG9hdDY0QXJyYXkubGVuZ3RoIGlzIDEKK1BB
U1MgRmxvYXQzMkFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIEZsb2F0NjRBcnJheS5sZW5ndGggaXMg
MwogUEFTUyBGaWxlUmVhZGVyLmxlbmd0aCBpcyAwCiBGQUlMIEZpbGVSZWFkZXJTeW5jLmxlbmd0
aCBzaG91bGQgYmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5k
IHZhcmlhYmxlOiBGaWxlUmVhZGVyU3luYwogUEFTUyBIYXNoQ2hhbmdlRXZlbnQubGVuZ3RoIGlz
IDEKLVBBU1MgSW50MTZBcnJheS5sZW5ndGggaXMgMQotUEFTUyBJbnQzMkFycmF5Lmxlbmd0aCBp
cyAxCi1QQVNTIEludDhBcnJheS5sZW5ndGggaXMgMQorUEFTUyBJbnQxNkFycmF5Lmxlbmd0aCBp
cyAzCitQQVNTIEludDMyQXJyYXkubGVuZ3RoIGlzIDMKK1BBU1MgSW50OEFycmF5Lmxlbmd0aCBp
cyAzCiBGQUlMIEludGVudC5sZW5ndGggc2hvdWxkIGJlIDMuIFRocmV3IGV4Y2VwdGlvbiBSZWZl
cmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogSW50ZW50CiBQQVNTIE1lZGlhQ29udHJv
bGxlci5sZW5ndGggaXMgMAogRkFJTCBNZWRpYVN0cmVhbS5sZW5ndGggc2hvdWxkIGJlIDAuIFRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogTWVkaWFT
dHJlYW0KQEAgLTM4LDEwICszOCwxMCBAQCBQQVNTIFNoYXJlZFdvcmtlci5sZW5ndGggaXMgMQog
UEFTUyBTdG9yYWdlRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgVGV4dFRyYWNrQ3VlLmxlbmd0aCBp
cyAzCiBQQVNTIFRyYWNrRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgVWludDE2QXJyYXkubGVuZ3Ro
IGlzIDEKLVBBU1MgVWludDMyQXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgVWludDhBcnJheS5sZW5n
dGggaXMgMQotUEFTUyBVaW50OENsYW1wZWRBcnJheS5sZW5ndGggaXMgMQorUEFTUyBVaW50MTZB
cnJheS5sZW5ndGggaXMgMworUEFTUyBVaW50MzJBcnJheS5sZW5ndGggaXMgMworUEFTUyBVaW50
OEFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIFVpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCBpcyAzCiBQ
QVNTIFdlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIFdlYktpdEFuaW1hdGlvbkV2
ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIFdlYktpdENTU01hdHJpeC5sZW5ndGggaXMgMApJbmRleDog
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
dHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL3R5cGVkYXJy
YXlzL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVz
dHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJh
eXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMjYgKzE0OSwx
MyBAQCBmdW5jdGlvbiB0ZXN0SW5oZXJpdGFuY2VIaWVyYXJjaHkoKSB7CiAKICAgdHJ5IHsKICAg
ICB2YXIgZm9vID0gQXJyYXlCdWZmZXJWaWV3OwotICAgIHRlc3RQYXNzZWQoJ0FycmF5QnVmZmVy
VmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRl
IGFuZCBzaG91bGQgYmUgZGVmaW5lZCcpOwotCi0gICAgc2hvdWxkQmUoJ25ldyBJbnQ4QXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCdu
ZXcgVWludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0g
ICAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVm
ZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBJbnQxNkFycmF5KDEpIGluc3Rh
bmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQx
NkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91
bGRCZSgnbmV3IEludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1
ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1
ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRmxvYXQzMkFycmF5KDEpIGlu
c3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IEZs
b2F0NjRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAg
c2hvdWxkQmUoJ25ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpIGluc3RhbmNlb2YgQXJy
YXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLQotICAgIHNob3VsZFRocm93VHlwZUVycm9yKGZ1bmN0
aW9uKCkgeyBuZXcgQXJyYXlCdWZmZXJWaWV3KCkgfSwgIm5ldyBBcnJheUJ1ZmZlclZpZXcoKSIp
OworICAgIHRlc3RGYWlsZWQoIkFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgdW5kZWZpbmVkIGJ1
dCBpcyBkZWZpbmVkIik7CiAgIH0gY2F0Y2ggKGUpIHsKLSAgICB0ZXN0RmFpbGVkKCdBcnJheUJ1
ZmZlclZpZXcgZG9lcyBub3QgaGF2ZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJp
YnV0ZSBidXQgd2FzIG5vdCBkZWZpbmVkJyk7CisgICAgdGVzdFBhc3NlZCgiQXJyYXlCdWZmZXJW
aWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYW5kIGlzIik7CiAgIH0KIAogICAvLyBUaGVyZSBpcyBj
dXJyZW50bHkgb25seSBvbmUga2luZCBvZiB2aWV3IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVy
Ci0gIHNob3VsZEJlKCduZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50OEFy
cmF5JywgJ3RydWUnKTsKKyAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0
YW5jZW9mIFVpbnQ4QXJyYXknLCAnZmFsc2UnKTsKIH0KIAogLy8KSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL3R5cGVkYXJyYXlz
L2RhdGEtdmlldy10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ2wvcmVz
b3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvZGF0YS12aWV3
LXRlc3QuaHRtbAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvZGF0YS12aWV3LXRl
c3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDkgKzI3MCw5IEBAIGZ1bmN0aW9uIHJ1bkNv
bnN0cnVjdG9yVGVzdHMoKQogICAgIC8vIFVzZSB0cnkvY2F0Y2ggaW5zdGVhZCBvZiBjYWxsaW5n
IHNob3VsZFRocm93IHRvIGF2b2lkIGRpZmZlcmVudCBleGNlcHRpb24gbWVzc2FnZSBiZWluZyBy
ZXBvcnRlZCBmcm9tIGRpZmZlcmVudCBwbGF0Zm9ybS4KICAgICB0cnkgewogICAgICAgICBUZXN0
RXZhbChleHByKTsKLSAgICAgICAgdGVzdEZhaWxlZChleHByICsgIiBkb2VzIG5vdCB0aHJvdyBl
eGNlcHRpb24iKTsKKyAgICAgICAgdGVzdFBhc3NlZChleHByICsgIiB3b3JrcyIpOwogICAgIH0g
Y2F0Y2ggKGUpIHsKLSAgICAgICAgdGVzdFBhc3NlZChleHByICsgIiB0aHJldyBleGNlcHRpb24i
KTsKKyAgICAgICAgdGVzdEZhaWxlZChleHByICsgIiB0aHJldyBleGNlcHRpb24iKTsKICAgICB9
CiAKICAgICBkZWJ1ZygiIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208787</attachid>
            <date>2013-08-14 20:06:25 -0700</date>
            <delta_ts>2013-08-14 22:38:22 -0700</delta_ts>
            <desc>basically patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>747639</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA2
OCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA4
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJy
YXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50
LgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMu
ZmlsdGVyOgorCiAyMDEzLTA4LTEzICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBVbmljb2RlJ3MgQ0ZMQUdTIGVuZm9yY2UgLURfRk9S
VElGWV9TT1VSQ0U9MiwgLURfUkVFTlRSQU5UPTEsIGNhdXNpbmcgZmF1bHR5IENsYW5nIGJ1aWxk
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQ0
IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgVHlwZWQgYXJyYXlzIHdlcmUgcHJldmlv
dXNseSBkZWZpY2llbnQgaW4gc2V2ZXJhbCBtYWpvciB3YXlzOgorICAgICAgICAKKyAgICAgICAg
LSBUaGV5IHdlcmUgZGVmaW5lZCBzZXBhcmF0ZWx5IGluIFdlYkNvcmUgYW5kIGluIHRoZSBqc2Mg
c2hlbGwuIFRoZSB0d28KKyAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgd2VyZSBkaWZmZXJlbnQs
IGFuZCB0aGUganNjIHNoZWxsIG9uZSB3YXMgYmFzaWNhbGx5IHdyb25nLgorICAgICAgICAgIFRo
ZSBXZWJDb3JlIG9uZSB3YXMgcXVpdGUgYXdmdWwsIGFsc28uCisgICAgICAgIAorICAgICAgICAt
IFR5cGVkIGFycmF5cyB3ZXJlIG5vdCB2aXNpYmxlIHRvIHRoZSBKSVQgZXhjZXB0IHRocm91Z2gg
c29tZSB3ZWlyZCBob29rcy4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIEpJVCBjb3VsZCBu
b3QgYXNrICJ3aGF0IGlzIHRoZSBTdHJ1Y3R1cmUgdGhhdCB0aGlzIHR5cGVkCisgICAgICAgICAg
YXJyYXkgd291bGQgaGF2ZSBpZiBJIGp1c3QgYWxsb2NhdGVkIGl0IGZyb20gdGhpcyBnbG9iYWwg
b2JqZWN0Ii4gQWxzbywKKyAgICAgICAgICBpdCB3YXMgZGlmZmljdWx0IHRvIHdpcmUgYW55IG9m
IHRoZSB0eXBlZCBhcnJheSBpbnRyaW5zaWNzLCBiZWNhdXNlIG1vc3QKKyAgICAgICAgICBvZiB0
aGUgZnVuY3Rpb25hbGl0eSB3YXNuJ3QgdmlzaWJsZSBhbnl3aGVyZSBpbiBKU0MuCisgICAgICAg
IAorICAgICAgICAtIFR5cGVkIGFycmF5IGFsbG9jYXRpb24gd2FzIGJyYWluLWRlYWQuIEFsbG9j
YXRpbmcgYSB0eXBlZCBhcnJheSBpbnZvbHZlZAorICAgICAgICAgIHR3byBKUyBvYmplY3RzLCB0
d28gR0Mgd2VhayBoYW5kbGVzLCBhbmQgdGhyZWUgbWFsbG9jIGFsbG9jYXRpb25zLgorICAgICAg
ICAKKyAgICAgICAgLSBOZXV0ZXJpbmcuIEl0IGludm9sdmVkIGtlZXBpbmcgdGFicyBvbiBhbGwg
bmF0aXZlIHZpZXdzIGJ1dCBub3QgdGhlIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywgZXZlbiB0
aG91Z2ggdGhlIG5hdGl2ZSB2aWV3cyBjYW4gYXV0b25ldXRlciBqdXN0IGJ5IGFza2luZyB0aGUK
KyAgICAgICAgICBidWZmZXIgaWYgaXQgd2FzIG5ldXRlcmVkIGFueXRpbWUgeW91IHRvdWNoIHRo
ZW07IHdoaWxlIHRoZSBKUyB2aWV3CisgICAgICAgICAgd3JhcHBlcnMgYXJlIHRoZSBvbmVzIHRo
YXQgeW91IHJlYWxseSB3YW50IHRvIHJlYWNoIG91dCB0by4KKyAgICAgICAgCisgICAgICAgIC0g
Q29tbW9uIGNhc2UtaW5nLiBNb3N0IHR5cGVkIGFycmF5cyBoYXZlIG9uZSBidWZmZXIgYW5kIG9u
ZSB2aWV3LCBhbmQKKyAgICAgICAgICB1c3VhbGx5IG5vYm9keSB0b3VjaGVzIHRoZSBidWZmZXIu
IFlldCB3ZSBjcmVhdGVkIGFsbCBvZiB0aGF0IHN0dWZmCisgICAgICAgICAgYW55d2F5LCB1c2lu
ZyBkYXRhIHN0cnVjdHVyZXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZSB3aGVyZSB5b3UgaGFkIGEg
bG90CisgICAgICAgICAgb2Ygdmlld3MuCisgICAgICAgIAorICAgICAgICAtIFNlbWFudGljIGdv
b2ZzLiBUeXBlZCBhcnJheXMgc2hvdWxkLCBpbiB0aGUgZnV0dXJlLCBiZWhhdmUgbGlrZSBFUwor
ICAgICAgICAgIGZlYXR1cmVzIHJhdGhlciB0aGFuIERPTSBmZWF0dXJlcywgZm9yIGV4YW1wbGUg
d2hlbiBpdCBjb21lcyB0byBleGNlcHRpb25zLgorICAgICAgICAgIEZpcmVmb3ggYWxyZWFkeSBk
b2VzIHRoaXMgYW5kIEkgYWdyZWUgd2l0aCB0aGVtLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBjbGVhbnNlcyBvdXIgY29kZWJhc2Ugb2YgdGhlc2Ugc2luczoKKyAgICAgICAgCisgICAg
ICAgIC0gVHlwZWQgYXJyYXlzIGFyZSBhbG1vc3QgZW50aXJlbHkgZGVmaW5lZCBpbiBKU0MuIE9u
bHkgdGhlIGxpZmVjeWNsZQorICAgICAgICAgIG1hbmFnZW1lbnQgb2YgbmF0aXZlIHJlZmVyZW5j
ZXMgdG8gYnVmZmVycyBpcyBsZWZ0IHRvIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICAtIEFs
bG9jYXRpbmcgYSB0eXBlZCBhcnJheSByZXF1aXJlcyBlaXRoZXIgdHdvIEdDIGFsbG9jYXRpb25z
IChhIGNlbGwgYW5kIGEKKyAgICAgICAgICBjb3BpZWQgc3RvcmFnZSB2ZWN0b3IpIG9yIG9uZSBH
QyBhbGxvY2F0aW9uLCBhIG1hbGxvYyBhbGxvY2F0aW9uLCBhbmQgYQorICAgICAgICAgIHdlYWsg
aGFuZGxlIChhIGNlbGwgYW5kIGEgbWFsbG9jJ2Qgc3RvcmFnZSB2ZWN0b3IsIHBsdXMgYSBmaW5h
bGl6ZXIgZm9yIHRoZQorICAgICAgICAgIGxhdHRlcikuIFRoZSBsYXR0ZXIgaXMgb25seSB1c2Vk
IGZvciBvdmVyc2l6ZSBhcnJheXMuIFJlbWVtYmVyIHRoYXQgYmVmb3JlCisgICAgICAgICAgaXQg
d2FzIDcgYWxsb2NhdGlvbnMgbm8gbWF0dGVyIHdoYXQuCisgICAgICAgIAorICAgICAgICAtIFR5
cGVkIGFycmF5cyByZXF1aXJlIGp1c3QgNCB3b3JkcyBvZiBvdmVyaGVhZDogU3RydWN0dXJlKiwg
QnV0dGVyZmx5KiwKKyAgICAgICAgICBtb2RlL2xlbmd0aCwgdm9pZCogdmVjdG9yLiBCZWZvcmUg
aXQgd2FzIGEgbG90IG1vcmUgdGhhbiB0aGF0IC0gcmVtZW1iZXIsCisgICAgICAgICAgdGhlcmUg
d2VyZSBmaXZlIGFkZGl0aW9uYWwgb2JqZWN0cyB0aGF0IGRpZCBhYnNvbHV0ZWx5IG5vdGhpbmcg
Zm9yIGFueWJvZHkuCisgICAgICAgIAorICAgICAgICAtIE5hdGl2ZSB2aWV3cyBhcmVuJ3QgdHJh
Y2tlZCBieSB0aGUgYnVmZmVyLCBvciBieSB0aGUgd3JhcHBlcnMuIFRoZXkgYXJlCisgICAgICAg
ICAgdHJhbnNpZW50LiBJbiB0aGUgZnV0dXJlIHdlJ2xsIHByb2JhYmx5IHN3aXRjaCB0byBub3Qg
ZXZlbiBoYXZpbmcgdGhlbSBiZQorICAgICAgICAgIG1hbGxvYydkLgorICAgICAgICAKKyAgICAg
ICAgLSBOYXRpdmUgYXJyYXkgYnVmZmVycyBoYXZlIGFuIGVmZmljaWVudCB3YXkgb2YgdHJhY2tp
bmcgYWxsIG9mIHRoZWlyIEpTIHZpZXcKKyAgICAgICAgICB3cmFwcGVycywgYm90aCBmb3IgbmV1
dGVyaW5nLCBhbmQgZm9yIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBUaGUgR0MKKyAgICAgICAgICBz
cGVjaWFsLWNhc2VzIG5hdGl2ZSBhcnJheSBidWZmZXJzLiBUaGlzIHNhdmVzIGEgYnVuY2ggb2Yg
Z3JpZWY7IGZvciBleGFtcGxlCisgICAgICAgICAgaXQgbWVhbnMgdGhhdCBhIEpTIHZpZXcgd3Jh
cHBlciBjYW4gcmVmZXIgdG8gaXRzIGJ1ZmZlciB2aWEgdGhlIGJ1dHRlcmZseSwKKyAgICAgICAg
ICB3aGljaCB3b3VsZCBiZSBkZWFkIGJ5IHRoZSB0aW1lIHdlIHdlbnQgdG8gZmluYWxpemUuCisg
ICAgICAgIAorICAgICAgICAtIFR5cGVkIGFycmF5IHNlbWFudGljcyBub3cgbWF0Y2ggRmlyZWZv
eCwgd2hpY2ggYWxzbyBoYXBwZW5zIHRvIGJlIHdoZXJlIHRoZQorICAgICAgICAgIHN0YW5kYXJk
cyBhcmUgZ29pbmcuIFRoZSBkaXNjdXNzaW9uIG9uIHdlYmtpdC1kZXYgc2VlbWVkIHRvIGNvbmZp
cm0gdGhhdAorICAgICAgICAgIENocm9tZSBpcyBhbHNvIGhlYWRpbmcgaW4gdGhpcyBkaXJlY3Rp
b24uIFRoaXMgaW5jbHVkZXMgbWFraW5nCisgICAgICAgICAgVWludDhDbGFtcGVkQXJyYXkgbm90
IGEgc3VidHlwZSBvZiBVaW50OEFycmF5LCBhbmQgZ2V0dGluZyByaWQgb2YKKyAgICAgICAgICBB
cnJheUJ1ZmZlclZpZXcgYXMgYSBKUy12aXNpYmxlIGNvbnN0cnVjdC4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYSA+OHggc3BlZWQtdXAgZm9yIHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBs
b3Qgb2Ygc21hbGwgdHlwZWQgYXJyYXlzLAorICAgICAgICBhbmQgYSA+Nnggc3BlZWQtdXAgZm9y
IHByb2dyYW1zIHRoYXQgYWxsb2NhdGUgYSBsb3Qgb2YgbGFyZ2Ugb25lcy4KKyAgICAgICAgCisg
ICAgICAgIEFuIGFkZGl0aW9uYWwgcHJvcGVydHkgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IHR5cGVk
IGFycmF5cyBhcmUgbW9zdGx5CisgICAgICAgIGltcGxlbWVudGVkIHVzaW5nIHRlbXBsYXRlcy4g
VGhpcyBkZWR1cGxpY2F0ZXMgYSBidW5jaCBvZiBjb2RlLCBidXQgZG9lcyBtZWFuCisgICAgICAg
IHRoYXQgd2UgbmVlZCBzb21lIGhhY2tzIGZvciBleHBvcnRpbmcgc19pbmZvJ3Mgb2YgdGVtcGxh
dGUgY2xhc3Nlcy4gU2VlCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggYW5kIEpT
VHlwZWRBcnJheXMuY3BwLiBUaG9zZSBoYWNrcyBhcmUgZmFpcmx5CisgICAgICAgIGxvdy1pbXBh
Y3QgY29tcGFyZWQgdG8gY29kZSBkdXBsaWNhdGlvbi4KKyAgICAgICAgCisgICAgICAgIEF1dG9t
YWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4u
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSlNDVHlwZWRB
cnJheVN0dWJzLmg6IFJlbW92ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRl
Y29kZS9CeVZhbEluZm8uaDoKKyAgICAgICAgKEpTQzo6aGFzT3B0aW1pemFibGVJbmRleGluZ0Zv
ckNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OmppdEFycmF5TW9kZUZvckNsYXNzSW5mbyk6Cisg
ICAgICAgIChKU0M6OnR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKToKKyAgICAgICAgKiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJv
bUNsYXNzSW5mbyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlwZWRBcnJheVR5cGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxG
b3JGbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvQ29weVRva2VuLmg6CisgICAgICAg
ICogaGVhcC9EZWZlckdDLmg6CisgICAgICAgIChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6OkRlZmVy
R0NGb3JBV2hpbGUpOgorICAgICAgICAoSlNDOjpEZWZlckdDRm9yQVdoaWxlOjp+RGVmZXJHQ0Zv
ckFXaGlsZSk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OkdDSW5jb21pbmdSZWZDb3VudGVk
KToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6On5HQ0luY29taW5nUmVmQ291
bnRlZCk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpudW1iZXJPZkluY29t
aW5nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjppbmNv
bWluZ1JlZmVyZW5jZUF0KToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnNp
bmdsZXRvbkZsYWcpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6aGFzVmVj
dG9yT2ZDZWxscyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNBbnlJ
bmNvbWluZyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpoYXNTaW5nbGV0
b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6c2luZ2xldG9uKToKKyAg
ICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6OnZlY3Rvck9mQ2VsbHMpOgorICAgICAg
ICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjo6OmFkZEluY29taW5nUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6OjpmaWx0ZXJJbmNv
bWluZ1JlZmVyZW5jZXMpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjpzaXplKToK
KyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6OjpHQ0luY29taW5nUmVmQ291bnRlZFNldCk6CisgICAgICAgIChKU0M6
Ojo6fkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KToKKyAgICAgICAgKEpTQzo6OjphZGRSZWZlcmVu
Y2UpOgorICAgICAgICAoSlNDOjo6OnN3ZWVwKToKKyAgICAgICAgKEpTQzo6OjpyZW1vdmVBbGwp
OgorICAgICAgICAoSlNDOjo6OnJlbW92ZURlYWQpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6OkhlYXA6
OmV4dHJhU2l6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpI
ZWFwOjpjYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAo
SlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmRhdGFWaWV3VGFibGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoR2xvYmFsT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9BcnJh
eUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjp0cmFuc2Zlcik6CisgICAg
ICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6
Y3JlYXRlQWRvcHRlZCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpnY1NpemVFc3RpbWF0ZUluQnl0ZXMpOgorICAg
ICAgICAoSlNDOjpBcnJheUJ1ZmZlcjo6cGluKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6
OnVucGluKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpTQzo6
QXJyYXlCdWZmZXJWaWV3OjpBcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlclZpZXc6On5BcnJheUJ1ZmZlclZpZXcpOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZp
ZXc6OnNldE5ldXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg6
CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6aXNOZXV0ZXJlZCk6CisgICAgICAgIChK
U0M6OkFycmF5QnVmZmVyVmlldzo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJW
aWV3OjpiYXNlQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Ynl0ZU9m
ZnNldCk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6dmVyaWZ5U3ViUmFuZ2UpOgor
ICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMp
OgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0
aCk6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9EYXRhVmlldy5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6RGF0YVZpZXcpOgorICAgICAgICAoSlNDOjpEYXRh
Vmlldzo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OndyYXApOgorICAgICAgICAq
IHJ1bnRpbWUvRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpieXRl
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OmdldFR5cGUpOgorICAgICAgICAoSlND
OjpEYXRhVmlldzo6Z2V0KToKKyAgICAgICAgKEpTQzo6RGF0YVZpZXc6OnNldCk6CisgICAgICAg
ICogcnVudGltZS9GbG9hdDMyQXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0Zsb2F0NjRBcnJh
eS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OmRhdGEpOgorICAgICAgICAoSlND
OjpHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBl
ZEFycmF5Vmlldzo6c2V0UmFuZ2UpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZp
ZXc6Onplcm9SYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6emVy
b0ZpbGwpOgorICAgICAgICAoSlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0ZUxlbmd0aCk6CisgICAgICAg
IChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6aXRlbSk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldzo6Y2hlY2tJbmJvdW5kRGF0YSk6CisgICAgICAgIChKU0M6OkdlbmVy
aWNUeXBlZEFycmF5Vmlldzo6Z2V0VHlwZSk6CisgICAgICAgICogcnVudGltZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdlbmVyaWNUeXBl
ZEFycmF5Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6OjpzdWJhcnJheSk6CisgICAgICAg
IChKU0M6Ojo6d3JhcCk6CisgICAgICAgICogcnVudGltZS9JbmRleGluZ0hlYWRlci5oOgorICAg
ICAgICAoSlNDOjpJbmRleGluZ0hlYWRlcjo6YXJyYXlCdWZmZXIpOgorICAgICAgICAoSlNDOjpJ
bmRleGluZ0hlYWRlcjo6c2V0QXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSW50MTZB
cnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvSW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRp
bWUvSW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OkpTQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OnB1dCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6aW1wbCk6CisgICAg
ICAgIChKU0M6OnRvQXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcjo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RB
cnJheUJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0
Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6
Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZSk6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpKU0FycmF5QnVmZmVyVmlldyk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnB1dCk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVy
Vmlldzo6ZmluYWxpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpzaXplT2YpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6
OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rp
b25Db250ZXh0Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6YnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc6Om1vZGUpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmll
dzo6dmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Omxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OjppbXBsKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om5ldXRlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Z2V0VHlwZWRBcnJheUltcGwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OkpTRGF0YVZpZXcpOgorICAg
ICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6dHlwZWRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNE
YXRhVmlldzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6c2xv
d0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmdldFR5cGVk
QXJyYXlJbXBsKToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL0pTRGF0YVZpZXcuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTRGF0YVZp
ZXdQcm90b3R5cGU6OkpTRGF0YVZpZXdQcm90b3R5cGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFW
aWV3UHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3UHJvdG90eXBlOjpn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpnZXREYXRhKToKKyAgICAg
ICAgKEpTQzo6c2V0RGF0YSk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50
OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MTYpOgorICAgICAgICAo
SlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEludDMyKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQ
cm90b0Z1bmNHZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0VWlu
dDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MzIpOgorICAgICAg
ICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIpOgorICAgICAgICAoSlNDOjpkYXRh
Vmlld1Byb3RvRnVuY0dldEZsb2F0NjQpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y1NldEludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDE2KToKKyAg
ICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQzMik6CisgICAgICAgIChKU0M6OmRh
dGFWaWV3UHJvdG9GdW5jU2V0VWludDgpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVu
Y1NldFVpbnQxNik6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDMyKToK
KyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDMyKToKKyAgICAgICAgKEpT
Qzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0
YVZpZXdQcm90b3R5cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0Zsb2F0MzJBcnJh
eS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxvYXQ2NEFycmF5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkVmVjdG9yKToKKyAgICAgICAgKEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhbkdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5TZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1
ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNr
bHlBc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJ
bmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0
SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHlUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRJbmRleFF1aWNrbHkpOgorICAgICAgICAoSlNDOjpKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuQWNjZXNzUmFuZ2VRdWlja2x5KToKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnR5cGVkSW1wbCk6CisgICAgICAgIChKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6aW5mbyk6CisgICAgICAgIChKU0M6OnRvTmF0aXZlVHlw
ZWRWaWV3KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9ySW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6OjpmaW5pc2hDcmVhdGlv
bik6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgor
ICAgICAgICAoSlNDOjo6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoSlNDOjo6OmdldENh
bGxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyk6Cisg
ICAgICAgIChKU0M6Ojo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGVVbmluaXRpYWxp
emVkKToKKyAgICAgICAgKEpTQzo6Ojp2YWxpZGF0ZVJhbmdlKToKKyAgICAgICAgKEpTQzo6Ojpz
ZXRXaXRoU3BlY2lmaWNUeXBlKToKKyAgICAgICAgKEpTQzo6OjpzZXQpOgorICAgICAgICAoSlND
Ojo6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6OjpwdXQpOgorICAgICAgICAoSlNDOjo6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6cHV0
QnlJbmRleCk6CisgICAgICAgIChKU0M6Ojo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6
OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjo6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAoSlNDOjo6OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjo6OnNsb3dE
b3duQW5kV2FzdGVNZW1vcnkpOgorICAgICAgICAoSlNDOjo6OmdldFR5cGVkQXJyYXlJbXBsKToK
KyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNTZXQpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNT
dWJhcnJheSk6CisgICAgICAgIChKU0M6Ojo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjo6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Ojpj
cmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpy
ZXNldCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0OjphcnJheUJ1ZmZlclByb3RvdHlwZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0OjphcnJheUJ1ZmZlclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
Ojp0eXBlZEFycmF5U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pTSW50MTZBcnJheS5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTSW50MzJBcnJheS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTSW50OEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNU
eXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJy
YXlQcm90b3R5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5j
cHA6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0pTVWludDE2QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1VpbnQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50OENsYW1wZWRBcnJheS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChKU0M6OlNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyOjp+U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIpOgorICAgICAgICAoSlNDOjpT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9TaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVy
KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpoYXNJbmRleGluZ0hlYWRlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFy
cmF5QWRhcHRvcnMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkludGVncmFsVHlwZWRBcnJheUFk
YXB0b3I6OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRv
cjo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjo6
dG9Eb3VibGUpOgorICAgICAgICAoSlNDOjpGbG9hdFR5cGVkQXJyYXlBZGFwdG9yOjp0b05hdGl2
ZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvSlNWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAg
KEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpVaW50
OENsYW1wZWRBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRB
ZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OmNs
YW1wKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OlR5cGVkQXJyYXlDb250cm9sbGVyOjpUeXBlZEFycmF5Q29udHJvbGxl
cik6CisgICAgICAgIChKU0M6OlR5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNvbnRy
b2xsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaDogQWRkZWQu
CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpjbGFzc0luZm9G
b3JUeXBlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGlt
ZS9UeXBlZEFycmF5VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6dG9JbmRleCk6CisgICAg
ICAgIChKU0M6OmlzVHlwZWRWaWV3KToKKyAgICAgICAgKEpTQzo6ZWxlbWVudFNpemUpOgorICAg
ICAgICAoSlNDOjppc0ludCk6CisgICAgICAgIChKU0M6OmlzRmxvYXQpOgorICAgICAgICAoSlND
Ojppc1NpZ25lZCk6CisgICAgICAgIChKU0M6OmlzQ2xhbXBlZCk6CisgICAgICAgICogcnVudGlt
ZS9UeXBlZEFycmF5cy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1VpbnQxNkFycmF5Lmg6
CisgICAgICAgICogcnVudGltZS9VaW50MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWlu
dDhBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaDoKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKEpT
Qzo6Vk06On5WTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTA4LTE0ICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeGVkIGppdCBvbiBX
aW42NC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1
NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDYgKzE2NywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAg
ICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCisgICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNl
dC5oCisgICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCisgICAgaGVhcC9HQ0luY29taW5n
UmVmQ291bnRlZFNldElubGluZXMuaAorICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzLmgKICAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRh
LmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcApAQCAtMjY0LDEwICsyNjgsMTAgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBwcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKICAgICBw
cm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAKIAotICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
Ci0gICAgcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCiAgICAgcnVudGltZS9BcmdMaXN0LmNw
cAogICAgIHJ1bnRpbWUvQXJndW1lbnRzLmNwcAorICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3Bw
CisgICAgcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCiAgICAgcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9C
b29sZWFuQ29uc3RydWN0b3IuY3BwCkBAIC0yODIsNiArMjg2LDggQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcAogICAgIHJ1bnRp
bWUvQ29tcGxldGlvbi5jcHAKICAgICBydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwCisgICAgcnVu
dGltZS9EYXRhVmlldy5jcHAKKyAgICBydW50aW1lL0RhdGFWaWV3LmgKICAgICBydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0RhdGVDb252ZXJzaW9uLmNwcAogICAgIHJ1
bnRpbWUvRGF0ZUluc3RhbmNlLmNwcApAQCAtMzA2LDEwICszMTIsMTYgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcAogICAgIHJ1
bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAogICAgIHJ1bnRpbWUvSlNBcnJheS5jcHAKKyAgICBydW50
aW1lL0pTQXJyYXlCdWZmZXIuY3BwCisgICAgcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwCisgICAgcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAorICAgIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCiAgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CiAgICAgcnVudGltZS9KU0NKU1ZhbHVlLmNwcAogICAgIHJ1bnRpbWUvSlNDZWxsLmNwcAogICAg
IHJ1bnRpbWUvSlNDaHVuay5jcHAKKyAgICBydW50aW1lL0pTRGF0YVZpZXcuY3BwCisgICAgcnVu
dGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAK
ICAgICBydW50aW1lL0pTRnVuY3Rpb24uY3BwCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAKQEAgLTMyNyw2ICszMzksOSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1
bnRpbWUvSlNTdHJpbmcuY3BwCiAgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAKICAgICBy
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCisgICAgcnVudGltZS9KU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwCisgICAgcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAor
ICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuY3BwCiAgICAgcnVudGltZS9KU1dpdGhTY29wZS5jcHAKICAgICBydW50aW1lL0pTV3JhcHBl
ck9iamVjdC5jcHAKQEAgLTM1OSw2ICszNzQsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAogICAgIHJ1bnRpbWUvU2FtcGxpbmdDb3VudGVyLmNwcAorICAgIHJ1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCiAgICAgcnVudGltZS9TbWFsbFN0cmluZ3MuY3Bw
CiAgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNwcAogICAgIHJ1bnRpbWUvU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwCkBAIC0zNzAsNiArMzg2LDggQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAogICAgIHJ1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuY3BwCiAgICAgcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKKyAgICBydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAorICAgIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUu
Y3BwCiAgICAgcnVudGltZS9WTS5jcHAKICAgICBydW50aW1lL1dhdGNoZG9nLmNwcAogICAgIHJ1
bnRpbWUvV2F0Y2hkb2dOb25lLmNwcApAQCAtMzkxLDYgKzQwOSw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9MVVRfRklMRVMKICAgICBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50
aW1lL0RhdGVQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKyAg
ICBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKICAgICBydW50aW1lL0pTT05PYmplY3QuY3BwCiAgICAgcnVudGltZS9OYW1lUHJv
dG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIGFsbCA6IFwKICAgICBE
YXRlQ29uc3RydWN0b3IubHV0LmggXAogICAgIERhdGVQcm90b3R5cGUubHV0LmggXAogICAgIEVy
cm9yUHJvdG90eXBlLmx1dC5oIFwKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlLmx1dC5oIFwKICAg
ICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU0dsb2JhbE9iamVjdC5sdXQuaCBcCiAgICAgS2V5
d29yZExvb2t1cC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTcsNiArMTcsNyBAQCBqYXZhc2NyaXB0
Y29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3Jl
L0RhdGVDb25zdHJ1Y3Rvci5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
RGF0ZVByb3RvdHlwZS5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvRXJy
b3JQcm90b3R5cGUubHV0LmggXAorCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0pTRGF0
YVZpZXdQcm90b3R5cGUubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0pT
R2xvYmFsT2JqZWN0Lmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9KU09O
T2JqZWN0Lmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9NYXRoT2JqZWN0
Lmx1dC5oIFwKQEAgLTM4NCw2ICszODUsMTAgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NBc3NlcnRpb25zLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUJs
b2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUJsb2NrSW5saW5lcy5o
IFwKQEAgLTY4NSw2ICs2OTAsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRhVmlldy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGFWaWV3LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1
Y3Rvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rv
ci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29udmVyc2lvbi5jcHAg
XApAQCAtNzE5LDYgKzcyNiw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllci5jcHAgXApAQCAtNzQ0LDEyICs3NTMsMjcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBUElWYWx1ZVdyYXBwZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAgXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlldy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3
UHJvdG90eXBlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRo
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVNYXRoLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAgXApAQCAtNzU4LDEyICs3ODIsMjEgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uSW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3h5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MTZBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDMyQXJy
YXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJyYXkuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTm90QW5PYmplY3QuY3BwIFwKQEAgLTc3Niw2ICs4MDksMTYgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAgXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNVaW50MTZBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1VpbnQzMkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDhBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBl
ZEFycmF5LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV2l0aFNjb3BlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuY3BwIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oIFwKQEAgLTg2Niw2ICs5
MDksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2Ft
cGxpbmdDb3VudGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxp
bmdDb3VudGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21h
bGxTdHJpbmdzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuY3BwIFwKQEAgLTg5Miw4ICs5MzcsMTQgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UcmFjaW5nLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5QmFzZS5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlUeXBlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2QXJyYXkuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDE2V2l0aEZyYWN0aW9uLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQzMkFycmF5LmggXApAQCAtOTY3LDUgKzEw
MTgsNCBAQCBQcm9ncmFtc19MTEludE9mZnNldHNFeHRyYWN0b3JfU09VUkNFUyA9CiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAKIAogUHJvZ3Jh
bXNfanNjX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX1NPVVJDRVMgPSBcCi0JU291cmNl
L0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlTdHVicy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJyYXlT
dHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KU0NUeXBlZEFycmF5
U3R1YnMuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5
cGVkQXJyYXlTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNDVHlwZWRB
cnJheVN0dWJzX2gKLSNkZWZpbmUgSlNDVHlwZWRBcnJheVN0dWJzX2gKLQotI2luY2x1ZGUgIkZs
b2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkZsb2F0NjRBcnJheS5oIgotI2luY2x1ZGUgIkludDE2
QXJyYXkuaCIKLSNpbmNsdWRlICJJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSW50OEFycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKLSNpbmNsdWRlICJPYmplY3RQcm90
b3R5cGUuaCIKLSNpbmNsdWRlICJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiVWludDE2QXJyYXku
aCIKLSNpbmNsdWRlICJVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKLSNp
bmNsdWRlICJVaW50OENsYW1wZWRBcnJheS5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0gICAgCi0jZGVmaW5lIFRZUEVEX0FSUkFZKG5hbWUsIHR5cGUp
IFwKLWNsYXNzIEpTIyNuYW1lIyNBcnJheSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
IFwKLXB1YmxpYzogXAotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsgXAot
ICAgIHN0YXRpYyBKUyMjbmFtZSMjQXJyYXkqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5
PiBpbXBsKSBcCi0gICAgeyBcCi0gICAgICAgIEpTIyNuYW1lIyNBcnJheSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKUyMjbmFtZSMjQXJyYXk+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlMjI25hbWUjI0FycmF5KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsgXAotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7IFwK
LSAgICAgICAgcmV0dXJuIHB0cjsgXAotICAgIH1cCi1cCi0gICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTtcCi0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7XAotICAgIHN0YXRpYyB2b2lkIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6UHV0UHJvcGVydHlTbG90Jik7XAotICAgIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBib29sKTtcCi0gICAgREVDTEFSRV9JTkZPO1wKLVwKLSAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKVwKLSAgICB7XAotICAgICAgICBy
ZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
XAotICAgIH1cCi1cCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XAot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7XAotXAotICAgIHN0YXRpYyBjb25zdCBKU0M6OlR5cGVkQXJy
YXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IEpTQzo6VHlwZWRBcnJheSMjbmFtZTtcCi0g
ICAgdWludDMyX3QgbV9zdG9yYWdlTGVuZ3RoO1wKLSAgICB0eXBlKiBtX3N0b3JhZ2U7XAotICAg
IFJlZlB0cjxuYW1lIyNBcnJheT4gbV9pbXBsO1wKLXByb3RlY3RlZDpcCi0gICAgSlMjI25hbWUj
I0FycmF5KEpTQzo6U3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPG5hbWUj
I0FycmF5Pik7XAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpO1wKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOyBcCi0gICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XAotICAgIHZvaWQgaW5kZXhTZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTtcCi19O1wKLVwKLWNvbnN0
IENsYXNzSW5mbyBKUyMjbmFtZSMjQXJyYXk6OnNfaW5mbyA9IHsgI25hbWUgIkFycmF5IiAsICZC
YXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI25hbWUjI0FycmF5KSB9
O1wKLVwKLUpTIyNuYW1lIyNBcnJheTo6SlMjI25hbWUjI0FycmF5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPG5hbWUjI0FycmF5
PiBpbXBsKVwKLSAgICA6IEJhc2UoZ2xvYmFsT2JqZWN0LT52bSgpLCBzdHJ1Y3R1cmUpXAotICAg
ICwgbV9pbXBsKGltcGwpXAote1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKVwKLXtcCi0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1wKLSAg
ICBUeXBlZEFycmF5RGVzY3JpcHRvciBkZXNjcmlwdG9yKCZKUyMjbmFtZSMjQXJyYXk6OnNfaW5m
bywgT0JKRUNUX09GRlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlKSwgT0JKRUNUX09G
RlNFVE9GKEpTIyNuYW1lIyNBcnJheSwgbV9zdG9yYWdlTGVuZ3RoKSk7XAotICAgIHZtLnJlZ2lz
dGVyVHlwZWRBcnJheURlc2NyaXB0b3IobV9pbXBsLmdldCgpLCBkZXNjcmlwdG9yKTtcCi0gICAg
bV9zdG9yYWdlID0gbV9pbXBsLT5kYXRhKCk7XAotICAgIG1fc3RvcmFnZUxlbmd0aCA9IG1faW1w
bC0+bGVuZ3RoKCk7XAotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcihtX3N0b3JhZ2VMZW5ndGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250
RW51bSk7IFwKLSAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7XAotfVwKLVwKLWJvb2wgSlMj
I25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
XAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUj
I0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4
KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAg
ICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpKTtcCi0g
ICAgICAgIHJldHVybiB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTIyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAgdW5zaWduZWQgaW5kZXgg
PSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggPCB0aGlzT2JqZWN0LT5t
X3N0b3JhZ2VMZW5ndGgpIHtcCi0gICAgICAgIEFTU0VSVChpbmRleCAhPSBQcm9wZXJ0eU5hbWU6
Ok5vdEFuSW5kZXgpO1wKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHRoaXNPYmpl
Y3QtPmdldEJ5SW5kZXgoZXhlYywgaW5kZXgpLCBEb250RGVsZXRlKTtcCi0gICAgICAgIHJldHVy
biB0cnVlO1wKLSAgICB9XAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3Iob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpO1wKLX1cCi1cCi1ib29s
IEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KVwKLXtcCi0gICAgSlMjI25hbWUjI0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
IyNuYW1lIyNBcnJheSo+KG9iamVjdCk7XAotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAgaWYgKHByb3BlcnR5TmFtZSA8IHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5n
ZXRCeUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAot
ICAgIH1cCi0gICAgcmV0dXJuIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5
TmFtZSksIHNsb3QpO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6cHV0KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4oY2VsbCk7XAotICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAgdW5zaWduZWQg
aW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpO1wKLSAgICBpZiAoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KSB7XAotICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihl
eGVjLCBpbmRleCwgdmFsdWUpO1wKLSAgICAgICAgcmV0dXJuO1wKLSAgICB9XAotICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTtcCi19XAot
XAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKSBcCi17XAotICAgIG1faW1wbC0+
c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUj
I0FycmF5OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wpXAote1wKLSAgICBKUyMjbmFtZSMj
QXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4oY2VsbCk7XAotICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcCi0gICAgdGhp
c09iamVjdC0+aW5kZXhTZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7XAotICAgIHJl
dHVybjtcCi19XAotXAotdm9pZCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpXAote1wKLSAgICBKUyMjbmFtZSMjQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoOyArK2kpXAot
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTtcCi0g
ICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTtcCi19XAotXAotSlNWYWx1ZSBKUyMjbmFtZSMjQXJyYXk6OmdldEJ5SW5kZXgo
RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgpXAote1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXMsIGluZm8oKSk7XAotICAgIHR5cGUgcmVzdWx0ID0gbV9pbXBsLT5pdGVtKGlu
ZGV4KTtcCi0gICAgaWYgKHN0ZDo6aXNuYW4oKGRvdWJsZSlyZXN1bHQpKVwKLSAgICAgICAgcmV0
dXJuIGpzTmFOKCk7XAotICAgIHJldHVybiBKU1ZhbHVlKHJlc3VsdCk7XAotfVwKLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTIyNuYW1lIyNBcnJheShFeGVj
U3RhdGUqIGNhbGxGcmFtZSkgeyBcCi0gICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkgXAotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyBc
Ci0gICAgaW50MzJfdCBsZW5ndGggPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvSW50MzIoY2Fs
bEZyYW1lKTsgXAotICAgIGlmIChsZW5ndGggPCAwKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7IFwKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEpT
IyNuYW1lIyNBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1l
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSk7IFwKLSAgICBSZWZQdHI8bmFtZSMjQXJyYXk+IGJ1ZmZlciA9
IG5hbWUjI0FycmF5OjpjcmVhdGUobGVuZ3RoKTsgXAotICAgIGlmICghYnVmZmVyKSBcCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVSYW5nZUVycm9yKGNhbGxG
cmFtZSwgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwgZW5vdWdoIHBvc2l0aXZlIGlu
dGVnZXIuIikpOyBcCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyMjbmFtZSMjQXJyYXk6
OmNyZWF0ZShzdHJ1Y3R1cmUsIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBidWZm
ZXIucmVsZWFzZSgpKSk7IFwKLX0KLQotVFlQRURfQVJSQVkoVWludDgsIHVpbnQ4X3QpOwotVFlQ
RURfQVJSQVkoVWludDhDbGFtcGVkLCB1aW50OF90KTsKLVRZUEVEX0FSUkFZKFVpbnQxNiwgdWlu
dDE2X3QpOwotVFlQRURfQVJSQVkoVWludDMyLCB1aW50MzJfdCk7Ci1UWVBFRF9BUlJBWShJbnQ4
LCBpbnQ4X3QpOwotVFlQRURfQVJSQVkoSW50MTYsIGludDE2X3QpOwotVFlQRURfQVJSQVkoSW50
MzIsIGludDMyX3QpOwotVFlQRURfQVJSQVkoRmxvYXQzMiwgZmxvYXQpOwotVFlQRURfQVJSQVko
RmxvYXQ2NCwgZG91YmxlKTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQkod29ya2luZyBjb3B5KQpAQCAtMjU5LDEwICsyNTksMTAgQEAgU09VUkNFUyArPSBcCiAg
ICAgcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAgXAogICAgIHByb2ZpbGVyL1Byb2ZpbGVO
b2RlLmNwcCBcCiAgICAgcHJvZmlsZXIvTGVnYWN5UHJvZmlsZXIuY3BwIFwKLSAgICBydW50aW1l
L0FycmF5QnVmZmVyLmNwcCBcCi0gICAgcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwIFwKICAg
ICBydW50aW1lL0FyZ0xpc3QuY3BwIFwKICAgICBydW50aW1lL0FyZ3VtZW50cy5jcHAgXAorICAg
IHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwIFwKKyAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5j
cHAgXAogICAgIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgXApA
QCAtMjc3LDEzICsyNzcsMTQgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9Db21waWxhdGlv
blJlc3VsdC5jcHAgXAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAgXAogICAgIHJ1bnRpbWUv
Q29uc3RydWN0RGF0YS5jcHAgXAorICAgIHJ1bnRpbWUvRGF0YVZpZXcuY3BwIFwKICAgICBydW50
aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
IFwKICAgICBydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAgXAogICAgIHJ1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvRHVtcENvbnRleHQuY3BwIFwKLSAgICBydW50aW1lL0Vy
cm9yQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL0Vycm9yLmNwcCBcCisgICAgcnVudGlt
ZS9FcnJvckNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNwcCBc
CiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAgXApAQCAtMjkzLDM3ICsyOTQsNDQgQEAgU09VUkNFUyArPSBcCiAgICAgcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCBcCiAgICAgcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwIFwKLSAgICBydW50aW1lL09w
dGlvbnMuY3BwIFwKICAgICBydW50aW1lL0lkZW50aWZpZXIuY3BwIFwKICAgICBydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgXAog
ICAgIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgXAogICAgIHJ1bnRpbWUvSW50
ZXJuYWxGdW5jdGlvbi5jcHAgXAotICAgIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcCBcCiAgICAg
cnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5jcHAgXAorICAgIHJ1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcCBcCiAgICAgcnVudGltZS9KU0FycmF5LmNwcCBcCisgICAgcnVudGltZS9KU0FycmF5QnVm
ZmVyLmNwcCBcCisgICAgcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKyAg
ICBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIFwKKyAgICBydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcCBcCisgICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKKyAg
ICBydW50aW1lL0pTQ0pTVmFsdWUuY3BwIFwKICAgICBydW50aW1lL0pTQ2VsbC5jcHAgXAorICAg
IHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAgXAorICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlw
ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNEYXRlTWF0aC5jcHAgXAogICAgIHJ1bnRpbWUvSlNGdW5j
dGlvbi5jcHAgXAotICAgIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcCBcCi0gICAgcnVudGlt
ZS9WTS5jcHAgXAogICAgIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIFwKICAgICBydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCi0gICAgcnVudGltZS9KU1Byb3h5LmNwcCBc
CiAgICAgcnVudGltZS9KU0xvY2suY3BwIFwKKyAgICBydW50aW1lL0pTTmFtZVNjb3BlLmNwcCBc
CiAgICAgcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcCBcCi0gICAgcnVudGltZS9KU09iamVjdC5j
cHAgXAogICAgIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAgXAorICAgIHJ1bnRpbWUvSlNPYmplY3Qu
Y3BwIFwKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKLSAgICBydW50
aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIFwKLSAgICBydW50aW1lL0pTV2l0aFNj
b3BlLmNwcCBcCi0gICAgcnVudGltZS9KU05hbWVTY29wZS5jcHAgXAorICAgIHJ1bnRpbWUvSlNQ
cm94eS5jcHAgXAogICAgIHJ1bnRpbWUvSlNTY29wZS5jcHAgXAorICAgIHJ1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwIFwKICAg
ICBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcCBcCiAgICAgcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBcCi0gICAgcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBcCisgICAgcnVudGltZS9K
U1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIFwKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwIFwKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwIFwKICAgICBydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwIFwKKyAgICBydW50aW1lL0pTV2l0aFNjb3BlLmNwcCBc
CiAgICAgcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwIFwKICAgICBydW50aW1lL0xpdGVyYWxQ
YXJzZXIuY3BwIFwKICAgICBydW50aW1lL0xvb2t1cC5jcHAgXApAQCAtMzQwLDE5ICszNDgsMjEg
QEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAgXAogICAg
IHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9PcGVyYXRpb25zLmNw
cCBcCisgICAgcnVudGltZS9PcHRpb25zLmNwcCBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eURlc2Ny
aXB0b3IuY3BwIFwKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcCBcCiAgICAgcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKICAgICBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIFwK
ICAgICBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAgXAotICAgIHJ1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwIFwKKyAgICBydW50aW1lL1JlZ0V4cC5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhw
Q2FjaGUuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAgXAorICAgIHJ1
bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cE1hdGNoZXNB
cnJheS5jcHAgXAotICAgIHJ1bnRpbWUvUmVnRXhwLmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBP
YmplY3QuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAgXAotICAgIHJ1bnRp
bWUvUmVnRXhwQ2FjaGUuY3BwIFwKICAgICBydW50aW1lL1NhbXBsaW5nQ291bnRlci5jcHAgXAor
ICAgIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKICAgICBydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAgXAogICAgIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAg
XAogICAgIHJ1bnRpbWUvU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIFwKQEAgLTM2MCwxMCArMzcw
LDEzIEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcCBcCiAgICAg
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL1N0cmluZ1JlY3Vyc2lv
bkNoZWNrZXIuY3BwIFwKLSAgICBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcCBcCiAgICAgcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwIFwKKyAgICBydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcCBcCiAg
ICAgcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgXAogICAgIHJ1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwIFwKKyAgICBydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBcCisgICAgcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5jcHAgXAorICAgIHJ1bnRpbWUvVk0uY3BwIFwKICAgICBydW50
aW1lL1dhdGNoZG9nLmNwcCBcCiAgICAgcnVudGltZS9XYXRjaGRvZ05vbmUuY3BwIFwKICAgICB0
b29scy9Db2RlUHJvZmlsZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9u
IDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2lu
Y2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpT
Q1R5cGVkQXJyYXlTdHVicy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U0xvY2suaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkBAIC0yMzgsMTYgKzIzNyw2IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjbGVhclNhbXBsaW5nRmxhZ3MiLCBmdW5j
dGlvbkNsZWFyU2FtcGxpbmdGbGFncywgMSk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIGFk
ZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU1VpbnQ4
QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50OENs
YW1wZWRBcnJheSIsIGNvbnN0cnVjdEpTVWludDhDbGFtcGVkQXJyYXksIDEpOwotICAgICAgICBh
ZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50MTZBcnJheSIsIGNvbnN0cnVjdEpTVWlu
dDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJVaW50
MzJBcnJheSIsIGNvbnN0cnVjdEpTVWludDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1
Y3RhYmxlRnVuY3Rpb24odm0sICJJbnQ4QXJyYXkiLCBjb25zdHJ1Y3RKU0ludDhBcnJheSwgMSk7
Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDE2QXJyYXkiLCBjb25z
dHJ1Y3RKU0ludDE2QXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24o
dm0sICJJbnQzMkFycmF5IiwgY29uc3RydWN0SlNJbnQzMkFycmF5LCAxKTsKLSAgICAgICAgYWRk
Q29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiRmxvYXQzMkFycmF5IiwgY29uc3RydWN0SlNGbG9h
dDMyQXJyYXksIDEpOwotICAgICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9h
dDY0QXJyYXkiLCBjb25zdHJ1Y3RKU0Zsb2F0NjRBcnJheSwgMSk7Ci0KICAgICAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGdsb2JhbEV4ZWMoKSwgMCk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGdsb2JhbEV4ZWMoKSwgaSwganNTdHJpbmcoZ2xvYmFs
RXhlYygpLCBhcmd1bWVudHNbaV0pKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDEwLDEwICs0MTAsMTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2Zp
bGVyXFByb2ZpbGVyT1NSRXhpdC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiIC8+DQotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZpZXcuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlzdC5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmd1bWVudHMuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXIuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJWaWV3LmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5Q29uc3RydWN0b3IuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhbkNvbnN0cnVj
dG9yLmNwcCIgLz4NCkBAIC00MjcsNiArNDI3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnN0cnVjdERhdGEuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0YVZpZXcuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVDb252ZXJzaW9uLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVJbnN0YW5jZS5jcHAiIC8+DQpAQCAt
NDQ2LDEyICs0NDcsMTggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFsdWVXcmFwcGVyLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQWN0aXZhdGlvbi5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5LmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXIuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNCb3VuZEZ1bmN0aW9uLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTQ2VsbC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0NKU1ZhbHVlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
Q2VsbC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0RhdGFW
aWV3LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNEYXRlTWF0aC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0Z1bmN0aW9uLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
R2xvYmFsT2JqZWN0LmNwcCIgLz4NCkBAIC00NTksOCArNDY2LDggQEAKICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3BlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3QuY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPYmplY3QuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJveHkuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTY29wZS5jcHAiIC8+DQpAQCAtNDY4LDYgKzQ3NSw5IEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3RyaW5nLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3RyaW5nSm9pbmVyLmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
VHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNUeXBlZEFycmF5cy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1ZhcmlhYmxlT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTV2l0aFNjb3BlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTV3JhcHBlck9iamVjdC5jcHAiIC8+DQpAQCAtNDk5LDYgKzUwOSw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE9iamVjdC5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBQcm90b3R5cGUu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2FtcGxpbmdDb3Vu
dGVyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBsZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCIgLz4NCkBAIC01MTAsNiAr
NTIxLDggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlQ2hh
aW4uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJl
UmFyZURhdGEuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3lt
Ym9sVGFibGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcVHlwZWRBcnJheVR5cGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVk0uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
V2F0Y2hkb2cuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2F0
Y2hkb2dOb25lLmNwcCIgLz4NCkBAIC01MjcsNiArNTQwLDcgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xEYXRlUHJvdG90eXBlLmx1dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xFcnJvclByb3RvdHlwZS5sdXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNv
dXJjZXNcSGVhZGVyRGV0ZWN0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChD
b25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTR2xvYmFsT2JqZWN0Lmx1dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xKU09OT2JqZWN0Lmx1dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xMZXhl
ci5sdXQuaCIgLz4NCkBAIC03NzMsMTAgKzc4NywxMCBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIiAvPg0KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyLmgiIC8+DQot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZpZXcuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ0xpc3QuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50cy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXIuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmlldy5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb25zdHJ1Y3Rvci5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb252ZW50aW9ucy5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuaCIgLz4NCkBA
IC03OTgsNiArODEyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29t
bW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQ29tcGxldGlvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQ29uc3RydWN0RGF0YS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRGF0YVZpZXcuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XERhdGVDb25zdHJ1Y3Rvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRGF0ZUNvbnZlcnNpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXERhdGVJbnN0YW5jZS5oIiAvPg0KQEAgLTgxNSw2ICs4MzAsOCBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkNvbnN0cnVjdG9yLmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR0NBY3Rpdml0eUNhbGxiYWNrLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEdldHRlclNldHRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSWRlbnRpZmllci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SW5kZXhpbmdIZWFkZXIuaCIgLz4NCkBAIC04MjcsMjQgKzg0NCw0MiBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCIgLz4NCi0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQWN0aXZhdGlvbi5oIiAvPg0KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQWN0aXZhdGlvbi5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVm
ZmVyVmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0JvdW5kRnVuY3Rpb24uaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTQ2VsbC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNDSlNWYWx1ZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlND
SlNWYWx1ZUlubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTQ2VsbC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRh
Vmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRhVmll
d1Byb3RvdHlwZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNE
YXRlTWF0aC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEZXN0
cnVjdGlibGVPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTRXhwb3J0TWFjcm9zLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0Zsb2F0MzJBcnJheS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNGbG9hdDY0QXJyYXkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTRnVuY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0dsb2JhbE9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTSW50MTZBcnJheS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQzMkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0ludDhBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU05hbWVTY29wZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNOb3RBbk9iamVjdC5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTT05PYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
T2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU1Byb3h5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Nj
b3BlLmgiIC8+DQpAQCAtODU1LDYgKzg5MCwxMyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1N5bWJvbFRhYmxlT2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1R5cGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTVHlwZUluZm8uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5cy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50MTZBcnJheS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50MzJBcnJheS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50OEFycmF5LmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1ZhcmlhYmxlT2JqZWN0LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dpdGhTY29wZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFwcGVyT2JqZWN0LmgiIC8+DQpA
QCAtODk3LDYgKzkzOSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJl
Z0V4cFByb3RvdHlwZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
UmVqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTYW1wbGlu
Z0NvdW50ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxTbWFsbFN0cmluZ3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFN0cmljdEV2YWxBY3RpdmF0aW9uLmgiIC8+DQpAQCAtOTExLDcgKzk1NCwx
MSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN5bWJv
bFRhYmxlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUcmFjaW5n
LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5RGVz
Y3JpcHRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRB
cnJheUFkYXB0b3JzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
eXBlZEFycmF5Q29udHJvbGxlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcVHlwZWRBcnJheUlubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFR5cGVkQXJyYXlUeXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxUeXBlZEFycmF5cy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVWludDE2QXJyYXkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFVpbnQxNldpdGhGcmFjdGlvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcVWludDMyQXJyYXkuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsNTYgQEAKIAkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQ
cmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjQyREE3
MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURE
NEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUMxN0I2QjUzRjAwQTdBRTNG
IC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2QUUx
N0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQTE3QjZCNTNEMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIw
MTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi87IH07CisJCTBGMkI2NkRGMTdCNkI1
QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTAx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjIxN0I2QjVBQjAwQTdBRTNG
IC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZCMzE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI0MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTMxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZC
NjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsK
KwkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Qjcx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkU2MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI4MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY2RTcxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkI5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi87IH07CisJCTBG
MkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkJEMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2RUMxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RUQxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXdQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMxMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0Zsb2F0MzJBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMkI2NkYwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjExN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkM3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGOTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQz
MkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZD
QzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLzsgfTsK
KwkJMEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0Qx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkZDMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAqLzsgfTsKKwkJMEYyQjY2RkQxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVk
QXJyYXlQcm90b3R5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDAx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovOyB9OworCQkwRjJCNjZGRjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFt
cGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkQzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQx
NkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDQxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkQ2MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA1MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVU
eXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY3MDYxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDgxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NzA3MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwICovOyB9OworCQkwRjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2
NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkRDMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi87IH07CisJCTBGMkI2NzBCMTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
REMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAg
LyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTE2Niw2ICsyMTYsNyBAQAogCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUy
NzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0
Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNDkz
QUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBDQUQxMDA4NDUwOEIg
LyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OworCQkwRjRCOTREQzE3QjlGMDc1MDBERDAzQTQg
LyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NTU0MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDFBRjE2MTNDMUZCMDBDRTNF
MjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICovOyB9OwogCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNF
MjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTVD
MTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTVDMTkzMTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCAqLzsgfTsKQEAgLTM0OSw3ICs0MDAsNiBAQAogCQkw
RkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMkUxNzBENDBCRjAwQkI3MjJD
IC8qIERGR0NvbW1vbkRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3
MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUIz
RUNEMTYyMzdGNEQwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2
N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3Jv
QXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi87IH07
CiAJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZD
OUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsg
fTsKIAkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZD
OUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNCw4ICs4NzQs
NiBAQAogCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyQjE3QURCNUYzMDA1
QUIxNzQgLyogSW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJDMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdBOEFGM0MxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMy
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0
IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5
cGVkQXJyYXlCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYyRjE3QURC
NUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQxNkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTEyMDcsNiArMTI1NSw1NiBAQAogCQkwRjIzNUJFQTE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRQcmVw
YXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJC
MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxv
Y2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZBQTE3QjZCNTNE
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFW
aWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFWaWV3LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkIyMTdCNkI1QUIwMEE3QUUz
RiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkI1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkMxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QkQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXdQcm90b3R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkMyMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Zsb2F0NjRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZD
MzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQx
NkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50
MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDQzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkNFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDRjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkQwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVk
QXJyYXlzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNVaW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ2MTdCNkI1QUIwMEE3
QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1w
bGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlBZGFwdG9ycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEOTE3QjZCNUFCMDBBN0FFM0YgLyogVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5
cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkRDMTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUeXBlZEFycmF5VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0Zp
eHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAz
ODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTQsNiArMTM1Miw3IEBACiAJCTBGNDY4
MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9z
dENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIb3N0
Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDkzQUY4
MTZEMENBRDEwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTb3VyY2VQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNEI5NERCMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3BlY2lhbFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1
NDFCMDE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NUMxOTMxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5j
cHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDUxLDcgKzE1NTAsNiBAQAogCQkwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHQ29tbW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
b21tb25EYXRhLmg7IHBhdGggPSBkZmcvREZHQ29tbW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0
aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
QTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5oOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQjNFQ0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5
cGVkQXJyYXlEZXNjcmlwdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5
cGVkQXJyYXlEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
RUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUZDOUE3MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwOyBwYXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVGQzlBODE2ODFB
M0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHBhdGggPSBk
ZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTg4Miw3ICsxOTgwLDYgQEAKIAkJQTc1NzA2REQxMThBMkJDRjAwNTdGODhGIC8qIEpJ
VEFyaXRobWV0aWMzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRBcml0aG1ldGljMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NzY3QjVCMzE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjQxN0EwQjk2NTAw
NjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVi
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NUeXBlZEFycmF5U3R1YnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1
IC8qIEpTSW50ZXJmYWNlSklULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
SW50ZXJmYWNlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NkY1NEEyMTNC
MjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSklUV3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3N0E0MjM2MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RIZWFwLmNwcDsgcGF0
aCA9IGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTkyNyw4ICsyMDI0LDYgQEAKIAkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQ4QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50MTZBcnJheS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQg
LyogSW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQzMkFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3QThBRjJFMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEludGVncmFsVHlwZWRBcnJheUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTdBOEFGMkYxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQ4QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVp
bnQ4Q2xhbXBlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQ4
Q2xhbXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjMyMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI2
MCw3ICsyMzU1LDYgQEAKIAkJCQk0NUUxMkQ4ODA2QTQ5QjBGMDBFOURGODQgLyoganNjLmNwcCAq
LywKIAkJCQlGNjhFQkI4QzAyNTVENEM2MDFGRjYwRjcgLyogY29uZmlnLmggKi8sCiAJCQkJRjVD
MjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8sCi0JCQkJ
QTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovLAogCQkJ
CTkzN0I2M0NDMDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAogCQkJ
CUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICov
LAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCkBAIC0yNTU2LDYgKzI2
NTAsMTAgQEAKIAkJCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgKi8sCiAJCQkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAq
LywKIAkJCQlCQ0JFMkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi8sCisJ
CQkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8s
CisJCQkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lcy5oICovLAorCQkJCTBGMkI2NkFBMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oICovLAorCQkJCTBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLywKIAkJCQlDMjIzOUQxNTE2MjYyQkREMDA1QUM1
RkQgLyogR0NUaHJlYWQuY3BwICovLAogCQkJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBH
Q1RocmVhZC5oICovLAogCQkJCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNo
YXJlZERhdGEuY3BwICovLApAQCAtMjg3Myw2ICsyOTcxLDggQEAKIAkJCQkwRkRCMkNFOTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCAqLywKIAkJCQlCQ0E2MkRGRjBFMjgy
NjMxMDAwNEYzMEQgLyogQ29uc3RydWN0RGF0YS5jcHAgKi8sCiAJCQkJQkM4RjNDQ0YwREFGMTdC
QTAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEuaCAqLywKKwkJCQkwRjJCNjZCMDE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkIxMTdCNkI1QUIwMEE3QUUzRiAv
KiBEYXRhVmlldy5oICovLAogCQkJCUJDRDIwMzQ1MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29u
c3RydWN0b3IuY3BwICovLAogCQkJCUJDRDIwMzQ2MEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29u
c3RydWN0b3IuaCAqLywKIAkJCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZl
cnNpb24uY3BwICovLApAQCAtMjkwNyw2ICszMDA3LDggQEAKIAkJCQlGNjkyQTg1RDAyNTU1OTdE
MDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQlDMkQ1OEMzMzE1OTEyRkVF
MDAyMUE4NDQgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKIAkJCQlEREY3QUJEMjExRjYw
RUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCisJCQkJMEYyQjY2QjIxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovLAorCQkJCTBGMkI2NkIz
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8sCiAJ
CQkJQkMwMkU5QjgwRTE4NDU0NTAwMEY5Mjk3IC8qIEdldHRlclNldHRlci5jcHAgKi8sCiAJCQkJ
QkMzMzdCREUwRTFBRjBCODAwNzY5MThBIC8qIEdldHRlclNldHRlci5oICovLAogCQkJCTkzM0Ez
NDlEMDM4QUU4MEYwMDg2MzVDRSAvKiBJZGVudGlmaWVyLmNwcCAqLywKQEAgLTI5MjAsNyArMzAy
Miw2IEBACiAJCQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywK
IAkJCQlBN0E4QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAogCQkJCUE3
QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKLQkJCQlBN0E4QUYyRTE3
QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oICovLAogCQkJCUE3ODg1
M0Y3MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCAqLywKIAkJ
CQlBNzg4NTNGODE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICov
LAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAq
LywKQEAgLTI5MzAsNiArMzAzMSwxNSBAQAogCQkJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAv
KiBKU0FjdGl2YXRpb24uaCAqLywKIAkJCQk5M0FERkNFNjBDQ0JEN0FDMDBEMzBCMDggLyogSlNB
cnJheS5jcHAgKi8sCiAJCQkJOTM4NzcyRTUwMzhCRkUxOTAwODYzNUNFIC8qIEpTQXJyYXkuaCAq
LywKKwkJCQkwRjJCNjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8s
CisJCQkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKKwkJ
CQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNw
cCAqLywKKwkJCQkwRjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkI5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCQjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKKwkJCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8sCiAJCQkJODZGQTlFOEYxNDJCQkIyRDAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8sCiAJCQkJODZGQTlFOTAxNDJCQkIyRTAw
MTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oICovLAogCQkJCUJDN0Y4RkJBMEUxOUQxRUYwMDg2
MzJDMCAvKiBKU0NlbGwuY3BwICovLApAQCAtMjkzOCwxNyArMzA0OCwzMiBAQAogCQkJCUY2OTJB
ODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU0NKU1ZhbHVlLmNwcCAqLywKIAkJCQkxNEFCQjM2RTA5
OUMwNzY0MDBFMkEyNEYgLyogSlNDSlNWYWx1ZS5oICovLAogCQkJCTg2NUEzMEYwMTM1MDA3RTEw
MENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oICovLAorCQkJCTBGMkI2NkJEMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKKwkJCQkwRjJCNjZCRTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNEYXRhVmlldy5oICovLAorCQkJCTBGMkI2NkJGMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0RhdGFWaWV3UHJvdG90eXBlLmNwcCAqLywKKwkJCQkwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5oICovLAogCQkJCTk3ODhGQzIyMTQ3MUFEMEMwMDY4Q0Uy
RCAvKiBKU0RhdGVNYXRoLmNwcCAqLywKIAkJCQk5Nzg4RkMyMzE0NzFBRDBDMDA2OENFMkQgLyog
SlNEYXRlTWF0aC5oICovLAogCQkJCUMyQTdGNjg3MTYwNDMyRDQwMEY3NkI5OCAvKiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdC5oICovLAogCQkJCUE3QjRBQ0FFMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4
cG9ydE1hY3Jvcy5oICovLAorCQkJCTBGMkI2NkMxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0
MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkMyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRB
cnJheS5oICovLAogCQkJCUY2OTJBODVFMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmNw
cCAqLywKIAkJCQlGNjkyQTg1RjAyNTU1OTdEMDFGRjYwRjcgLyogSlNGdW5jdGlvbi5oICovLAog
CQkJCUE3MjAyOEI5MTc5NzYwM0QwMDk4MDI4QyAvKiBKU0Z1bmN0aW9uSW5saW5lcy5oICovLAor
CQkJCTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
ICovLAorCQkJCTBGMkI2NkM0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmggKi8sCisJCQkJMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2
QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICov
LAorCQkJCTBGMkI2NkM3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5oICovLAorCQkJCTBGMkI2NkM4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCAqLywKIAkJCQkxNERFMEQ2ODBEMDI0
MzE0MDBBQUNDQTIgLyogSlNHbG9iYWxPYmplY3QuY3BwICovLAogCQkJCUE4RTg5NDMzMENEMDYw
M0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9iamVjdC5oICovLAogCQkJCUJDNzU2RkM2MEUyMDMxQjIw
MERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJQkM3NTZGQzcw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggKi8sCisJCQkJMEYy
QjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkNC
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZDOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQk2NUVBNEM5OTA5MkFGOUUyMDA5
M0Q4MDAgLyogSlNMb2NrLmNwcCAqLywKIAkJCQk2NUVBNEM5QTA5MkFGOUUyMDA5M0Q4MDAgLyog
SlNMb2NrLmggKi8sCiAJCQkJMTQ4NzRBREYxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3Bl
LmNwcCAqLywKQEAgLTI5NzUsNyArMzEwMCwxNyBAQAogCQkJCTBGOTE5RDA5MTU3RUUwOUQwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLywKIAkJCQkwRjkxOUQwQTE1N0VFMDlE
MDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovLAogCQkJCTE0QUJCNDU0MDk5QzJB
MEYwMEUyQTI0RiAvKiBKU1R5cGUuaCAqLywKKwkJCQkwRjJCNjZDQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQkwRjJCNjZDRDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi8sCisJCQkJMEYyQjY2Q0Ux
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovLAorCQkJCTBG
MkI2NkNGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8sCisJ
CQkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwICovLAorCQkJ
CTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8sCiAJCQkJNjUw
N0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLywKKwkJCQkwRjJCNjZENDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovLAorCQkJCTBGMkI2NkQzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQkMyMkEzOUEwRTE2RTE0ODAwQUYy
MUM4IC8qIEpTVmFyaWFibGVPYmplY3QuY3BwICovLAogCQkJCTE0RjI1MjU2MEQwOEREOEQwMDRF
Q0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTQ0MjU2NUYxNUVERTk4RDAwNjZB
NDlCIC8qIEpTV2l0aFNjb3BlLmNwcCAqLywKQEAgLTMwNTEsNiArMzE4Niw4IEBACiAJCQkJMEZC
N0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovLAogCQkJCTBGNzcwMDkxMTQwMkZG
MjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovLAogCQkJCTBGNzcwMDhFMTQwMkZE
RDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLywKKwkJCQkwRjJCNjZENjE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMkI2
NkQ3MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oICovLAog
CQkJCTkzMzAzRkU4MEU2QTcyQjUwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwICovLAogCQkJ
CTkzMzAzRkVBMEU2QTcyQzAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCAqLywKIAkJCQkwRjBD
RDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8sCkBAIC0z
MDc4LDggKzMyMTUsMTMgQEAKIAkJCQkxNEEzOTZBNjBDRDI5MzMxMDBCNUI0RkYgLyogU3ltYm9s
VGFibGUuaCAqLywKIAkJCQk1RDUzNzI2RDBFMUM1NDZCMDAyMUU1NDkgLyogVHJhY2luZy5kICov
LAogCQkJCTVENTM3MjZFMEUxQzU0ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8sCi0JCQkJQTdB
OEFGMkYxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmggKi8sCi0JCQkJMEZFQjNF
Q0IxNjIzN0Y0NzAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggKi8sCisJCQkJMEYy
QjY2RDgxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovLAorCQkJCTBG
MkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8s
CisJCQkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxpbmVzLmggKi8s
CisJCQkJMEYyQjY2REIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggKi8sCisJCQkJ
MEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLywKKwkJCQkw
RjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCAqLywKIAkJCQlBN0E4
QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLywKIAkJCQk4NjY3MzlEMTEz
QkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggKi8sCiAJCQkJQTdBOEFGMzMx
N0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggKi8sCkBAIC0zNTM4LDEyICszNjgwLDE1
IEBACiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTYxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY4OENCMTUwRUQxMkI0RTAwMUQ2NDlGIC8qIEFz
c2VtYmxlckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdB
RTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBQzE3QjZCNTNGMDBB
N0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNC
MkM1MTAxNTZCREUwMDI4NjVFNyAvKiBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzg0QTI2MTExRDE2NjIyMDA1Nzc2QUMgLyogQVNUQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNo
ZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZE
RTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4MTZFMUMx
NTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY3MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5
dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtMzU1NSw2ICszNzAwLDcgQEAK
IAkJCQlBN0MxRUFFRjE3OTg3QUI2MDAyOTlEQjIgLyogQ2FsbEZyYW1lSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTVFM0JDMDUwRTFBRTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVj
b2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDgg
LyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM1NjYsNiArMzcxMiw3IEBACiAJCQkJ
ODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNB
NzE0QkNGNTA3MDA4ODVCNEYgLyogQ29kZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNTc2LDYgKzM3MjMsNyBAQAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdC
M0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUw
RTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcx
MzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVBRDJGQzE0RjAy
NDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4
RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCBpbiBIZWFkZXJzICovLApAQCAt
MzYwNCw2ICszNzUyLDcgQEAKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRq
YWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURC
IC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5RUEyRTAw
ODE3NTMzIC8qIERGR0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFMTE3QjZC
NUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNCNDE2
ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjE3LDYgKzM3NjYsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MzY0Qjcx
NjRCMEMxMTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZFQzlEQzUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjdC
Mjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjdCMjk0QTE0QzNDRDI5MDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2NTAsNiArMzgwMCw3IEBACiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQTE3QTBC
OENDMDA3NzNBRDggLyogREZHRmx1c2hMaXZlbmVzc0FuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUU2QzREMTM2QTExRTQwMDk2MzAxMiAvKiBERkdGUFJJbmZvLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZGODE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJh
dGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2QzRFMTM2QTExRTQwMDk2MzAxMiAv
KiBERkdHUFJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJB
RDcgLyogREZHR3JhcGguaCBpbiBIZWFkZXJzICovLApAQCAtMzY1OCw2ICszODA5LDcgQEAKIAkJ
CQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFQzlEQ0MxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzhBOTc3OTE3OTczOEI4MDA5REY3NDQgLyogREZHSklURmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9h
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3M0E1MzVCMTc5OUNENUQwMDE3MEMxOSAv
KiBERkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAw
RUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNjcxLDYgKzM4MjMsNyBAQAogCQkJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBE
RkdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQjE2RDAyRjAxMDA1NUE1REIgLyog
REZHTm9kZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNTgxQkIxNTBFOTUzMDAw
QjlBMkQ5IC8qIERGR05vZGVGbGFncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUQxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBNTgxQkMxNTBFOTUzMDAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOUREMDEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzY4NCw2ICszODM3
LDggQEAKIAkJCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk1QzE0RUY5MEFGMDBDNzI1MzIgLyogREZH
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdCMTc5NzM4QjgwMDlERjc0NCAvKiBE
RkdQbGFuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGNzE3QjZCNUFCMDBBN0FFM0YgLyog
SlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUw
Rjc1MTZDMURCMEIwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAw
MkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjkzLDYgKzM4
NDgsNyBAQAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0
QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0EzRkExMzJE
RjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDQ2MTVCMzcwMUYwMDhGMzYzRSAvKiBERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRB
cnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUUzQTY3MTUzQTIxRTIwMDBGOTQ1NiAv
KiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIx
RDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUM5REQzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNzI2LDYgKzM4ODIsNyBAQAogCQkJCTBGMjFDMjdDMTRCRTcyNzYw
MEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4
NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9h
dDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAv
KiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAwMDdC
M0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTM3NDYsNiAr
MzkwMyw3IEBACiAJCQkJMEZFQTBBMkMxNzBCNjYxOTAwQkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3RjE3OTczOEQ1MDA5REY3NDQgLyogRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTI0MTcwOTYwNjkw
MEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjcwODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEwQTBFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzhBOTc4MTE3OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxp
emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRM
TGluay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzk0LDcgKzM5NTIsNiBAQAogCQkJCUE3QThBRjNC
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBOEFGM0ExN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQTdBOEFGM0QxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3ODg1M0ZBMTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2
REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQy
MEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM4MTMsNiAr
Mzk3MCw3IEBACiAJCQkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5l
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QzUyNDJCMEY1MzU1RTkwMEJBM0Qw
NCAvKiBKSVRTdHVicy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RkYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRjY4MzVFMTc0MzQz
Q0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUYx
NzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QTRBRTBEMTc5NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic01JUFMuaCBpbiBIZWFkZXJzICovLApA
QCAtMzg0MCw2ICszOTk4LDcgQEAKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlND
bGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8q
IEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwNjE3QjZC
NUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQxRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDb250ZXh0UmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDhDRDFEODEwOENGOTAyMDA4MTYzQzYgLyogSlNDb250ZXh0UmVmUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyMDI4QjgxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5u
ZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODU1LDYgKzQwMTQsNyBAQAogCQkJCUJDMThD
NDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3
MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ4NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0
UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNP
YmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NjYsNiArNDAyNiw3IEBACiAJ
CQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGNjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ1RTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdGFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcu
aCBpbiBIZWFkZXJzICovLApAQCAtMzg4NCw2ICs0MDQ1LDcgQEAKIAkJCQk4NkUzQzYxNTE2N0JB
QkQ3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc0ODJFOTMxMTZBN0NBRDAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3
MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ0MjU2NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM5MTQsNiArNDA3Niw3IEBACiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4
MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0
RkYwQTYwMEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0ExMzRG
RjBBNjAwQUZBREI1IC8qIExvY2FsU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZC
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDM3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBMb29rdXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDY4MENEMTRCQkIxN0QwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEI3MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM5MjYsNiArNDA4OSw3IEBACiAJCQkJ
ODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjkxNkMy
MTREQTAxNEUwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MkQ2RjA5MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTM5MzQsMTQgKzQwOTgsMTcgQEAKIAkJCQlDMjExMjJFMzE1REQ5QUIzMDA3
OTBFM0EgLyogTWFya1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYxMkU0Q0Qx
NTIzODlFQzAwQzgzNkJFIC8qIE1hdGNoUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RUUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNTJBMEUxNkZDQzIwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0Lmx1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0
YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0NjdCMTRGNUM3RTEwMDJD
Mjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQkYzMDAxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDIxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQkYzMDQxNTYwRjA2QTAwOEU5MjIyIC8qIE5hbWVQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAv
KiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwOTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJF
OTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zOTcxLDYgKzQxMzgsNyBAQAogCQkJCTBGMzRCMTRDMTZENDNF
MEQwMDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOUZDOEM0MTRFMUI2MDAwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJl
Y2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFNTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zOTk5LDkgKzQxNjcsMTEgQEAKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2
MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0
QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFF
MCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1
QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQw
RjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
QjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDI0LDYgKzQxOTQsNyBAQAogCQkJCUE3
MDlGMkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAw
MTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTQw
MzYsNyArNDIwNyw5IEBACiAJCQkJMTRERjA0REExNkIzOTk2RDAwMTZBNTEzIC8qIFN0YXRpY1By
b3BlcnR5QW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0Q0E5NThCMTZBQjUwREUwMDkz
OEEwNiAvKiBTdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzMw
QjYxMjEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkYwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0NjRBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjYwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ0NvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRDE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjgwRTE2
RjVDRDAwQjM0NDYwIC8qIFN0cmluZ09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM1MjYwRTE2RkNBNzAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5sdXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDA0OCw2ICs0MjIxLDggQEAKIAkJCQlDMkZFMThBNDE2QkFFQzQwMDBB
RjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMEJBOTJE
MTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAxMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQzOTE1QUU0QTFGMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjBEMDgwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVy
ZVN0dWJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzkwNDE0ODBFQjkyNTA5MDBGRTI2RkEg
LyogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTQwNTcsOSAr
NDIzMiwxMCBAQAogCQkJCTBGNTcyRDRGMTY4NzlGREQwMEU1N0ZCRCAvKiBUaHVua0dlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTYxMTg2OTdCNDAwNTQwMjc5IC8qIFRodW5r
R2VuZXJhdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDQ4Q0QxM0ExNzgzNzAwRjVCQTFB
IC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFF
MTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUQ1MzcyNkYwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUE3QThBRjNFMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZFNzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIx
NThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDEx
NThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywK
QEAgLTQxMDQsNiArNDI4MCw3IEBACiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCNDMxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjRCOTREQzE3
QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
NDQ4OSw2ICs0NjY2LDcgQEAKIAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIg
LyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RG
RDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcw
NDE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZy
YW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAw
Q0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NTE0LDYg
KzQ2OTIsNyBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNhbEVk
Z2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkwQTYw
MEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3MjE2
RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNFMTMzMDE3OTYyNENEMDBFNERFQTggLyogREZHRGVz
aXJlZFN0cnVjdHVyZUNoYWlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4NTM0QjE3MjND
REE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNDU0Myw2ICs0NzIyLDcgQEAKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyogREZH
Tm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENGMTMyOERGODIwMDJCMkFE
NyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMkI2NkZDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAv
KiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc5MTE0NkE2RjcxMDBD
RjI0NDIgLyogREZHT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFQjE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjE2
LDYgKzQ3OTYsNyBAQAogCQkJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNo
YXJlZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENBN0RDQTAwODVGM0M2
IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NTUxMDdFQzBF
NzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZF
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDJFMzEzNTEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MkUzMTM3MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTdGFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTQ2NjgsMTEgKzQ4NDksMTMgQEAKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBG
Q0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFMzE1
RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcy
NzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8q
IEpTT2JqZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEw
QjJEMCAvKiBKU09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZFNjk1MEU1QjVG
OTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpT
U2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDY5MCw2ICs0ODczLDcgQEAKIAkJCQlB
NzQ4MkI5NDExNjcxMTQ3MDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
V3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkU0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjc2NkQzNDE1QUUyNTM4MDA4RjM2M0UgLyogSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDcxMiw2ICs0ODk2LDcgQEAKIAkJCQk4
NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTAwOUMxNzk3NkM2MDAwMzE3Mjk4IC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVEMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRT
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ3NjIsMTcgKzQ5NDcsMjEgQEAKIAkJCQkxNDc0
QzMzQzE2QUEyRDlCMDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkVCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Rh
dGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1
IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkw
MDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBS
ZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5
MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEODg1MEVEMjFDM0QwMEI4OTYxOSAvKiBT
YW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA0MDJDMEU2QTc2
NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3
MDcxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDlEQzE2QjEyRUYyOTNFMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MDUsNiArNDk5NCw3IEBA
CiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFNEEzMzFGMTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY3MEExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJy
YXlUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjJFMTcxRTNFMjMwMEJFNzdBNCAv
KiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYzMDE3MUUzRTIzMDBCRTc3
QTQgLyogV2F0Y2hkb2dNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NF
MDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5VmFsSW5mby5oCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDcgQEAgaW5saW5lIGJvb2wgaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlw
ZShJbgogCiBpbmxpbmUgYm9vbCBoYXNPcHRpbWl6YWJsZUluZGV4aW5nRm9yQ2xhc3NJbmZvKGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewotICAgIHJldHVybiBjbGFzc0luZm8tPnR5cGVk
QXJyYXlTdG9yYWdlVHlwZSAhPSBUeXBlZEFycmF5Tm9uZTsKKyAgICByZXR1cm4gaXNUeXBlZFZp
ZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogfQogCiBpbmxpbmUgYm9vbCBo
YXNPcHRpbWl6YWJsZUluZGV4aW5nKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtOTgsMjMgKzk4
LDIzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9ySW5kZXgKIGlubGluZSBK
SVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvKQogewogICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUp
IHsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQ4OgorICAgIGNhc2UgVHlwZUludDg6CiAgICAgICAg
IHJldHVybiBKSVRJbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50MTY6CisgICAgY2Fz
ZSBUeXBlSW50MTY6CiAgICAgICAgIHJldHVybiBKSVRJbnQxNkFycmF5OwotICAgIGNhc2UgVHlw
ZWRBcnJheUludDMyOgorICAgIGNhc2UgVHlwZUludDMyOgogICAgICAgICByZXR1cm4gSklUSW50
MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKKyAgICBjYXNlIFR5cGVVaW50ODoK
ICAgICAgICAgcmV0dXJuIEpJVFVpbnQ4QXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDhD
bGFtcGVkOgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKICAgICAgICAgcmV0dXJuIEpJVFVp
bnQ4Q2xhbXBlZEFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKKyAgICBjYXNlIFR5
cGVVaW50MTY6CiAgICAgICAgIHJldHVybiBKSVRVaW50MTZBcnJheTsKLSAgICBjYXNlIFR5cGVk
QXJyYXlVaW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgogICAgICAgICByZXR1cm4gSklUVWlu
dDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9h
dDMyOgogICAgICAgICByZXR1cm4gSklURmxvYXQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJh
eUZsb2F0NjQ6CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKICAgICAgICAgcmV0dXJuIEpJVEZsb2F0
NjRBcnJheTsKICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwpAQCAtMTIyLDYgKzEyMiwz
MyBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIGppdEFycmF5TW9kZUZvckNsYXNzCiAgICAgfQogfQog
CitpbmxpbmUgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoSklU
QXJyYXlNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQ4
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlSW50ODsKKyAgICBjYXNlIEpJVEludDE2QXJyYXk6
CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBKSVRJbnQzMkFycmF5OgorICAg
ICAgICByZXR1cm4gVHlwZUludDMyOworICAgIGNhc2UgSklUVWludDhBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVVaW50ODsKKyAgICBjYXNlIEpJVFVpbnQ4Q2xhbXBlZEFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgorICAg
ICAgICByZXR1cm4gVHlwZVVpbnQxNjsKKyAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZVVpbnQzMjsKKyAgICBjYXNlIEpJVEZsb2F0MzJBcnJheToKKyAgICAgICAg
cmV0dXJuIFR5cGVGbG9hdDMyOworICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgorICAgICAgICBy
ZXR1cm4gVHlwZUZsb2F0NjQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAg
ICAgcmV0dXJuIE5vdFR5cGVkQXJyYXk7CisgICAgfQorfQorCiBpbmxpbmUgSklUQXJyYXlNb2Rl
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBp
ZiAoaXNPcHRpbWl6YWJsZUluZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDI5ICsyNjYsMjcg
QEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogICAgIGlmIChjbGFz
c0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4g
U3BlY0Z1bmN0aW9uOwogICAgIAotICAgIGlmIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSAhPSBUeXBlZEFycmF5Tm9uZSkgewotICAgICAgICBzd2l0Y2ggKGNsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAg
ICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50
MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7Ci0gICAgICAgIGNhc2UgVHlw
ZWRBcnJheUludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNJbnQzMkFycmF5OwotICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJh
eTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDhDbGFtcGVkOgotICAgICAgICAgICAgcmV0
dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDE2
OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBUeXBl
ZEFycmF5VWludDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKLSAgICAg
ICAgY2FzZSBUeXBlZEFycmF5RmxvYXQzMjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjRmxvYXQz
MkFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICAgICAgcmV0
dXJuIFNwZWNGbG9hdDY0QXJyYXk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQorICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsK
KyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIFNwZWNJbnQxNkFycmF5OworICAg
IGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7CisgICAgY2Fz
ZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBTcGVjVWludDhBcnJheTsKKyAgICBjYXNlIFR5
cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBTcGVjVWludDhDbGFtcGVkQXJyYXk7Cisg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OworICAg
IGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50MzJBcnJheTsKKyAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+
aXNTdWJDbGFzc09mKEpTT2JqZWN0OjppbmZvKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgs
NiArNDU4LDMyIEBAIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmEKICAg
ICB9CiB9CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlSW50ODsKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAg
ICAgICByZXR1cm4gVHlwZUludDE2OworICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
ICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICAg
ICAgcmV0dXJuIFR5cGVVaW50ODsKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVVaW50OENsYW1wZWQ7CisgICAgY2FzZSBBcnJheTo6VWludDE2
QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgQXJyYXk6OlVpbnQz
MkFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQzMjsKKyAgICBjYXNlIEFycmF5OjpGbG9h
dDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQzMjsKKyAgICBjYXNlIEFycmF5OjpG
bG9hdDY0QXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIHZvaWQgQXJyYXlNb2Rl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KHR5cGUoKSwg
YXJyYXlDbGFzcygpLCBzcGVjdWxhdGlvbigpLCBjb252ZXJzaW9uKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNiArMTA0LDggQEAgY29uc3QgY2hhciogYXJyYXlDbGFzc1RvU3RyaW5nKEFycmF5OjpD
bAogY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlv
bik7CiBjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhBcnJheTo6Q29udmVyc2lv
bik7CiAKK1R5cGVkQXJyYXlUeXBlIHRvVHlwZWRBcnJheVR5cGUoQXJyYXk6OlR5cGUpOworCiBj
bGFzcyBBcnJheU1vZGUgewogcHVibGljOgogICAgIEFycmF5TW9kZSgpCkBAIC0zODAsNiArMzgy
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6U3RyaW5nOwog
ICAgIH0KICAgICAKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG9UeXBlZEFycmF5VHlwZSh0eXBlKCkpOworICAgIH0KKyAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiB0eXBlKCkgPT0gb3RoZXIudHlwZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NjcsMzcgKzI2NjcsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRB
cnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpV
aW50OEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1f
aml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwg
VW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7
CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJyYXlNb2RlLnR5cGVkQXJyYXlU
eXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsRm9ySW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobm9k
ZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzMs
NDYgKzI4NDksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpV
aW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRB
cnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxG
b3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNl
LmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAg
ICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUo
KTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5
cGUpOworICAgICAgICB9IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1ODEsMzcgKzI1ODEsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyhub2RlKTsKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5
RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50
MzJBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRU
eXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9m
KHVpbnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJB
cnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwg
dHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI4NzIsNDYg
KzI4NDgsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVy
dHkuZ3ByKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBu
b2RlLCBzaXplb2YoaW50MTZfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
ZihpbnQzMl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVp
bnQxNkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
c2l6ZW9mKHVpbnQxNl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MzJB
cnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVv
Zih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9m
KGZsb2F0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGRvdWJsZSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gYXJy
YXlNb2RlLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisg
ICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgdHlwZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KGJhc2UuZ3ByKCksIHBy
b3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsMzIgKzU4Myw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICB9CiB9CiAg
ICAgCi1jb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJy
YXlEZXNjcmlwdG9yKEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQx
NkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKLSAg
ICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52
bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0
b3IoKTsKLSAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC52bSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMy
QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRv
cigpOwotICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2pp
dC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotfQotCiBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6
anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFy
cmF5TW9kZSwgSW5kZXhpbmdUeXBlIHNoYXBlKQogewogICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFy
cmF5Q2xhc3MoKSkgewpAQCAtNjk0LDggKzY2OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNo
ZWNrQXJyYXkoTm9kZSogbm8KICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgCi0g
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9IHR5cGVkQXJyYXlEZXNjcmlw
dG9yKG5vZGUtPmFycmF5TW9kZSgpKTsKLSAgICAKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
YWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKSkpIHsKICAgICAgICAgbm9SZXN1bHQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTcyNywyMiArNjk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNr
QXJyYXkoTm9kZSogbm8KICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIGV4cGVj
dGVkQ2xhc3NJbmZvID0gQXJndW1lbnRzOjppbmZvKCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQXJyYXk6OkludDhBcnJheToKLSAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgIGNh
c2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICBj
YXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJh
eToKLSAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDMy
QXJyYXk6Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICBleHBlY3RlZENs
YXNzSW5mbyA9IHJlc3VsdC0+bV9jbGFzc0luZm87Ci0gICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGV4cGVj
dGVkQ2xhc3NJbmZvID0gY2xhc3NJbmZvRm9yVHlwZShub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUKGV4cGVjdGVkQ2xhc3NJbmZvKTsKKyAgICAKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0yNjAx
LDggKzI1NjQsMTAgQEAgc3RhdGljIHZvaWQgY29tcGlsZUNsYW1wRG91YmxlVG9CeXRlKEpJVAog
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSogbm9kZSwgc2l6
ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVzcyBzaWduZWRuZXNzKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwpA
QCAtMjYxOSwxNiArMjU4NCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkluCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgc3dpdGNoIChl
bGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzd2l0Y2ggKGVs
ZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9
PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAg
ICAgICBtX2ppdC5sb2FkOFNpZ25lZChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpLCByZXN1bHRSZWcpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUp
LCByZXN1bHRSZWcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChz
aWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBl
KSkKICAgICAgICAgICAgIG1faml0LmxvYWQxNlNpZ25lZChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28pLCBy
ZXN1bHRSZWcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2ppdC5sb2FkMTYoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzVHdvKSwgcmVzdWx0UmVnKTsKQEAgLTI2MzksMTIgKzI2MDUsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIGRlZmF1bHQ6CiAgICAgICAg
IENSQVNIKCk7CiAgICAgfQotICAgIGlmIChlbGVtZW50U2l6ZSA8IDQgfHwgc2lnbmVkbmVzcyA9
PSBTaWduZWRUeXBlZEFycmF5KSB7CisgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBp
c1NpZ25lZCh0eXBlKSkgewogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKGVsZW1lbnRTaXplID09
IDQgJiYgc2lnbmVkbmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgIEFTU0VSVChlbGVt
ZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CiAgICAgaWYgKG5vZGUtPnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICBmb3J3YXJkU3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSksIFZhbHVlUmVjb3Zlcnk6
OnVpbnQzMkluR1BSKHJlc3VsdFJlZykpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJl
Zywgbm9kZSk7CkBAIC0yNjU5LDggKzI2MjUsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbgogICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0LmZwcigpLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQ
UlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyBzaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgcm91bmRpbmcpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7
CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKKyAgICAKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKQEAgLTI2NzcsOCArMjY0NSw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBkb3VibGUgZCA9IGpzVmFsdWUuYXNOdW1iZXIoKTsK
LSAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewor
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwogICAgICAgICAgICAg
ZCA9IGNsYW1wRG91YmxlVG9CeXRlKGQpOwogICAgICAgICB9CiAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwpAQCAtMjY5Myw4ICsyNjYxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT3AuZ3ByKCksIHNjcmF0Y2hSZWcpOwotICAgICAg
ICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwogICAg
ICAgICAgICAgICAgIGNvbXBpbGVDbGFtcEludGVnZXJUb0J5dGUobV9qaXQsIHNjcmF0Y2hSZWcp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFsdWUuYWRvcHQoc2NyYXRjaCk7CkBAIC0y
NzAzLDggKzI2NzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJ
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIE51bWJlclVzZTogewotICAg
ICAgICAgICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudFNpemUgPT0gMSk7CisgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5
cGUpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwog
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1
ZVVzZSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgICAgICAgICBGUFJUZW1wb3JhcnkgZmxvYXRTY3JhdGNoKHRoaXMpOwpAQCAtMjcyNCw3ICsy
NjkyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAg
ICAgICAgICAgIG5vdE5hTi5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFpbGVkOwotICAgICAgICAgICAgICAgIGlm
IChzaWduZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgICAgICAgICAgaWYgKGlz
U2lnbmVkKHR5cGUpKQogICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSBtX2ppdC5icmFuY2hU
cnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIE1hY3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRy
dW5jYXRlRmFpbGVkKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGZhaWxlZCA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9VaW50MzIoZnByLCBncHIsIE1h
Y3JvQXNzZW1ibGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsKQEAgLTI3NDksOSArMjcxNyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBBU1NFUlQo
dmFsdWVHUFIgIT0gc3RvcmFnZVJlZyk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHM7CiAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCi0gICAgICAgIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpKTsKKyAgICAgICAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKIAotICAgIHN3aXRjaCAoZWxl
bWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAx
OgogICAgICAgICBtX2ppdC5zdG9yZTgodmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHksIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkpOwog
ICAgICAgICBicmVhazsKQEAgLTI3NjksOCArMjczNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNp
emUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0
KHR5cGUpKTsKKyAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwpAQCAtMjc4Niw4ICsyNzU2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwot
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Cisg
ICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKICAgICAgICAgbV9q
aXQubG9hZEZsb2F0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLCByZXN1bHRSZWcpOwogICAgICAgICBt
X2ppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShyZXN1bHRSZWcsIHJlc3VsdFJlZyk7CkBAIC0yODA4
LDggKzI3NzksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAog
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUq
IG5vZGUsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKKyAgICAKICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMykpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKICAgICAKQEAgLTI4MjQsMTAgKzI3OTcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIEFTU0VSVF9VTlVTRUQoYmFzZVVzZSwgbm9kZS0+
YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5m
b3JOb2RlKGJhc2VVc2UpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHM7Ci0gICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlWYWwpCi0gICAgICAgIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkgeworICAgICAgICBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOworICAgIH0KICAgICAK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBl
KSkgewogICAgIGNhc2UgNDogewogICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHZhbHVlRlBSLCBz
Y3JhdGNoRlBSKTsKICAgICAgICAgbV9qaXQuY29udmVydERvdWJsZVRvRmxvYXQodmFsdWVGUFIs
IHNjcmF0Y2hGUFIpOwpAQCAtNDAzMyw4ICs0MDA5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOwogICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAKLSAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUt
PmFycmF5TW9kZSgpKTsKLSAgICAKICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwg
c3RvcmFnZVJlZyk7CkBAIC00MDQ4LDggKzQwMjIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3ItPm1fc3RvcmFnZU9mZnNl
dCksIHN0b3JhZ2VSZWcpOworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mVmVjdG9yKCkpLAorICAgICAgICAgICAgc3RvcmFnZVJlZyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKQEAgLTQxNTAsOCArNDEyNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZ3RoKE5vZGUqIG5vZGUpCiB7Ci0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3IqIGRlc2NyaXB0b3IgPSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLT5hcnJheU1vZGUoKSk7
Ci0KICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKQEAgLTQxOTEsMTYgKzQxNjUsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAgICAgICBjb21w
aWxlR2V0QXJndW1lbnRzTGVuZ3RoKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
ZGVmYXVsdDoKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2Rl
LT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIEFTU0VS
VChkZXNjcmlwdG9yKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3ItPm1fbGVuZ3RoT2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICB9CisgICAg
fSB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbk5vQ2hlY2so
Tm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3MywxMCArMTk3Mywx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQXJpdGhEaXYoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZUFyaXRoTW9kKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzKTsKLSAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cywgVHlwZWRBcnJheVJvdW5kaW5nID0gVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYs
IE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVnIGJhc2Us
IEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJl
ZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9w
ZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlv
bk5vQ2hlY2soTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihO
b2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CkBAIC0yMTE4LDggKzIx
MTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZShOb2RlKiwgRWRnZSk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9kZSk7Ci0gICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJ
bmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSwgSW5kZXhpbmdUeXBlKTsKICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJ
bmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSk7CiAgICAgdm9pZCBjaGVja0FycmF5KE5vZGUqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5VG9rZW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksOCBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGVudW0gQ29weVRva2Vu
IHsKLSAgICBCdXR0ZXJmbHlDb3B5VG9rZW4KKyAgICBCdXR0ZXJmbHlDb3B5VG9rZW4sCisgICAg
VHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDI0IEBAIHByaXZhdGU6CiAgICAgSGVhcCYgbV9oZWFwOwogfTsKIAorY2xhc3MgRGVm
ZXJHQ0ZvckFXaGlsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVmZXJHQ0ZvckFXaGls
ZSk7CitwdWJsaWM6CisgICAgRGVmZXJHQ0ZvckFXaGlsZShIZWFwJiBoZWFwKQorICAgICAgICA6
IG1faGVhcChoZWFwKQorICAgIHsKKyAgICAgICAgbV9oZWFwLmluY3JlbWVudERlZmVycmFsRGVw
dGgoKTsKKyAgICB9CisgICAgCisgICAgfkRlZmVyR0NGb3JBV2hpbGUoKQorICAgIHsKKyAgICAg
ICAgbV9oZWFwLmRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSGVhcCYgbV9oZWFwOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBE
ZWZlckdDX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
R0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZF9oCisK
KyNpbmNsdWRlIDx3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CisKKy8vIEEgQy1oZWFw
LWFsbG9jYXRlZCBvYmplY3QgdGhhdCBtYXkgaGF2ZSBhZGRpdGlvbmFsIHJlZmVyZW5jZSBjb3Vu
dHMKKy8vIGR1ZSB0byBpbmNvbWluZyByZWZlcmVuY2VzIGZyb20gdGhlIGhlYXAsIHdoaWNoIGFy
ZSB0cmFja2VkIGluCisvLyByZXZlcnNlOiB0aGUgb2JqZWN0IGtub3dzIGl0cyBpbmNvbWluZyBy
ZWZlcmVuY2VzLiBTdWNoIG9iamVjdHMgYWxzbworLy8gaGF2ZSB0aGUgaW52YXJpYW50IHRoYXQg
dGhleSBkb24ndCBoYXZlIHJlZmVyZW5jZXMgYmFjayBpbnRvIHRoZSBHQworLy8gaGVhcC4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkIDogcHVibGlj
IERlZmVycmFibGVSZWZDb3VudGVkPFQ+IHsKK3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291
bnRlZCgpCisgICAgICAgIDogbV9lbmNvZGVkUG9pbnRlcigwKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgfkdDSW5jb21pbmdSZWZDb3VudGVkKCkKKyAgICB7CisgICAgICAgIGlmIChoYXNWZWN0
b3JPZkNlbGxzKCkpCisgICAgICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIH0K
KyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24oKSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7CisgICAgfQorICAgIAorICAgIEpT
Q2VsbCogaW5jb21pbmdSZWZlcmVuY2VBdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAgIGlmIChoYXNTaW5nbGV0b24o
KSkgeworICAgICAgICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gc2lu
Z2xldG9uKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZlY3Rvck9mQ2VsbHMoKS0+YXQo
aW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCdzIGdlbmVyYWxseSBub3QgYSBnb29kIGlk
ZWEgdG8gY2FsbCB0aGlzIGRpcmVjdGx5LCBzaW5jZSBpZiB0aGlzCisgICAgLy8gcmV0dXJucyB0
cnVlLCB5b3UncmUgc3VwcG9zZWQgdG8gYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBHQydzIGxpc3Qu
CisgICAgLy8gQ2FsbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDo6YWRkUmVmZXJlbmNlKCkgaW5z
dGVhZC4KKyAgICBib29sIGFkZEluY29taW5nUmVmZXJlbmNlKEpTQ2VsbCopOworICAgIAorICAg
IC8vIEEgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB3ZSB3aXNoIHRvIGtlZXAgdGhl
IGluY29taW5nCisgICAgLy8gcmVmZXJlbmNlLCBhbmQgZmFsc2UgaWYgd2UgZG9uJ3QuIFRoaXMg
bWF5IGRlbGV0ZSB0aGUgb2JqZWN0LAorICAgIC8vIGFuZCBpZiBpdCBkb2VzIHNvLCB0aGlzIHJl
dHVybnMgdHJ1ZS4gSW4gZ2VuZXJhbCwgeW91IGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgdGhp
cyB3aXRoIGEgZmlsdGVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBmYWxzZSB1bmxlc3MKKyAg
ICAvLyB5b3UncmUgYWxzbyB3YWxraW5nIHRoZSBHQydzIGxpc3QuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRmlsdGVyRnVuY3Rpb25UeXBlPgorICAgIGJvb2wgZmlsdGVySW5jb21pbmdSZWZlcmVu
Y2VzKEZpbHRlckZ1bmN0aW9uVHlwZSYpOworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdWlu
dHB0cl90IHNpbmdsZXRvbkZsYWcoKSB7IHJldHVybiAxOyB9CisgICAgCisgICAgYm9vbCBoYXNW
ZWN0b3JPZkNlbGxzKCkgY29uc3QgeyByZXR1cm4gIShtX2VuY29kZWRQb2ludGVyICYgc2luZ2xl
dG9uRmxhZygpKTsgfQorICAgIGJvb2wgaGFzQW55SW5jb21pbmcoKSBjb25zdCB7IHJldHVybiAh
IW1fZW5jb2RlZFBvaW50ZXI7IH0KKyAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0IHsgcmV0
dXJuIGhhc0FueUluY29taW5nKCkgJiYgIWhhc1ZlY3Rvck9mQ2VsbHMoKTsgfQorICAgIAorICAg
IEpTQ2VsbCogc2luZ2xldG9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTaW5n
bGV0b24oKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9lbmNvZGVk
UG9pbnRlciAmIH5zaW5nbGV0b25GbGFnKCkpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8SlND
ZWxsKj4qIHZlY3Rvck9mQ2VsbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Zl
Y3Rvck9mQ2VsbHMoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmVjdG9yPEpTQ2Vs
bCo+Kj4obV9lbmNvZGVkUG9pbnRlcik7CisgICAgfQorICAgIAorICAgIC8vIFNpbmdsZXRvbiBm
bGFnIGlzIHNldDogdGhpcyBpcyBhIEpTQ2VsbCouCisgICAgLy8gU2luZ2xldG9uIGZsYWcgbm90
IHNldDogdGhpcyBpcyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2YgY2VsbHMuCisgICAgdWludHB0
cl90IG1fZW5jb2RlZFBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEdDSW5jb21pbmdSZWZDb3VudGVkX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXNfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXNfaAorCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVm
Q291bnRlZDxUPjo6YWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKiBjZWxsKQoreworICAgIGlm
ICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBtX2VuY29kZWRQb2ludGVyID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCkgfCBzaW5nbGV0b25GbGFnKCk7CisgICAgICAgIHRoaXMt
PnNldElzRGVmZXJyZWQodHJ1ZSk7CisgICAgICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoSGVhcDo6aGVhcChp
bmNvbWluZ1JlZmVyZW5jZUF0KDApKSA9PSBIZWFwOjpoZWFwKGNlbGwpKTsKKyAgICAKKyAgICBp
ZiAoaGFzU2luZ2xldG9uKCkpIHsKKyAgICAgICAgVmVjdG9yPEpTQ2VsbCo+KiB2ZWN0b3IgPSBu
ZXcgVmVjdG9yPEpTQ2VsbCo+KCk7CisgICAgICAgIHZlY3Rvci0+YXBwZW5kKHNpbmdsZXRvbigp
KTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoY2VsbCk7CisgICAgICAgIG1fZW5jb2RlZFBvaW50
ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2ZWN0b3IpOworICAgICAgICBBU1NFUlQoaGFz
VmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICB2ZWN0b3JPZkNlbGxzKCktPmFwcGVuZChjZWxsKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5
cGU+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkPFQ+OjpmaWx0ZXJJbmNvbWluZ1JlZmVyZW5j
ZXMoRmlsdGVyRnVuY3Rpb25UeXBlJiBmaWx0ZXJGdW5jdGlvbikKK3sKKyAgICBjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiRmlsdGVyaW5nIGluY29taW5nIHJlZmVyZW5jZXMuXG4iKTsKKyAgICAKKyAgICBpZiAoIWhh
c0FueUluY29taW5nKCkpIHsKKyAgICAgICAgQVNTRVJUKCF0aGlzLT5pc0RlZmVycmVkKCkpOwor
ICAgICAgICBBU1NFUlQodGhpcy0+cmVmQ291bnQoKSk7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICAgIEhhcyBubyBpbmNvbWluZy5cbiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIEFTU0VSVCh0aGlzLT5pc0RlZmVycmVkKCkp
OworICAgIAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBpZiAoZmlsdGVyRnVu
Y3Rpb24oc2luZ2xldG9uKCkpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICBTaW5nbGV0b24gcGFzc2VkLlxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiICAgUmVtb3Zpbmcgc2luZ2xldG9uLlxuIik7CisgICAgICAg
IG1fZW5jb2RlZFBvaW50ZXIgPSAwOworICAgICAgICBBU1NFUlQoIWhhc0FueUluY29taW5nKCkp
OworICAgICAgICB0aGlzLT5zZXRJc0RlZmVycmVkKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICBI
YXMgIiwgdmVjdG9yT2ZDZWxscygpLT5zaXplKCksICIgZW50cmllcy5cbiIpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yT2ZDZWxscygpLT5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoZmlsdGVyRnVuY3Rpb24odmVjdG9yT2ZDZWxscygpLT5hdChpKSkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5hdChpLS0pID0gdmVjdG9yT2ZD
ZWxscygpLT5sYXN0KCk7CisgICAgICAgIHZlY3Rvck9mQ2VsbHMoKS0+cmVtb3ZlTGFzdCgpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5zaXplKCkgPj0gMikgeworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgIFN0aWxsIGhhcyAiLCB2
ZWN0b3JPZkNlbGxzKCktPnNpemUoKSwgIiBlbnRyaWVzLlxuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlY3Rvck9mQ2VsbHMoKS0+aXNFbXB0eSgpKSB7
CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgUmVtb3Zpbmcu
XG4iKTsKKyAgICAgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICAgICAgbV9lbmNvZGVk
UG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmcoKSk7CisgICAgICAg
IHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgIFNocmlua2luZyB0
byBzaW5nbGV0b24uXG4iKTsKKyAgICBKU0NlbGwqIHNpbmdsZXRvbiA9IHZlY3Rvck9mQ2VsbHMo
KS0+YXQoMCk7CisgICAgZGVsZXRlIHZlY3Rvck9mQ2VsbHMoKTsKKyAgICBtX2VuY29kZWRQb2lu
dGVyID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc2luZ2xldG9uKSB8IHNpbmdsZXRvbkZsYWco
KTsKKyAgICBBU1NFUlQoaGFzU2luZ2xldG9uKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRfaAorI2RlZmluZSBHQ0luY29taW5nUmVmQ291
bnRlZFNldF9oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworLy8gVCA9IHNvbWUgc3VidHlwZSBvZiBHQ0luY29taW5nUmVmQ291bnRlZCwg
bXVzdCBzdXBwb3J0IGEgZ2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkKKy8vIG1ldGhvZC4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBHQ0luY29taW5nUmVmQ291bnRlZFNldCB7CitwdWJsaWM6
CisgICAgR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQoKTsKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXQoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG5hdGl2ZSBvYmplY3Qg
aXMgbmV3IHRvIHRoaXMgc2V0LgorICAgIGJvb2wgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIFQqKTsK
KyAgICAKKyAgICB2b2lkIHN3ZWVwKCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzOyB9OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCByZW1v
dmVBbGwoSlNDZWxsKik7CisgICAgc3RhdGljIGJvb2wgcmVtb3ZlRGVhZChKU0NlbGwqKTsKKyAg
ICAKKyAgICBWZWN0b3I8VCo+IG1fdmVjdG9yOworICAgIHNpemVfdCBtX2J5dGVzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHQ0luY29taW5nUmVmQ291bnRlZFNldF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
U2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAor
I2RlZmluZSBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXNfaAorCisjaW5jbHVkZSAiR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpH
Q0luY29taW5nUmVmQ291bnRlZFNldCgpCisgICAgOiBtX2J5dGVzKDApCit7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6fkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV92ZWN0b3Iuc2l6ZSgpOyBp
LS07KQorICAgICAgICBtX3ZlY3RvcltpXS0+ZmlsdGVySW5jb21pbmdSZWZlcmVuY2VzKHJlbW92
ZUFsbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0PFQ+OjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBUKiBvYmplY3QpCit7CisgICAg
aWYgKCFvYmplY3QtPmFkZEluY29taW5nUmVmZXJlbmNlKGNlbGwpKSB7CisgICAgICAgIEFTU0VS
VChvYmplY3QtPmlzRGVmZXJyZWQoKSk7CisgICAgICAgIEFTU0VSVChvYmplY3QtPm51bWJlck9m
SW5jb21pbmdSZWZlcmVuY2VzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG1fdmVjdG9yLmFwcGVuZChvYmplY3QpOworICAgIG1fYnl0ZXMgKz0gb2JqZWN0LT5nY1NpemVF
c3RpbWF0ZUluQnl0ZXMoKTsKKyAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVkKCkpOworICAg
IEFTU0VSVChvYmplY3QtPm51bWJlck9mSW5jb21pbmdSZWZlcmVuY2VzKCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBHQ0luY29taW5nUmVmQ291
bnRlZFNldDxUPjo6c3dlZXAoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVCogb2JqZWN0ID0gbV92ZWN0b3JbaV07CisgICAg
ICAgIHNpemVfdCBzaXplID0gb2JqZWN0LT5nY1NpemVFc3RpbWF0ZUluQnl0ZXMoKTsKKyAgICAg
ICAgQVNTRVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+
bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgICAgIGlmICghb2JqZWN0LT5maWx0
ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVtb3ZlRGVhZCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgbV9ieXRlcyAtPSBzaXplOworICAgICAgICBtX3ZlY3RvcltpLS1dID0gbV92ZWN0
b3IubGFzdCgpOworICAgICAgICBtX3ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVt
b3ZlQWxsKEpTQ2VsbCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorYm9vbCBHQ0luY29taW5nUmVmQ291bnRlZFNldDxUPjo6cmVtb3ZlRGVhZChKU0Nl
bGwqIGNlbGwpCit7CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKGNlbGwpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKICNpbmNs
dWRlICJERkdXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkdDQWN0aXZpdHlDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBS
b290VmlzaXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiSW5j
cmVtZW50YWxTd2VlcGVyLmgiCkBAIC0zNTgsNiArMzU5LDE0IEBAIHZvaWQgSGVhcDo6amV0dGlz
b25ERkdDb2RlQmxvY2soUGFzc1JlZlAKICAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29k
ZUJsb2NrKTsKIH0KIAordm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJh
eUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2Uo
Y2VsbCwgYnVmZmVyKSkgeworICAgICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7Cisg
ICAgICAgIGRpZEFsbG9jYXRlKGJ1ZmZlci0+Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkpOworICAg
IH0KK30KKwogdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3Im
IGhlYXBSb290VmlzaXRvcikKIHsKICAgICBQcm90ZWN0Q291bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9
IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwpAQCAtNjIxLDE0ICs2MzAsMTkgQEAgc2l6ZV90IEhl
YXA6Om9iamVjdENvdW50KCkKICAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5vYmplY3RDb3VudCgp
OwogfQogCitzaXplX3QgSGVhcDo6ZXh0cmFTaXplKCkKK3sKKyAgICByZXR1cm4gbV9leHRyYU1l
bW9yeVVzYWdlICsgbV9hcnJheUJ1ZmZlcnMuc2l6ZSgpOworfQorCiBzaXplX3QgSGVhcDo6c2l6
ZSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uu
c2l6ZSgpICsgbV9leHRyYU1lbW9yeVVzYWdlOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLnNp
emUoKSArIG1fc3RvcmFnZVNwYWNlLnNpemUoKSArIGV4dHJhU2l6ZSgpOwogfQogCiBzaXplX3Qg
SGVhcDo6Y2FwYWNpdHkoKQogewotICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNhcGFjaXR5KCkg
KyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpOworICAgIHJldHVybiBtX29iamVjdFNwYWNlLmNh
cGFjaXR5KCkgKyBtX3N0b3JhZ2VTcGFjZS5jYXBhY2l0eSgpICsgZXh0cmFTaXplKCk7CiB9CiAK
IHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpCkBAIC03MDcsNiArNzIx
LDEyIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBkYXRh
TG9nRigiSlNDIEdDIHN0YXJ0aW5nIGNvbGxlY3Rpb24uXG4iKTsKICNlbmRpZgogICAgIAorICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CisgICAgICAg
IGRhdGFMb2coIltHQyIsIHN3ZWVwVG9nZ2xlID09IERvU3dlZXAgPyAiIChlYWdlciBzd2VlcCki
IDogIiIsICI6ICIpOworICAgICAgICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgfQor
ICAgIAogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rp
b24iKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVCghbV9kZWZlcnJhbERlcHRoKTsKQEAgLTc0
NSw2ICs3NjUsMTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwog
ICAgIH0KIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOworICAgIAorICAgIHsKKyAg
ICAgICAgR0NQSEFTRShTd2VlcGluZ0FycmF5QnVmZmVycyk7CisgICAgICAgIG1fYXJyYXlCdWZm
ZXJzLnN3ZWVwKCk7CisgICAgfQogCiAgICAgewogICAgICAgICBtX2Jsb2NrU25hcHNob3QucmVz
aXplKG1fb2JqZWN0U3BhY2UuYmxvY2tzKCkuc2V0KCkuc2l6ZSgpKTsKQEAgLTgxNSw2ICs4NDAs
MTEgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogCiAgICAgaWYg
KE9wdGlvbnM6OnNob3dPYmplY3RTdGF0aXN0aWNzKCkpCiAgICAgICAgIEhlYXBTdGF0aXN0aWNz
OjpzaG93T2JqZWN0U3RhdGlzdGljcyh0aGlzKTsKKyAgICAKKyAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkgeworICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAg
IGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXMsICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQs
ICIga2JdXG4iKTsKKyAgICB9CiAKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQogICAg
IGRhdGFMb2dGKCJKU0MgR0MgZmluaXNoaW5nIGNvbGxlY3Rpb24uXG4iKTsKQEAgLTkyNCwxMiAr
OTU0LDE2IEBAIHZvaWQgSGVhcDo6aW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpCiAgICAgbV9kZWZl
cnJhbERlcHRoKys7CiB9CiAKLXZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdD
SWZOZWVkZWQoKQordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoKCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChtX2RlZmVycmFsRGVwdGggPj0gMSk7CiAgICAgCiAgICAgbV9kZWZlcnJh
bERlcHRoLS07Ci0gICAgCit9CisKK3ZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFu
ZEdDSWZOZWVkZWQoKQoreworICAgIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsKICAgICBjb2xs
ZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOSArMjIsMTEgQEAKICNpZm5kZWYgSGVhcF9oCiAj
ZGVmaW5lIEhlYXBfaAogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCbG9j
a0FsbG9jYXRvci5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCiAjaW5jbHVkZSAiREZHQ29k
ZUJsb2Nrcy5oIgorI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVk
ZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCiAjaW5jbHVk
ZSAiSGFuZGxlU3RhY2suaCIKQEAgLTE0NCw2ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQgamV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+KTsKIAorICAgICAgICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1
c2FnZSBvdXRzaWRlIG9mIHBhZ2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
aXplX3QgY2FwYWNpdHkoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IG9iamVj
dENvdW50KCk7CkBAIC0xNzksMTEgKzE4MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgICAgIAogICAgICAgICBjb25z
dCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gbV9qaXRTdHVi
Um91dGluZXM7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkUmVmZXJlbmNlKEpTQ2VsbCos
IEFycmF5QnVmZmVyKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgQ29k
ZUJsb2NrOwogICAgICAgICBmcmllbmQgY2xhc3MgQ29waWVkQmxvY2s7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBEZWZlckdDOworICAgICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQ0ZvckFXaGlsZTsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEdDQXdhcmVKSVRTdHViUm91dGluZTsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEhhbmRsZVNldDsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVFN0dWJSb3V0aW5l
OwpAQCAtMjMwLDYgKzIzNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCbG9ja0FsbG9j
YXRvciYgYmxvY2tBbGxvY2F0b3IoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaW5jcmVtZW50
RGVmZXJyYWxEZXB0aCgpOworICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGgoKTsK
ICAgICAgICAgdm9pZCBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCgpOwogCiAg
ICAgICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CkBAIC0yNDUsNiArMjUyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxsb2NhdG9yIG1fYmxvY2tBbGxvY2F0b3I7CiAg
ICAgICAgIE1hcmtlZFNwYWNlIG1fb2JqZWN0U3BhY2U7CiAgICAgICAgIENvcGllZFNwYWNlIG1f
c3RvcmFnZVNwYWNlOworICAgICAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldDxBcnJheUJ1ZmZl
cj4gbV9hcnJheUJ1ZmZlcnM7CiAgICAgICAgIHNpemVfdCBtX2V4dHJhTWVtb3J5VXNhZ2U7CiAK
ICNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1l
KSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheVByb3RvdHlwZVRhYmxl
OyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJs
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmJvb2xlYW5Q
cm90b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRhVmll
d1RhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0
YVZpZXdUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlVGFibGU7
IH0KICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlQ29uc3Ry
dWN0b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3Rv
dHlwZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCku
ZXJyb3JQcm90b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZp
c2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBM
aXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBD
b250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExp
c3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXpl
LCBUeXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVk
QXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0
IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVt
cExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0
VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwg
VHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVn
VDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAg
ICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMg
aW50LWNoZWNrZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KICAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdT
aGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAg
ICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxl
bWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcpOwotICAg
ICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVf
dCBlbGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7
CisgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCiAg
ICAgICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDksMTMg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklU
QXJyYXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKSVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VEludDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRv
cigpLCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJ
bnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KSwgNCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWlu
dDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCks
IDEsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWlu
dDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJh
eURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFy
cmF5RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Rmxv
YXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VEZsb2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVz
Y3JpcHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklU
QXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0g
anVtcCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwg
VHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNp
Z25lZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVz
Y3JpcHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92
bS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0
ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJh
eToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigp
LCAxLCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGlu
Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFy
cmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9h
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBl
ZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2Rl
KTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRB
cnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywxMCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFs
X2dlbmVyaWMpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5
U2lnbmVkbmVzcyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgLy8g
VGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMgdG8gdXNlIHRoZSBjbGFzc0lu
Zm8uIFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNsb2JiZXJpbmcgdGhlIHJlZ2lz
dGVyIHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2UsIGFuZCBwcm9wZXJ0eS4KIApA
QCAtMTY4OSwxOSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJy
YXlHZXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJ
bmZvKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7Cisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNo
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9G
b3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6
b2Zmc2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUp
IHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAg
ICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWdu
ZWQodHlwZSkpCiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVy
dHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGxvYWQ4KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2Fk
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9
PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAg
ICAgICBsb2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJl
c3VsdFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4
KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwpAQCAtMTcxNCw3ICsx
NjcxLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIH0K
ICAgICAKICAgICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRTaXplID09IDQgJiYgc2lnbmVk
bmVzcyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAodHlwZSA9PSBUeXBlVWludDMy
KSB7CiAgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWws
IHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIAogICAgICAgICBjb252
ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKQEAgLTE3NDAsOCArMTY5
NywxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgcmV0
dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NF
UlQoaXNGbG9hdCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CkBAIC0x
NzU4LDExICsxNzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
R2UKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8p
KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0
cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5
cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgewor
ICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGxv
YWRGbG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOwog
ICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTE3ODks
OCArMTc0OCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAg
ICAgcmV0dXJuIHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
LCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5
cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50
KHR5cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTgwOCw4ICsxNzY5LDggQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aFB0cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpj
bGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
QWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAg
ICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IGVhcmx5U2NyYXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5n
IHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAg
ICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNo
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYgKHJvdW5kaW5nID09IENsYW1w
Um91bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5cGVkQXJyYXkp
OworICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
KHR5cGUpID09IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVkKHR5cGUpKTsKICAgICAgICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVz
dGVkSW1tMzIoMHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJU
aGFuLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIHhvcjMyKGVh
cmx5U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyArMTc5Nyw3IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRj
aCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIHN0b3JlOChlYXJs
eVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7
CisgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBA
IC0xODcyLDggKzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJh
eVB1CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwg
U3RydWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X2NsYXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOwor
ICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlT
Y3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFz
c0luZm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4OTgsOSArMTg2MSw5IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAKICAgICAvLyBX
ZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2Vw
dCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xv
YmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9m
ZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgc3dp
dGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAg
ICBjYXNlIDQ6CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVnVDAp
OwogICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJv
cGVydHksIFRpbWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAs
MTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTQgKzI2
LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKIAot
I2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgQXJyYXlC
dWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5QnVmZmVyOjp0
cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0MSw5IEBAIGJvb2wgQXJyYXlC
dWZmZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBmb3IgKEFy
cmF5QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0Vmlldykgewot
ICAgICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmlld3NBcmVO
ZXV0ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxlID0gIW1fcGlu
Q291bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlmIChpc05ldXRl
cmFibGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAgICBlbHNlIHsK
ICAgICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs1MSwxMyBAQCBi
b29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFy
cmF5QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3
KGN1cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQt
PmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAg
IG5ldXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSBudW1i
ZXJPZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVm
ZXJlbmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRl
cigpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlcjo6YWRk
VmlldyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlz
OwotICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2Zp
cnN0VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3By
ZXZWaWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlC
dWZmZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0
aGlzID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAg
ICAgdmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAg
aWYgKHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZp
ZXcgPSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAg
ICAgICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2Vmll
dyA9IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNp
b24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lmbmRlZiBBcnJheUJ1ZmZlcl9o
CiAjZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVmZmVyVmlldzsK
K2NsYXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAtNDUsNyArNDcs
NyBAQCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMo
KTsKLQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNp
Z25lZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApAQCAtODYsMTIg
Kzg4LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKLWNs
YXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKK2NsYXNz
IEFycmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVh
dGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIq
KTsKICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25z
dCB2b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAg
ICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBPbmx5IGZvciB1
c2UgYnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAgICAgc3RhdGlj
IGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAtOTksMTQgKzEw
MiwxNiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29u
c3Qgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkg
Y29uc3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBj
b25zdDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVn
aW4sIGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBz
bGljZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGluZSB2b2lkIHBpbigpOworICAg
IGlubGluZSB2b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3
Kik7Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgYm9vbCBp
c05ldXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CiAKICAgICB+QXJyYXlC
dWZmZXIoKSB7IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdW5z
aWduZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRpYyBpbmxpbmUgaW50
IGNsYW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisgICAgdW5zaWduZWQg
bV9waW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJy
YXlCdWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdlYWs8SlNBcnJheUJ1
ZmZlcj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4
LCBpbnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NywxMiBAQCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJh
eUJ1ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1
ZmZlcjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3Ro
KQoreworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2FzdDx2b2lkKj4o
ZGF0YSksIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoY29udGVudHMpOworfQorCiBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1
bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJl
dHVybiBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250
ZW50czo6RG9udEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3IEBAIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVy
KEFycmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZpZXcoMCkKKyAg
ICA6IG1fcGluQ291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsK
IH0KQEAgLTE5NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgo
KSBjb25zdAogICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9CiAKK3NpemVf
dCBBcnJheUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc2l6ZW9mKEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZUxlbmd0aCgp
KTsKK30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBi
ZWdpbiwgaW50IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgo
YmVnaW4pLCBjbGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsyMzcsMjMgQEAgdW5zaWduZWQg
QXJyYXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJldHVybiBjbGFtcFZhbHVlKGlu
ZGV4LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJheUJ1ZmZlcjo6cGluKCkKK3sK
KyAgICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OnVucGluKCkKK3sKKyAg
ICBtX3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2Nh
dGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlC
dWZmZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1ZmZlckNv
bnRlbnRzJiByZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBv
ZiB0aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxs
b2MgZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50cywKLSAgICAvLyBhbmQgd2ls
bCBmYWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRl
IGEKLSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/
CisgICAgLy8gRG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4K
ICAgICBpZiAobnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVt
RWxlbWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1F
bGVtZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51
bUVsZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAgICAgfHwgdG90YWxTaXplID4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkgewogICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJy
YXlCdWZmZXJDb250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogdXNpbmcgSlNDOjpBcnJheUJ1
ZmZlcjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsKIAogI2VuZGlmIC8vIEFycmF5
QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwy
OCArMzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVmZmVyVmlldzo6QXJyYXlC
dWZmZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAgICwgbV9pc05ldXRlcmFi
bGUodHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fcHJldlZpZXcoMCkKLSAg
ICAsIG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAg
IFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
KQorICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0
ZXJhYmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFk
ZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkg
KyBtX2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAgICBtX2J1ZmZl
ci0+YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3
KCkKIHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRo
aXMpOworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigp
OwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3ZvaWQgQXJyYXlCdWZmZXJW
aWV3OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAg
bV9ieXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1dGVyYWJsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxhZzsKKyAgICAKKyAgICBp
ZiAoIW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZsYWcpCisgICAg
ICAgIG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAgICAgbV9idWZmZXItPnBpbigp
OwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAogCiAjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CkBAIC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpT
QXJyYXlCdWZmZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBFeGVjU3RhdGU7
CisKIGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVy
Vmlldz4gewogcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwK
LSAgICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBU
eXBlSW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAg
ICAgVHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0
LAotICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0
VHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBj
b25zdCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAgIH0KKyAgICAK
ICAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1
cm4gbV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAogICAg
IHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRlT2Zm
c2V0KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9CiAKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNldE5l
dXRlcmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAgIGJvb2wgaXNO
ZXV0ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJvdGVjdGVkOgot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgc2V0SW1wbChB
cnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29s
IHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1
bnNpZ25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwot
CiAgICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFy
cmF5QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisg
ICAgc3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5z
aWduZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUg
c2l6ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0ZU9m
ZnNldCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5
dGVMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHJl
bWFpbmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNldCkgLyBz
aXplb2YoVCk7CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ5dGVMZW5n
dGggLSBieXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKG51bUVsZW1lbnRzID4g
cmVtYWluaW5nRWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3
cmFwKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIAorcHJvdGVjdGVkOgor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChB
cnJheUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29s
IHNldFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisgICAgICAgIGludCBzdGFydCwg
aW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1
bnNpZ25lZCogbGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2Yg
ZWxlbWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQgb2Zmc2V0IGlz
IGluIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZpZXcuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmRO
dW1FbGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGFycmF5
Qnl0ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1lbnRzKQorICAg
IHN0YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoCisgICAgICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0
LAorICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVu
dHMpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJh
eUJ5dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNl
dCkgewpAQCAtMTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRz
ID0gc3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0g
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRo
aXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUg
Ynl0ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIApAQCAtMTMwLDggKzE0MSw2
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwog
ICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBt
X3ByZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wg
QXJyYXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVk
IGJ5dGVPZmZzZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onpl
cm9SYW5nZUltcGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVy
Vmlldzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWdu
ZWQgYXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBB
cnJheUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCgKKyAgICBpbnQgc3RhcnQs
IGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQq
IGxlbmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCArPSBhcnJheVNp
emU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFi
bGU7CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
RnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBn
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdh
c3RlTWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1ZmZl
clZpZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07CiAK
ICNkZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0Niw4
IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVjdFZp
cnR1YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZDbGFz
c05hbWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0
VHlwZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9y
YWdlVHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDggQEAKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCiAjZGVmaW5lIEpT
Q19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgbWFj
cm8oQXJyYXkpIFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAorICAgIG1hY3JvKEJZVEVTX1BF
Ul9FTEVNRU5UKSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAgIG1hY3JvKERhdGUpIFwKICAg
ICBtYWNybyhFcnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAg
ICAgbWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZl
cikgXAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAg
ICAgbWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29kZUluZGV4KSBcCiAgICAgbWFj
cm8oYnl0ZWNvZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAgICAgbWFjcm8ocHJvcGVydHlJ
c0VudW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKICAgICBtYWNybyhzZXQpIFwK
KyAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJj
ZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3JvKHN1YmFycmF5KSBcCiAgICAg
bWFjcm8odGVzdCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwpIFwKICAgICBtYWNybyh0b0Zp
eGVkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YVZpZXc6
OkRhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIs
IGJ5dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKworUGFz
c1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQs
IGJ5dGVMZW5ndGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcqIERhdGFWaWV3Ojp3cmFwKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gSlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVk
QXJyYXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKKyAg
ICAgICAgYnl0ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19o
CisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVz
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAg
RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdmly
dHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2J5dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OworICAgIH0K
KworICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9i
YWxPYmplY3QqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0KHVu
c2lnbmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAg
eworICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9m
KFQpID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAq
c3RhdHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsK
KyAgICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzKSAr
IG9mZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBp
ZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxl
bmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzdGF0dXMgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkpOworICAgICAgICAqcmVpbnRl
cnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zm
c2V0KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxl
RW5kaWFuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRhVmlld19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgpAQCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxvYXQzMkFycmF5X2gKICNkZWZp
bmUgRmxvYXQzMkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJB
cnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewotcHVibGljOgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShjb25z
dCBmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkg
YmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQu
IERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3Jp
cHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxG
bG9hdDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAg
IHVzaW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBl
ZEFycmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9h
dD4odmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4g
c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMy
QXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9h
dDMyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVu
ZCBjbGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJB
cnJheT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVy
biBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShjb25zdCBm
bG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJy
YXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxG
bG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQzMkFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5
OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0
LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXlJbXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQzMkFycmF5Owog
CiAjZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDk4ICsxMCwy
NSBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZpbmUgRmxvYXQ2NEFycmF5X2gK
IAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1YmxpYyBUeXBl
ZEFycmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3Jl
YXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJh
eUJhc2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJs
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxkb3Vi
bGU+OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlwZWRBcnJheUJh
c2U8ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOwot
ICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdl
dFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIAotICAgIC8v
IE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFz
cyBUeXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+
IEZsb2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlw
ZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNvbnN0IGRvdWJs
ZSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4o
YnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJh
eT4gRmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0aWFsaXplZDxG
bG9hdDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2NEFycmF5KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJh
eTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFy
dCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5
OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFy
cmF5SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0NjRBcnJheTsK
IAogI2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gK
KyNkZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDog
cHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5
cGVkQXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25zdCB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KGJhc2VBZGRy
ZXNzKCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldElt
cGwoYXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSog
ZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGggKiBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5nZSh1bnNpZ25lZCBv
ZmZzZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gemVyb1JhbmdlSW1w
bChvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksIGxlbmd0aCAqIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgemVyb0Zp
bGwoKSB7IHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bGVuZ3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5s
ZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5n
dGgoKSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRo
aXMtPmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAg
ICAgICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJm
bG93CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAg
CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFy
dCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5
VHlwZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBl
VmFsdWU7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRB
cnJheVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQor
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAg
IGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0
aCk7CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3Nl
ZEJ1ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRl
T2Zmc2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUo
YnVmZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRB
bmRMZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZzZXQsICZsZW5ndGgpOwor
ICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlwZT4oYnVmZmVyKCksIGJ5
dGVPZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIo
KSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNB
cnJheUJ1ZmZlclZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6d3JhcCgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEFkYXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwg
Z2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVWYWx1ZSksIHRo
aXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3Mg
QnV0dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJl
OwpAQCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkg
eyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVu
Z3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7
IH0KICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVk
QXJyYXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVm
ZmVyKSB7IHUudHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMg
SW5kZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAx
OwpAQCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVi
bGljTGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFy
cmF5IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUg
cHVibGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50
MzJfdCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkg
c3RvcmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywg
YW5kIHRoZSB0eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFy
cmF5OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2LDkgQEAKICNpZm5kZWYgSW50
OEFycmF5X2gKICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRB
cnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1j
bGFzcyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+IHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5
PiBjcmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBT
aG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxs
IGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkg
dG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgp
OwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQ
dHI8SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNz
UmVmUHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gVHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4QXJyYXkoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAg
ICBmcmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8
SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQ4X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGlu
dDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PEludDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3Jl
YXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5PihsZW5ndGgpOwot
fQotCi1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQot
UGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVm
UHRyPEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2lu
ZyBKU0M6OkludDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1NDA2NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAg
LTI2LDc3ICsyNiw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAogI2RlZmluZSBJbnQxNkFycmF5
X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDogcHVibGljIElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IGludDE2X3Qq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJ
bnQxNkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdo
ZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAv
LyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0
IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+
IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVk
QXJyYXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTxpbnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5
PiBzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3
VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MTY7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8g
TWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNz
IFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJ
bnQxNkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5
LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+
OjpjcmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5Ojpj
cmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJheT4obGVuZ3Ro
KTsKLX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVn
cmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17
Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQot
Ci1QYXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwg
aW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2QXJyYXk+KHN0
YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5
cy5oIgogCiB1c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQxNkFycmF5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAkocmV2
aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJbnQzMkFycmF5X2gKICNkZWZp
bmUgSW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRo
ZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVz
ZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0Lgot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+Ojpz
ZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Owot
ICAgIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5s
aW5lIEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRv
IHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19Owot
Ci1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5
PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0
ZShjb25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50
MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4o
bGVuZ3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6
IEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkK
LXsKLX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQg
c3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0
LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4o
c3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJy
YXlzLmgiCiAKIHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2VuZGlmIC8vIEludDMyQXJyYXlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgor
I2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZv
IEpTQXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19p
bmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJh
eUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKKyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5
QnVmZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9CisKK0pT
QXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7Cisg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJh
eUJ1ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNB
cnJheUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVy
ZSwgYnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6Omdl
dE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3Qp
OworICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5p
bXBsKCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlw
dG9yKQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1
ZmZlcio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoCisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgo
KSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1
ZmZlcjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZm
ZXIqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0
TW9kZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIg
cHJvcGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJh
eUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAg
ICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoKQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGlu
ZyB0byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZl
cjo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNB
cnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsK
KyAgICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAg
ICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgIAorICAg
IEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJh
eSwgbW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAK
K3Byb3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZlciogY3JlYXRl
KFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAorICAgIEFy
cmF5QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1Zh
bHVlIHByb3RvdHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9
OworCitpbmxpbmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Kj4odmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHdyYXBwZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsKKyAgICAi
RnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
OjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIpOworICAgIHB1dERpcmVjdFdp
dGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlw
ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBE
b250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK0pTQXJyYXlCdWZmZXJDb25z
dHJ1Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKQor
ICAgICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAg
ICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAgICAgICBsZW5n
dGggPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1l
bnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRvIHNheQorICAg
ICAgICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGFs
bG9jYXRpbmcgYW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdpdGggYSB6ZXJvIGxlbmd0aC4K
KyAgICAgICAgbGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBKU0FycmF5QnVm
ZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCks
IGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVm
ZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0Nv
bnN0cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAor
ICAgIEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1
cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVy
biBDYWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
X2gKKworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IEludGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgREVDTEFSRV9J
TkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRh
Jik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRh
cHRvcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVl
KCkpOworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiUmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIuIikpOworICAgIAor
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVxdWlyZXMgYXQgbGVhc3Qg
b25lIGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1l
bnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50
MzJfdCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAg
IGVuZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmltcGwo
KS0+Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3QnVmZmVy
ID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKKyAgICBpZiAoIW5ld0J1
ZmZlcikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCk7
CisgICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVy
UHJvdG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJvdG90eXBlIiwgJkJhc2U6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyUHJvdG90eXBl
KQorfTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
eworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAK
KyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1
ZmZlclByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisKK0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSog
cHJvdG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1
ZmZlclByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUo
dm0sIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9i
YWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKyNkZWZpbmUgSlNB
cnJheUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUq
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogY3JlYXRlKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisgICAgREVDTEFS
RV9JTkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8g
PSB7CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitKU0FycmF5QnVmZmVyVmlldzo6
Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXpl
LAorICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAg
ICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDApCit7CisgICAgaWYgKGxl
bmd0aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlv
bi4KKyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVu
Z3RoLCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3Jh
Z2UoMCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3Ry
dWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1f
bW9kZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
aWYgKG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0g
c3RhdGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgICAgICBh
c1dvcmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0
eXBlZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBpZiAobGVuZ3RoID4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAoIXRyeUZhc3RD
YWxsb2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5n
dGggKiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNf
Y2FzdDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitK
U0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4
dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgLCBtX3ZlY3RvcihzdGF0aWNf
Y2FzdDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0KQorICAgICwg
bV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAg
ICBJbmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRB
cnJheUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJm
bHk6OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitK
U0FycmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25D
b250ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29u
dGV4dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAg
LCBtX2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgp
KQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3aXRjaCAobV9tb2RlKSB7
CisgICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3Zl
cnNpemVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5h
bGl6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAg
ICAgICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5KCktPmluZGV4aW5nSGVh
ZGVyKCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6Omdl
dE93blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+
KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3Qt
PmJ5dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAg
ICAgIHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNv
bnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZp
ZXc6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBleGVjLT52bSgpLm1f
dHlwZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSwKKyAgICAgICAgICAg
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZl
clZpZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJh
eUJ1ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5p
c1N0cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFy
cmF5IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
Ym9vbCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAg
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAg
ICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhy
b3csICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHku
Iik7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29s
IEpTQXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwp
OworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5n
dGgKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
T2Zmc2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
YnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQg
SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxl
bmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJl
Zm94LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAg
ICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAg
YXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJy
YXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBC
YXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXks
IG1vZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNl
bGwpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxK
U0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUg
PT0gT3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5
cGVkQXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFy
cmF5KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAor
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xh
c3Mgc2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0
cyBvZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24g
dGVtcGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2Vi
Q29yZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBj
b2RlIHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkg
YnVmZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUg
dmlldy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlz
IGp1c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBi
eSBoYXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3Vi
amVjdCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVy
IG9mCisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRl
ciBvZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmln
aHQgbm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0
b28gbXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRp
YWJsZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5k
aW5nIG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25l
IGFueXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3Ig
dGhlIERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJh
eU1vZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwg
ViBwb2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBh
bmQgTSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVk
IGVudGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisg
ICAgCisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0
byB3YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2lu
dCB0byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBw
b2ludHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBh
bmQgTSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50
aXJlbHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBh
ZGQgYSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAg
IAorICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4g
QidzIEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVy
ZW5jZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVk
IGFycmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAg
ICAvLyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3Rl
ZnVsVHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4K
KyAgICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpT
QXJyYXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUK
Ky8vIEFycmF5QnVmZmVyIGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRv
d24gYW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEg
dGhlIEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlz
IGFsd2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlz
IGNsYXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4g
ZXhpc3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJWaWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
YXN0U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50
MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IChsZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAg
ICAgICAgICAgJiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAgIHB1YmxpYzoK
KyAgICAgICAgZW51bSBJbml0aWFsaXphdGlvbk1vZGUgeyBaZXJvRmlsbCwgRG9udEluaXRpYWxp
emUgfTsKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0cnVjdGlvbkNv
bnRleHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRT
aXplLCBJbml0aWFsaXphdGlvbk1vZGUgPSBaZXJvRmlsbCk7CisgICAgICAgIAorICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgICAgICAgICAgVk0mLCBT
dHJ1Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQor
ICAgICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgICAg
ICB1aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICBU
eXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAg
ICAgdm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBU
eXBlZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7Cisg
ICAgfTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYs
IENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lk
IHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1
bGwtb24gbmF0aXZlIGJ1ZmZlci4gQWxzbyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAK
KyAgICAvLyBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZO
ZWNlc3NhcnkoKTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlOyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2
b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQor
CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3
LCBtX3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0aCk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2
b2lkIGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdm9p
ZCogbV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJheU1vZGUg
bV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVm
ZmVyVmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmlu
ZSBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2lubGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZO
ZWNlc3NhcnkoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KQorICAg
ICAgICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOworfQorCitp
bmxpbmUgQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNs
b3dEb3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHko
KS0+aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0
dXJuIG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09
IFdhc3RlZnVsVHlwZWRBcnJheSk7CisgICAgbV9sZW5ndGggPSAwOworICAgIG1fdmVjdG9yID0g
MDsKK30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkK
K3sKKyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAgICAgICBBU1NF
UlQobV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJy
YXkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IGRlbHRh
ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNDZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRl
ICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgpAQCAtMjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQ2VsbDo6
Z2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE1
NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpT
TG9jay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURl
c2NyaXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9U
eXBlVHJhaXRzLmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBD
b3B5VmlzaXRvcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3Owog
Y2xhc3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE0OSw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAg
U3RydWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVu
dmFsaWRhdGVkR2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAgICBzdGF0aWMgY29uc3QgVHlw
ZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZWRBcnJheU5vbmU7CisgICAg
c3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IE5vdFR5
cGVkQXJyYXk7CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CkBA
IC0xNjcsNiArMTY4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZm
ZXJWaWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0RhdGFWaWV3LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNs
dWRlICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXc6OnNf
aW5mbyA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmlldyhWTSYgdm0s
IENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQor
eworfQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2Vk
QnVmZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYg
KCFBcnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAgICAgICAgICAg
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQg
b2YgcmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0
cnVjdHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQp
OworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpzZXQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERh
dGFWaWV3PiBKU0RhdGFWaWV3Ojp0eXBlZEltcGwoKQoreworICAgIHJldHVybiBEYXRhVmlldzo6
Y3JlYXRlKGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksIGxlbmd0aCgpKTsKK30KKworYm9vbCBKU0Rh
dGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2Jq
ZWN0KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9s
ZW5ndGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0Rh
dGFWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAg
ICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVu
Z3RoKSwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmll
dzo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5S
RUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiBKU0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0
KQoreworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9i
amVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQorCitTdHJ1Y3R1
cmUqIEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJy
YXkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEpTRGF0YVZpZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUgIkRhdGFWaWV3
LmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZWxlbWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXco
Vk0mLCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpT
RGF0YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVk
IGJ5dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFj
dHVhbGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8gcGxhY2F0ZSBz
b21lIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAgICBzdGF0aWMg
SlNEYXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldChFeGVjU3RhdGUq
LCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAg
ICBQYXNzUmVmUHRyPERhdGFWaWV3PiB0eXBlZEltcGwoKTsKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgVHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURhdGFWaWV3Owor
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcq
KTsKKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0RhdGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5
cGUuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2lu
Y2x1ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBl
ZEFycmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0g
eworICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6
ZGF0YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5
cGUpCit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdp
biBkYXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y0dldEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50
OCAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJv
dG9GdW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdl
dFVpbnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAg
RG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAK
KyAgZ2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBk
YXRhVmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAg
ICAgMAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0
ICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAg
ICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlv
biAgICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVp
bnQ4ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAg
ICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMy
ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90
b0Z1bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0
RmxvYXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmll
d1Byb3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
QGVuZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorewor
fQorCitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBw
cm90b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3
UHJvdG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3Ry
dWN0dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
cHJvdG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3du
UHJvcGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVy
biBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3Rh
dGU6OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2Jq
ZWN0KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3
UHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rp
b25EZXNjcmlwdG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmll
d1RhYmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAg
ICAgIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+CitFbmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBK
U0RhdGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0
aG9kIG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIp
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9V
SW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxl
RW5kaWFuID0gZmFsc2U7CisgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSk7CisgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVu
dCgxKS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVuZ3RoKCk7Cisg
ICAgaWYgKGVsZW1lbnRTaXplID4gYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0
aCAtIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2Vz
cyIpKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihk
YXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0Zs
aXBCeXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxp
cEJ5dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6
OnRvSlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5j
b2RlZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyog
ZGF0YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJl
IGEgRGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAy
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSku
IikpOworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50
b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3Vt
ZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRp
YW4gPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIp
LnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgoKTsKKyAgICBp
ZiAoZWxlbWVudFNpemUgPiBieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoIC0g
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikp
OworICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRp
YW4pKQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihkYXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJ
bnQxNihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZBZGFwdG9y
PihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZp
ZXdQcm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVu
Y0dldFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDMy
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNT
ZXRJbnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQ4QWRhcHRv
cj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXRE
YXRhPEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5j
U2V0VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MTZB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBzZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRG
bG9hdDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDY0QWRh
cHRvcj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjaW5jbHVkZSAiSlNEYXRh
Vmlld1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFW
aWV3UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0
ZWQ6CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6
CisgICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSop
OworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNGbG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJh
eV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9h
dDY0QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0NjRB
cnJheV9oCisjZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU19FWFBP
UlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDhBcnJheUNsYXNzSW5mbygpOworSlNf
RVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7
CitKU19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDMyQXJyYXlDbGFzc0lu
Zm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0VWludDhBcnJheUNs
YXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50OENs
YW1wZWRBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZv
KiBnZXRVaW50MTZBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xh
c3NJbmZvKiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29u
c3QgQ2xhc3NJbmZvKiBnZXRGbG9hdDMyQXJyYXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklW
QVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0RmxvYXQ2NEFycmF5Q2xhc3NJbmZvKCk7CisKKy8vIEEg
dHlwZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBv
YmplY3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2
YXIgbyA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZp
dmUgZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisv
LyAgICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5
cGUqIFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8v
IFRoZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRz
LiBGSVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxs
eSB1bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBm
b3IKKy8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0
aGUgdHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFu
YWdlZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRo
b3NlIHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2gg
Zm9yCisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJv
bSB0aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhl
IHZpZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2
aWV3J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRp
emVkIGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQg
aG93IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRl
cmZhY2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9y
IHsKKy8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5
IFZpZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAg
ICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0
b05hdGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0
ZSosIEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOwor
Ly8gICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1Ymxp
YyBKU0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVy
VmlldyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3Jl
YXRlKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjx0eXBlbmFt
ZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPHR5
cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRl
TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2Yo
bV9sZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBj
b25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+
KG1fdmVjdG9yKTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0
b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVh
bnQgdG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8g
c3VwcG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJ
bmRleFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5n
dGg7CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAg
eworICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlw
ZWRWZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFz
RG91YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3Vi
bGUoZ2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpT
VmFsdWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4g
QWRhcHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQg
aSwgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
IDwgbV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBB
ZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4
UXVpY2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5k
ZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAg
IH0KKyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGksIEpTVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6
OlR5cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VRdWlja2x5KHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9m
ZnNldCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVu
Z3RoCisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0
ICsgbGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlj
a2x5LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAg
Ly8gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVSYW5nZShFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJv
dyBvbiBlcnJvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAgYm9vbCBz
ZXRXaXRoU3BlY2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vz
c2Z1bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAgLy8gdGhl
biBpdCB3aWxsIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAK
KyAgICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0eXBlZEltcGwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoYnVmZmVyKCks
IGJ5dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5ldmVyIGFjY2Vzc2VkIGRpcmVj
dGx5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24gc29tZSBjb21waWxlcnMuCisg
ICAgCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyogaW5mbygpCisgICAgeworICAgICAgICBz
d2l0Y2ggKEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAg
ICAgICAgICAgcmV0dXJuIGdldEludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5
cGVJbnQxNjoKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7Cisg
ICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldEludDMyQXJyYXlD
bGFzc0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICByZXR1cm4g
Z2V0VWludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgICAgICByZXR1cm4gZ2V0VWludDhDbGFtcGVkQXJyYXlDbGFzc0luZm8oKTsKKyAg
ICAgICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldFVpbnQxNkFycmF5
Q2xhc3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgIHJldHVy
biBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgor
ICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0NjRBcnJheUNsYXNz
SW5mbygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUg
PSBBZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVj
dCBUeXBlZEFycmF5Q2xhc3NJbmZvczsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworCisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAor
ICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8v
IEFsbG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8g
dGhlIEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxs
b2NhdGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVN
ZW1vcnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgoraW5saW5lIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRh
cHRvcjo6Vmlld1R5cGU+IHRvTmF0aXZlVHlwZWRWaWV3KEpTVmFsdWUgdmFsdWUpCit7CisgICAg
dHlwZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8dHlw
ZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSo+KHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVi
bGljOgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6Cisg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0
cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
KworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3Rv
dHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBuYW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5C
WVRFU19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVtZW50U2l6ZSksIERvbnRF
bnVtIHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+Kgor
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
T2JqZWN0KiBwcm90b3R5cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUq
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3Ry
dWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9Cisg
ICAgICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBlZEFycmF5
U3RvcmFnZVR5cGUpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7Cisg
ICAgICAgIGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZp
ZXcpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LiIpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBkb2N1bWVudGF0
aW9uIGRvZXNuJ3Qgc2F5IHNvLCBpdCdzIGNvcnJlY3QgdG8gc2F5CisgICAgICAgIC8vICJuZXcg
SW50OEFycmF5KCkiLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgb2Yg
emVybworICAgICAgICAvLyBsZW5ndGguCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Vmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKSk7CisgICAgfQorICAgIAorICAg
IGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
cio+KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50b1VJ
bnQzMihleGVjKSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAy
KSB7CisgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQzMihleGVj
KTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgJSBWaWV3
Q2xhc3M6OmVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRo
ZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOwor
ICAgICAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAvIFZp
ZXdDbGFzczo6ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgb2Zmc2V0
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0
b3JhZ2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFycmF5QnVmZmVyIGZvciB0aGUg
Zmlyc3QgYXJndW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBldmVyeXRoaW5nIGJ1dCBEYXRh
Vmlldywgd2UgYWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9mOgorICAgIC8vIC0gQW5vdGhl
ciBhcnJheS4gVGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2YgdGhhdCBhcnJheS4KKyAgICAv
LyAtIEFuIGludGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJheSBvZiB0aGF0IGxl
bmd0aCBhbmQgemVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAgICBpZiAoSlNPYmplY3QqIG9i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0
ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3Ro
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4
ZWMsIG9iamVjdCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGg7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50KDApLmlzSW50MzIoKSkKKyAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQo
MCkuYXNJbnQzMigpOworICAgIGVsc2UgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc051bWJlcigp
KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQuIikpOworICAgIGVsc2UgeworICAgICAg
ICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkp
OworICAgICAgICBpZiAobGVuZ3RoICE9IGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQgKGZyYWN0aW9uYWwgbGVuZ3RocyBub3Qg
YWxsb3dlZCkuIikpOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBs
ZW5ndGggaXMgbmVnYXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0Ns
YXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVmlld0NsYXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPFZpZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVy
biBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
Q2FsbFR5cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+Ojpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFz
cz47CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
c19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiRXJy
b3IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dygKKyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNl
KHZtLCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVj
LT52bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUp
KTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVP
dXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAg
ICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4o
ZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+
dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250
ZXh0IGNvbnRleHQoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6
OkRvbnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlv
bihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVy
Vmlldzo6dmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRl
T2Zmc2V0LCBsZW5ndGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAgICAgICBleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiBy
YW5nZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1
Y3Rpb25Db250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5p
c2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4g
aW1wbCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigp
OworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIs
IGltcGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NSZWZQdHI8dHlw
ZW5hbWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9i
YWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2YWxpZGF0
ZVJhbmdlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBv
ZiBnZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRl
cmluZy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90
IGJlCisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVk
IGFycmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0
LCBzaWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVh
cAorICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0
IHNlZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUg
YSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwg
b3RoZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zm
c2V0LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVy
LT5sZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVj
dGVkbHkuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNl
dCArIGksIG90aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
amVjdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgQ2xh
c3NJbmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5
U3RvcmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBl
ciBmYXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBl
LgorICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihs
ZW5ndGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRl
UmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50
eXBlZFZlY3RvcigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgewor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4
ZWMsIGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywg
anNDYXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNl
IFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganND
YXN0PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5
cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTVWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVV
aW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpz
Q2FzdDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAg
IGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhl
YywganNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
Y2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVj
LCBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBj
YXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVj
LCBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
Y2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhl
YywganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAg
IGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBp
ZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCBy
aWdodCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNl
dCArIGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0g
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpz
TnVtYmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+
Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNr
bHkoaW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisg
ICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051
bWJlcih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5
KGluZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAg
Ly8gRmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8g
dGhlIGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3
aWxsIGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJv
cGVydHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwg
ZXhlYywgaW5kZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29s
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAg
ICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlz
IG1hdGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxs
IGF0dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVy
dGllcyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3Vu
ZHMuCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
CisgICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RB
bkluZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1w
dGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpk
ZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAg
ICAgICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRl
eCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4g
TUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAK
KyAgICBpZiAoIXRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LT5nZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1l
ID4gTUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3Vs
ZFRocm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgICAg
ICAgICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KCF0aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAg
ICAvLyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW55dGhp
bmcgaWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseShleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4K
K2Jvb2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAg
ICAgICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAgICAg
ICAgICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNP
YmplY3QtPm1fbGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyKGV4ZWMs
IFN0cmluZzo6bnVtYmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkg
eworICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIo
dGhpc09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0
b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVw
b3J0RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVj
dCwgdmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2Vs
bCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVj
dG9yQ29weVRva2VuCisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09i
amVjdC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3Qt
Pm1fdmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3
U3BhY2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3Is
IG9sZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1fdmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9y
LCB0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJh
Y2tpbmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpz
bG93RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJl
Y2F1c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAor
ICAgIC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ug
b25seSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90
IG5lY2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8v
IHdlIGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRp
b24gdG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0
cmFuc2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdp
bGwgdGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3Jy
ZWN0bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQg
YXJyYXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0
IGNlcnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBv
ZiBmYXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBh
bGwgb2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0
IGNhc2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJl
YWxpemVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJp
Z2dlciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3Ug
KmhhZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5
LgorICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NG
b3JBV2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5o
YXNJbmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0
ZVNpemUoKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFy
cmF5CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVv
ZihJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQg
bWVtb3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJm
bHkgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0
LT5tX3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAg
ICAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0
LT5tX21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5
cGVkQXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlr
ZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNl
IHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSBy
ZWFsbG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIg
PSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09i
amVjdC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
V2FzdGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+
aW5kZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICB0aGlz
T2JqZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fbW9k
ZSA9IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVj
dCwgYnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46
OmdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAg
ICAgICBFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAg
IERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5l
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJF
cnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmll
d0NsYXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlz
VmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlw
ZWQgYXJyYXkgdmlldyIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpKTsKKyAgICAKKyAgICBKU09iamVjdCog
c291cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkp
OworICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2Jq
ZWN0IikpOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9V
SW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJy
YXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChl
eGVjLCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jU3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFz
cyogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFy
cmF5IHZpZXciKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBl
Y3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgIAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MikgeworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlz
T2JqZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRl
ciBhc3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhp
c0xlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdh
dGl2ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAg
ICAgYmVnaW4gPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KHRoaXNMZW5ndGggKyBiZWdpbiks
IDApOworICAgIGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSBzdGQ6Om1heChzdGF0aWNfY2Fz
dDxpbnQ+KHRoaXNMZW5ndGggKyBlbmQpLCAwKTsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5k
aWNlcyB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7
CisgICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBz
dGF0aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5k
IHRvIGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFT
U0VSVChlbmQgPj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gYXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh0aGlzTGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJy
YXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAg
IFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMsIHN0
cnVjdHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSAr
IG9mZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCk7CisgICAg
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xh
c3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
PFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5h
bWVzLT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBE
b250RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5z
dWJhcnJheSwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8Vmlld0NsYXNz
PiwgRG9udEVudW0sIDIpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+QllU
RVNfUEVSX0VMRU1FTlQsIGpzTnVtYmVyKFZpZXdDbGFzczo6ZWxlbWVudFNpemUpLCBEb250RW51
bSB8IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90
eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90
eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90
b3R5cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJl
KAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgogI2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlv
bi5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFj
a09iamVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3
UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1
ZGUgIkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5cy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVnYWN5UHJvZmls
ZXIuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNjZXNzb3ItPnNldFNl
dHRlcihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5n
KCksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXRE
aXJlY3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3Rv
LCBwcm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJv
dG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
dm0oKSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJQ
cm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNy
ZWF0ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUo
ZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlz
LCBKU0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50OEFycmF5UHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3Rv
dHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUo
ZXhlYywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJ
bnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlw
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhl
YywgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMs
IEpTVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4
Q2xhbXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXlQ
cm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuc2V0KGV4
ZWMtPnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlz
LCBKU1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJB
cnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBl
LnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4
ZWMsIHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywg
SlNEYXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0YVZpZXdQcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5n
ZXQoKSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXk6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQzMkFycmF5
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJh
eTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRl
eChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNV
aW50OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlw
ZWRBcnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSkp
OworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0
KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90
eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0uc3Ry
dWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlU3RydWN0
dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCld
LnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZp
ZXcpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXc6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFW
aWV3KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+
dm0oKSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywganNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6
cmVzZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmplY3Q6OmNyZWF0ZShl
eGVjLCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5NYXRoLCBNYXRo
T2JqZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKKyAg
ICAKKyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29uc3RydWN0b3Ig
PSBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJv
dG90eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7CisgICAgRml4ZWRB
cnJheTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiB0eXBl
ZEFycmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChU
eXBlSW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50OEFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJv
dG90eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlz
LCBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlD
b25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5
c1t0b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJyYXkiKTsKKyAg
ICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBKU1VpbnQ4QXJy
YXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSks
IG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50
OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OENs
YW1wZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpT
VWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xhbXBlZEFycmF5Iik7
CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYpXSA9IEpTVWlu
dDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rv
cjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUu
Z2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQo
KSwgIlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5
cGVVaW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWlu
dDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQz
MildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0
cnVjdG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJy
YXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDMyQXJyYXki
KTsKKyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXSA9IEpT
RmxvYXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlw
ZS5nZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9J
bmRleChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMs
IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURh
dGFWaWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAKKyAgICBtX2FycmF5
QnVmZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29uc3RydWN0b3Is
IERvbnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJbmRleCA9IE5V
TUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7CisgICAgICAg
IG1fdHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7Cisg
ICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIo
ZXhlYywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMp
KSwgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7Cisg
ICAgfQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4sIGpzTmFOKCks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTU0MCw2ICs1OTYsMTQgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKKyAgICAKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclByb3RvdHlwZSk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgaS0t
OykgeworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBlZEFycmF5c1tp
XS5wcm90b3R5cGUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBl
ZEFycmF5c1tpXS5zdHJ1Y3R1cmUpOworICAgIH0KIH0KIAogSlNWYWx1ZSBKU0dsb2JhbE9iamVj
dDo6dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJB
cnJheUFsbG9jYXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90
b3R5cGUuaCIKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRh
SW5saW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0
cmluZ09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVy
bmFsRnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1Y3QgVHlwZWRB
cnJheURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3RvdHlwZTsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07CisgICAgCisg
ICAgRml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVT
PiBtX3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQb2ludGVyc1tT
cGVjaWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkgdGhlIExMSW50
IGFuZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSog
cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRj
aGVzQXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0
dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ09iamVj
dFN0cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGFy
cmF5QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclByb3RvdHlw
ZS5nZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgU3RydWN0
dXJlKiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5zdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVjaWFsOjpQb2lu
dGVyIHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50OEFy
cmF5X2gKKyNkZWZpbmUgSlNJbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5o
IgorCisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5X2gKKworI2luY2x1ZGUg
IkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMyQXJyYXlfaAorI2RlZmluZSBKU0ludDMyQXJy
YXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFy
cmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFy
cmF5Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNk
ZWZpbmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZv
IEpTIyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZSMj
Q29uc3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMj
dHlwZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lO
Rk8oSW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVp
bnQ4QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8o
VWludDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxv
YXQzMkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRh
Vmlldyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNv
bnN0cnVjdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1
ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5
PiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0lu
dDMyQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpT
VWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJh
eT4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9y
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFy
cmF5PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5oIgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmlu
ZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMj
I3R5cGUjI1Byb3RvdHlwZTo6c19pbmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGUj
I1Byb3RvdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0
eXBlIyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8o
SW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQz
MkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90
b3R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisjZGVmaW5lIEpTVHlwZWRBcnJheVBy
b3RvdHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50OEFycmF5PiBKU0ludDhB
cnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8
SlNJbnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5UHJvdG90eXBl
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+
IEpTVWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlw
ZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MTZBcnJh
eT4gSlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxv
YXQzMkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU7CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1R5cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNs
dWRlICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7IFwKKyAgICAgICAg
I3R5cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBcCisg
ICAgICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5KSBcCisgICAgfTsgXAor
ICAgIGNvbnN0IENsYXNzSW5mbyogZ2V0IyN0eXBlIyNBcnJheUNsYXNzSW5mbygpIHsgcmV0dXJu
ICZKUyMjdHlwZSMjQXJyYXk6OnNfaW5mbzsgfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0Vf
U19JTkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsK
K01BS0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9T
X0lORk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2
NCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVk
ZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRv
cnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1Vp
bnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFk
YXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50
OEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWlu
dDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhD
bGFtcGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OENsYW1wZWRBcnJh
eV9oCisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xh
bXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50
MTZBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDE2
QXJyYXlfaAorI2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJh
eXMuaCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAor
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25z
X2gKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5Lmgi
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJh
bmdlOwogICAgIHYoYm9vbCwgb2JqZWN0c0FyZUltbW9ydGFsLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgc2hvd09iamVjdFN0YXRpc3RpY3MsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgbG9n
R0MsIGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCkgXAogICAgIHYo
Ym9vbCwgcmVjb3JkR0NQYXVzZVRpbWVzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgbG9nSGVhcFN0
YXRpc3RpY3NBdEV4aXQsIGZhbHNlKSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1Np
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsg
fQorU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxl
cigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9K
UygKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFy
cmF5QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5h
dGl2ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAg
IEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAg
ZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBuYXRpdmUp
OworICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJheUJ1ZmZlcj4ocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZWZhdWx0
IGNvbnRyb2xsZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisv
LyBhcnJheSBidWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29yZS4gVGhp
cyBpc24ndCB3aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1c2VzIHdo
ZW4gcnVubmluZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgorLy8KKy8v
IC0gSWYgdGhlIEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZmZXIgc3Rh
eXMgYWxpdmUuCisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBhIEpTQXJy
YXlCdWZmZXIgYWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgaXQg
ZGlkbid0IGRpZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xhc3MgU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgewor
cHVibGljOgorICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlC
dWZmZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDEzICsyMzAsMTEgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKQorICAgICAgICAg
ICAgfHwgaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5
cGUoKSk7Ci0gICAgfQorICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikg
Y29uc3Q7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2Rl
ZmluZSBTdHJ1Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3Lmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKIApAQCAtMTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXRDb25jCiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1Zh
bHVlSWdub3JlZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFk
ZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVy
dGllcyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlm
ICghaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlC
dWZmZXJWaWV3Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlu
bGluZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVj
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9y
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlBZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlw
ZWRBcnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0
eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlw
ZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRl
ZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3
VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZh
bHVlQXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZh
bHVlKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0
b05hdGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUg
dG9OYXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBl
Pih2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5h
bWUgSlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1
Y3QgRmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7Cisg
ICAgdHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVB
cmcgSlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVl
ID0gdHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0
IEludDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7
CitzdHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1
Y3QgVWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJB
ZGFwdG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFy
cmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdl
bmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRl
ZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5
cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJ
bnQxNkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+
IEpTSW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFw
dG9yPiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4
Q2xhbXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2
NEFycmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9y
PGludDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJ
bnQxNkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJy
YXksIEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDog
SW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJy
YXksIFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRB
cnJheUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+
IHsgfTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1
aW50MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0
cnVjdCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwg
VWludDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9h
dDMyQWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwg
SlNGbG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3Ig
OiBGbG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRB
cnJheSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3Igewor
ICAgIHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkg
Vmlld1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7Cisg
ICAgc3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1w
ZWQ7CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1
cm4gMjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gY2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVl
LmFzTnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRv
dWJsZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHVpbnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8
IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAg
ICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5
cGVkQXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJy
YXlDb250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxl
cjo6VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5
Q29udHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZl
cjsKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxUeXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IFR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+
VHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIq
IHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3Jp
cHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVk
QXJyYXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2Ny
aXB0b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBU
eXBlZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgs
Ci0gICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFy
cmF5VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWlu
dDE2LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAg
VHlwZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0g
ICAgVHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAg
ICAgICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAg
ICB7Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAg
ICAgOiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0
b3JhZ2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAg
IHsKLSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3Qg
bV9zdG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0g
VHlwZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWdu
ZWRUeXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRl
Um91bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5SW5saW5lc19oCisjZGVmaW5lIFR5
cGVkQXJyYXlJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
cy5oIgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlSW5saW5lcy5oIgorCisjZW5kaWYgLy8gVHlwZWRBcnJheUlubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5
cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVkZSAiSlNE
YXRhVmlldy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpTSW50OEFy
cmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBKU1VpbnQ4
QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVy
biBKU1VpbnQ4Q2xhbXBlZEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAg
ICAgIHJldHVybiBKU0ludDE2QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6Cisg
ICAgICAgIHJldHVybiBKU1VpbnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MzI6
CisgICAgICAgIHJldHVybiBKU0ludDMyQXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50
MzI6CisgICAgICAgIHJldHVybiBKU1VpbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5OjppbmZvKCk7CisgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5OjppbmZvKCk7Cisg
ICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3OjppbmZvKCk7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVk
QXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBl
ZEFycmF5OgorICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQo
IlR5cGVJbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5
cGVVaW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWlu
dDhDbGFtcGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
ICAgIG91dC5wcmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
eXBlVWludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91
dC5wcmludCgiVHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURh
dGFWaWV3OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFy
cmF5VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRBcnJheVR5cGUgeworICAgIE5v
dFR5cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5cGVVaW50
OENsYW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlwZUludDMy
LAorICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0NjQsCisg
ICAgVHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBF
UyBUeXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUg
dHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30K
KworaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0
YVZpZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJy
YXk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWlu
dDg6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFWaWV3Ogor
ICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50
MTY6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlw
ZVVpbnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsKKyAgICBj
YXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQo
VHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5
cGVJbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoK
KyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBl
SW50MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBp
c0Zsb2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2Fz
ZSBUeXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFR5cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRv
cj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9y
PiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9y
PiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9y
PiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVk
QWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmll
dzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJh
eVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEw
IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5
IEBACiAjaWZuZGVmIFVpbnQ4QXJyYXlfaAogI2RlZmluZSBVaW50OEFycmF5X2gKIAotI2luY2x1
ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8dWludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBj
cmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25v
d24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJu
IHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmly
c3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5p
dGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVp
bnQ4X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6
c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgaW5saW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1
Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlC
YXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhB
cnJheT4gVWludDhBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBs
ZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWlu
dDhBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWlu
dDhBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQg
Ynl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFz
ZTx1aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWlu
dDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWlu
dDhBcnJheTo6VWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZTx1aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0
cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWlu
dDhBcnJheT4gVWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAot
ewotICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpT
Qzo6VWludDhBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlz
aW9uIDE1NDA2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBl
ZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjUgQEAKICAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
ICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCiAjaWZu
ZGVmIFVpbnQ4Q2xhbXBlZEFycmF5X2gKICNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAogCi0j
aW5jbHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBVaW50OEFy
cmF5IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0
IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90
IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxs
aW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gSXQncyBv
bmx5IG5lZWRlZCB0byBwb3RlbnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBhcnJheQot
ICAgIC8vIHdhcyBjcmVhdGVkIHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5pdGlhbGl6
YXRpb24gcGF0aHMKLSAgICAvLyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgIGlubGlu
ZSB2b2lkIHplcm9GaWxsKCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6
c2V0OwotICAgIGlubGluZSB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsK
LQotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBz
dWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlw
ZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVk
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJp
ZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFt
cGVkQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVp
bnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50
OENsYW1wZWRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+
KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5p
bml0aWFsaXplZDxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBVaW50OENs
YW1wZWRBcnJheTo6emVyb0ZpbGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7Ci19
Ci0KLXZvaWQgVWludDhDbGFtcGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZh
bHVlKQotewotICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVlID0gMDsK
LSAgICBlbHNlIGlmICh2YWx1ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0gICAgZGF0
YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19Ci0KLVVp
bnQ4Q2xhbXBlZEFycmF5OjpVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogVWludDhB
cnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4Q2xh
bXBlZEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVk
ZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsKIAogI2Vu
ZGlmIC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBA
QAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBA
QAogI2lmbmRlZiBVaW50MTZBcnJheV9oCiAjZGVmaW5lIFVpbnQxNkFycmF5X2gKIAotI2luY2x1
ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5
QmFzZTx1aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVp
bnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdU
eXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBN
YWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3Mg
VHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4g
VWludDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5Pihi
dWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+
IFVpbnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVp
bnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXko
c3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJy
YXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Vi
YXJyYXlJbXBsPFVpbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MTZBcnJheTsK
IAogI2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBA
QAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBA
QAogI2lmbmRlZiBVaW50MzJBcnJheV9oCiAjZGVmaW5lIFVpbnQzMkFycmF5X2gKIAotI2luY2x1
ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IEFycmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPFVpbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQg
aXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3Qg
cmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxp
bmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5
QmFzZTx1aW50MzJfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVp
bnQzMl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFy
cmF5KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+
IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdU
eXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBN
YWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3Mg
VHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4g
VWludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1Q
YXNzUmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQzMl90
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5Pihi
dWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+
IFVpbnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVp
bnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMy
QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXko
c3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJy
YXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Vi
YXJyYXlJbXBsPFVpbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MzJBcnJheTsK
IAogI2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAi
UGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4
cE9iamVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0
aW9uLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtODcsNiArODgsNyBAQCBleHRl
cm4gY29uc3QgSGFzaFRhYmxlIGFycmF5Q29uc3RydWN0b3JUCiBleHRlcm4gY29uc3QgSGFzaFRh
YmxlIGFycmF5UHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xlYW5Q
cm90b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSBkYXRhVmlld1RhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBk
YXRlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwog
ZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMTQ1LDYgKzE0
Nyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGFy
cmF5Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNvbnN0cnVj
dG9yVGFibGUpKQogICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4o
SlNDOjphcnJheVByb3RvdHlwZVRhYmxlKSkKICAgICAsIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShm
YXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAgICwgZGF0
YVZpZXdUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRhVmlld1RhYmxlKSkKICAgICAs
IGRhdGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQogICAgICwgZGF0
ZUNvbnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9y
VGFibGUpKQogICAgICwgZXJyb3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlND
OjplcnJvclByb3RvdHlwZVRhYmxlKSkKQEAgLTI1OCw2ICsyNjEsMTAgQEAgVk06OlZNKFZNVHlw
ZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAg
ICAgZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRp
ZgorICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFz
c2VydGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0
aGlzLgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtMjg5LDYgKzI5Niw3IEBA
IFZNOjp+Vk0oKQogICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAg
YXJyYXlDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGJvb2xlYW5Qcm90b3R5
cGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRhVmlld1RhYmxlLT5kZWxldGVUYWJsZSgp
OwogICAgIGRhdGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlQ29uc3RydWN0b3JUYWJs
ZS0+ZGVsZXRlVGFibGUoKTsKICAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgp
OwpAQCAtMzA2LDYgKzMxNCw3IEBAIFZNOjp+Vk0oKQogICAgIGZhc3REZWxldGUoY29uc3RfY2Fz
dDxIYXNoVGFibGUqPihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNv
bnN0X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwogICAgIGZhc3REZWxl
dGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKKyAgICBm
YXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0YVZpZXdUYWJsZSkpOwogICAgIGZh
c3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKICAgICBmYXN0RGVs
ZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBm
YXN0RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgi
CiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldh
dGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9p
bnRlckFsbG9jYXRvci5oPgpAQCAtNjksMTMgKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgQ29kZUNhY2hlOwogICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBGbG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgRmxvYXQ2NEFy
cmF5OwogICAgIGNsYXNzIEhhbmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsK
LSAgICBjbGFzcyBJbnQ4QXJyYXk7Ci0gICAgY2xhc3MgSW50MTZBcnJheTsKLSAgICBjbGFzcyBJ
bnQzMkFycmF5OwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFsT2Jq
ZWN0OwogICAgIGNsYXNzIEpTT2JqZWN0OwpAQCAtOTMsMTAgKzg4LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRp
ZgotICAgIGNsYXNzIFVpbnQ4QXJyYXk7Ci0gICAgY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Ci0g
ICAgY2xhc3MgVWludDE2QXJyYXk7Ci0gICAgY2xhc3MgVWludDMyQXJyYXk7CiAgICAgY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAg
IGNsYXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMjMwLDYgKzIyMSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JU
YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwogICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRh
dGVUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsK
ICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMzkwLDYg
KzM4Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2Vu
YWJsZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJC
eXRlY29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1f
dHlwZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hl
OwogICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApAQCAt
NDI4LDU1ICs0MjEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXZlRW5vdWdo
TmV3U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNo
Q29ucyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQogICAgICAgICB2b2lk
IHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxh
c3RIYXNoQ29ucyA9IDA7IH0KIAotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0
eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlE
ZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAgICAgIEFTU0VS
VCghbV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlwZSMjQXJy
YXlEZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0g
ICAgICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsgXAotICAg
ICAgICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBc
Ci0gICAgICAgIH0gXAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgdHlwZSMj
QXJyYXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRv
ci5tX2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9Ci0KLSAg
ICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0gICAgICAgIHJl
Z2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVy
VHlwZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRB
cnJheUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1
bmN0aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBl
ZEFycmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJy
YXlGdW5jdGlvbih1aW50MzIsIFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1
bmN0aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5j
dGlvbihmbG9hdDY0LCBGbG9hdDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlv
bgotICAgICAgICAKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJy
YXlEZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9uZToK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUlu
dDg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmlu
dDE2QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1w
ZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3Io
KTsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFy
cmF5VWludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlwdG9y
KCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgICAg
IHJldHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBl
ZEFycmF5RmxvYXQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURlc2Ny
aXB0b3IoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAg
ICAgICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSBjb25zdAogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpIHx8IGV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CkBAIC01MTAsMTYg
KzQ1NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9w
ZXJ0eTsKICAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgICAgIFJl
ZkNvdW50ZWRBcnJheTxTdGFja0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwotCi0gICAgICAgIFR5
cGVkQXJyYXlEZXNjcmlwdG9yIG1faW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgbV9pbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IgbV9pbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV91aW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV91aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1fdWludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVz
Y3JpcHRvciBtX3VpbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV9mbG9hdDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX2Zsb2F0NjRBcnJheURlc2NyaXB0b3I7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19W
QUxJREFUSU9OKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA2OCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJl
IHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAor
ICAgICAgICAtIEFkZGVkIHRoZSBub3Rpb24gb2YgYSByZWZlcmVuY2UgY291bnRlZCBvYmplY3Qg
dGhhdCBjYW4gYmUgbWFya2VkIERlZmVycmVkLAorICAgICAgICAgIHdoaWNoIGlzIGxpa2UgYSBz
cGVjaWFsLXB1cnBvc2UgdXByZWYuCisgICAgICAgIAorICAgICAgICAtIEFkZGVkIGEgY29tbW9u
IGJ5dGUgZmxpcHBlci4KKworICAgICAgICBBdXRvbWFrZSB3b3JrIGNvdXJ0ZXN5IG9mIFphbiBE
b2JlcnNlayA8emRvYmVyc2VrQGlnYWxpYS5jb20+LgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRl
ZmVycmFibGVSZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJl
ZkNvdW50ZWRCYXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlOjppc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
OjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZEJhc2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVm
Q291bnRlZDo6c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3Vu
dGVkOjpEZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZD
b3VudGVkOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMu
aDogQWRkZWQuCisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToK
KyAgICAgICAgKFdURjo6ZmxpcEJ5dGVzKToKKyAgICAgICAgKFdURjo6ZmxpcEJ5dGVzSWZMaXR0
bGVFbmRpYW4pOgorCiAyMDEzLTA4LTE0ICBKdWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VhdUBu
ZHMuY29tPgogCiAgICAgICAgIERGR19KSVQgaW1wbGVtZW50YXRpb24gZm9yIHNoNCBhcmNoaXRl
Y3R1cmUuCkluZGV4OiBTb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIu
Y3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAogICAgIFNvdXJjZS9X
VEYvd3RmL0RlY29kZXIuaCBcCisgICAgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCBcCiAgICAgU291cmNlL1dURi93dGYvRGVxdWUuaCBcCiAgICAgU291cmNlL1dURi93dGYv
RGlzYWxsb3dDVHlwZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Eb3VibHlMaW5rZWRMaXN0Lmgg
XApAQCAtNTIsNiArNTMsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYv
RmlsZVByaW50U3RyZWFtLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRmlsZVByaW50U3RyZWFt
LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZpeGVkQXJyYXkuaCBcCisgICAgU291cmNlL1dURi93
dGYvRmxpcEJ5dGVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBcCiAgICAgU291
cmNlL1dURi93dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYv
RnVuY3Rpb25EaXNwYXRjaGVyLmggXApJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9q
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxEYXRlTWF0aC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxEZWNpbWFsTnVtYmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERl
Y29kZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVmZXJyYWJsZVJl
ZkNvdW50ZWQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVxdWUuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGlzYWxsb3dDVHlwZS5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEb3VibHlMaW5rZWRMaXN0LmgiIC8+DQpA
QCAtMTY0LDYgKzE2NSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmVhdHVy
ZURlZmluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmlsZVByaW50
U3RyZWFtLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZpeGVkQXJyYXku
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmxpcEJ5dGVzLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZvcndhcmQuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx3dGZcRnVuY3Rpb25EaXNwYXRjaGVyLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZ1bmN0aW9uYWwuaCIgLz4NCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIy
LDYgKzIyLDggQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1
QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5o
ICovOyB9OworCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50
ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OworCQkw
RjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3
MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5MTE3
MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBD
b21waWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUgLyog
Q29tcGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFk
LmNwcCAqLzsgfTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2
NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJC
OEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02MzAsNiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyogRGVj
aW1hbE51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2lt
YWxOdW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5o
ICovLAorCQkJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJ
CUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJQThB
NDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0OCw2
ICs2NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJl
YW0uY3BwICovLAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJl
YW0uaCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICov
LAorCQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJCQlB
OEE0NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3MTUx
QTgyNUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5ODAw
MTQxREE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3IEBA
CiAJCQkJQThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJheVB0
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVy
cmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVCMDA0
MTIzRkYgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVCMDA0
MTIzRkYgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4
MjVCMDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTcs
NiArMTA2NCw3IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNo
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRl
eHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRp
bmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBEYXRhTG9nLmgK
ICAgICBEZWNpbWFsTnVtYmVyLmgKICAgICBEZWNvZGVyLmgKKyAgICBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oCiAgICAgRGVxdWUuaAogICAgIERpc2FsbG93Q1R5cGUuaAogICAgIERvdWJseUxpbmtl
ZExpc3QuaApAQCAtMjgsNiArMjksNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBGZWF0dXJlRGVm
aW5lcy5oCiAgICAgRmlsZVByaW50U3RyZWFtLmgKICAgICBGaXhlZEFycmF5LmgKKyAgICBGbGlw
Qnl0ZXMuaAogICAgIEZvcndhcmQuaAogICAgIEZ1bmN0aW9uRGlzcGF0Y2hlci5oCiAgICAgRnVu
Y3Rpb25hbC5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVm
ZXJyYWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxv
d3MgcmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlv
dSBpZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisv
LyBqdXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0
ZWN0IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNl
ZnVsIGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUg
YWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJh
c2UgeworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbnQgPSAyOworICAgIAorcHVibGljOgor
ICAgIHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgKz0gbm9ybWFsSW5jcmVt
ZW50OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBy
ZWZDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1h
bEluY3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAg
ICAgOiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IH5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBkZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAtPSBub3JtYWxJbmNyZW1l
bnQ7CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBib29sIHNldElz
RGVmZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAg
ICAgICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVycmVkRmxhZzsK
KyAgICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
dW5zaWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBE
ZWZlcnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2Ugewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAg
ICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpOworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZEJhc2UodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJs
ZVJlZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOwor
CisjZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9GbGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBib29sIG5l
ZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQ
VShCSUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVy
biAhbGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBmbGlwQnl0ZXMo
dWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYpIDw8IDgpCisg
ICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MzJfdCBm
bGlwQnl0ZXModWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAw
MGZmKSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwgOCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhm
ZjAwMDAwMCkgPj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVzKHVpbnQ2NF90
IHZhbHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAwMGZmbGx1KSA8
PCA1NikKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1KSA8PCA0MCkK
KyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAyNCkKKyAgICAg
ICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAgICAgICB8ICgo
dmFsdWUgJiAweDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAm
IDB4MDAwMGZmMDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBm
ZjAwMDAwMDAwMDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDAw
MDAwMDAwMGxsdSkgPj4gNTYpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQg
ZmxpcEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDIpIHsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQxNl90IHdv
cmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1
LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7Cisg
ICAgfQorICAgIGlmIChzaXplb2YodmFsdWUpID09IDQpIHsKKyAgICAgICAgdW5pb24geworICAg
ICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7CisgICAgICAg
IH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlw
Qnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIGlm
IChzaXplb2YodmFsdWUpID09IDgpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBv
cmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQ2NF90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAg
ICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3Jk
KTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSBUIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKFQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuKQoreworICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVF
bmRpYW4pKQorICAgICAgICByZXR1cm4gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICByZXR1cm4gdmFs
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBCeXRl
c0lmTGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7Cit1c2luZyBXVEY6OmZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTc5IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0
ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFR5cGVkIGFy
cmF5cyBhcmUgbm93IGltcGxlbWVudGVkIGluIEphdmFTY3JpcHRDb3JlLCBhbmQgV2ViQ29yZSBp
cyBtZXJlbHkgYQorICAgICAgICBjbGllbnQgb2YgdGhlbS4gVGhlcmUgaXMgb25seSBvbmUgbGF5
ZXJpbmcgdmlvbGF0aW9uOiBXZWJDb3JlIGluc3RhbGxzIGEKKyAgICAgICAgV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyIG9uIFZNLCB3aGljaCBtYWtlcyB0aGUKKyAgICAgICAgQXJyYXlCdWZm
ZXI8LT5KU0FycmF5QnVmZmVyIHJlbGF0aW9uc2hpcCByZXNlbWJsZSBET00gd3JhcHBlcnMuIEJ5
IGRlZmF1bHQsCisgICAgICAgIEpTQyBtYWtlcyB0aGUgb3duZXJzaGlwIGdvIG9uZSB3YXk7IHRo
ZSBKU0FycmF5QnVmZmVyIGtlZXBzIHRoZSBBcnJheUJ1ZmZlcgorICAgICAgICBhbGl2ZSBidXQg
aWYgQXJyYXlCdWZmZXIgaXMga2VwdCBhbGl2ZSBmcm9tIG5hdGl2ZSBjb2RlIHRoZW4gdGhlCisg
ICAgICAgIEpTQXJyYXlCeWZmZXIgbWF5IGRpZS4gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
IHdpbGwga2VlcCB0aGUKKyAgICAgICAgSlNBcnJheUJ1ZmZlciBhbGl2ZSBpZiB0aGUgQXJyYXlC
dWZmZXIgaXMgaW4gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRvIG1h
a2Ugbm9uLUpTRE9NV3JhcHBlcnMgYmVoYXZlIGxpa2UgRE9NIHdyYXBwZXJzLCBhIGJ1bmNoIG9m
IGNvZGUgaXMKKyAgICAgICAgY2hhbmdlZCB0byBtYWtlIG1vc3QgcmVmZXJlbmNlcyB0byB3cmFw
cGVycyByZWZlciB0byBKU09iamVjdCogcmF0aGVyIHRoYW4KKyAgICAgICAgSlNET01XcmFwcGVy
Ki4KKyAgICAgICAgCisgICAgICAgIEFycmF5IGJ1ZmZlciB2aWV3cyBhcmUgbm93IHRyYW5zaWVu
dDsgdGhlIEpTIGFycmF5IGJ1ZmZlciB2aWV3IHdyYXBwZXJzCisgICAgICAgIGRvbid0IG93biB0
aGVtIG9yIGtlZXAgdGhlbSBhbGl2ZS4gVGhpcyByZXF1aXJlZCBhIGJ1bmNoIG9mIGNoYW5nZXMg
dG8gbWFrZQorICAgICAgICBiaW5kaW5ncyBjb2RlIHVzZSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PiB0byBob2xkIG9udG8gdGhlaXIgdmlld3MuCisgICAgICAgIAorICAgICAgICBBbHNvIHRoZXJl
IGlzIGEgYnVuY2ggb2YgbmV3IGNvZGUgdG8gbWFrZSBKU0MtcHJvdmlkZWQgYXJyYXkgYnVmZmVy
cyBhbmQKKyAgICAgICAgdmlld3Mgb2JleSB0aGUgdG9KUy90bzxDbGFzc05hbWU+IGlkaW9tIGZv
ciB3cmFwcGluZyBhbmQgdW53cmFwcGluZy4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRo
ZSBEYXRhVmlldyBBUEkgaXMgbm93IGNvbXBsZXRlbHkgZGlmZmVyZW50OiB0aGUgSlNEYXRhVmll
dworICAgICAgICBwcm92aWRlcyB0aGUgc2FtZSB1c2VyLXZpc2libGUgSlMgQVBJIGJ1dCB1c2lu
ZyBpdHMgb3duIGludGVybmFsIG1hZ2ljOyB0aGUKKyAgICAgICAgQysrIGNvZGUgdGhhdCB1c2Vz
IERhdGFWaWV3IG5vdyB1c2VzIGEgcmF0aGVyIGRpZmZlcmVudCBBUEkgdGhhdCBpcyBub3QKKyAg
ICAgICAgYXdhcmUgb2YgdXN1YWwgRE9NIHNlbWFudGljcywgc2luY2UgaXQncyBpbiBKU0MgYW5k
IG5vdCBXZWJDb3JlLiBJdCdzCisgICAgICAgIGVxdWFsbHkgdXNlZnVsIGZvciBhbGwgb2YgV2Vi
Q29yZSdzIHB1cnBvc2VzLCBidXQgc29tZSBjb2RlIGhhZCB0byBjaGFuZ2UKKyAgICAgICAgdG8g
YWRhcHQgdGhlIG5ldyBjb252ZW50aW9ucy4KKyAgICAgICAgCisgICAgICAgIFNvbWUgdGVzdHMg
aGF2ZSBiZWVuIGNoYW5nZWQgb3IgcmViYXNlZCBkdWUgdG8gY2hhbmdlcyBpbiBiZWhhdmlvciwg
dGhhdAorICAgICAgICBicmluZyB1cyBpbnRvIGNvbmZvcm1hbmNlIHdpdGggd2hlcmUgdGhlIHN0
YW5kYXJkcyBhcmUgZ29pbmcgYW5kIGFsbG93IHVzIHRvCisgICAgICAgIG1hdGNoIEZpcmVmb3gg
YmVoYXZpb3IuCisKKyAgICAgICAgQXV0b21ha2Ugd29yayBhbmQgc29tZSBhZGRpdGlvbmFsIEdU
SyBjaGFuZ2VzIGNvdXJ0ZXN5IG9mCisgICAgICAgIFphbiBEb2JlcnNlayA8emRvYmVyc2VrQGln
YWxpYS5jb20+LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZl
ZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFW
aWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvSlNEYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL0pTVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3
YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFkZGVkLgorICAgICAg
ICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1Jl
YWx0aW1lQW5hbHlzZXIuaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVzZUpT
Qy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlND
cnlwdG86OmdldFJhbmRvbVZhbHVlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlV3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9BcnJheUJ1
ZmZlclZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ4QXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9JbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1VpbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50
OENsYW1wZWRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQxNkFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVWludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDMy
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9EYXRhVmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3Rv
bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6
OmxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5z
ZmVyQXJyYXlCdWZmZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnRE
YXRhLmg6CisgICAgICAgIChXZWJDb3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6Omlz
UmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp3cmFwcGVyT3duZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAg
KEZvckFsbFBhcmVudHMpOgorICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOgorICAgICAgICAoU2tp
cEluY2x1ZGVIZWFkZXIpOgorICAgICAgICAoSXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChJ
c1dyYXBwZXJUeXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbToKKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChHZW5lcmF0ZUhl
YWRlcik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAo
SlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChH
ZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVj
dG9ySGVscGVyTWV0aG9kcyk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBm
aWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmll
dy5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0Zsb2F0MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxv
YXQ2NEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52
YXMvVWludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhD
bGFtcGVkQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBwYWdlL0NyeXB0by5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRy
YWN0S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKiB0ZXN0aW5n
L01vY2tDRE0uY3BwOgorCiAyMDEzLTA4LTE0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVXBkYXRlIGJpbmRpbmcgdGVzdCByZXN1bHRzLiAgRm9sbG93IHVwIGZpeCBm
b3IgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTY2ND4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNDk5LDMxICs0OTksMTkgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAg
ICAgaHRtbC9WYWxpZGl0eVN0YXRlLmlkbAogICAgIGh0bWwvVm9pZENhbGxiYWNrLmlkbAogCi0g
ICAgaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCi0gICAgaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXJWaWV3LmlkbAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbAogICAgIGh0bWwv
Y2FudmFzL0NhbnZhc1BhdHRlcm4uaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRs
CiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAogICAgIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsCi0gICAgaHRtbC9jYW52YXMvRGF0YVZp
ZXcuaWRsCiAgICAgaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwKICAgICBodG1sL2NhbnZhcy9FWFRE
cmF3QnVmZmVycy5pZGwKICAgICBodG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMuaWRsCi0gICAgaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFz
L0Zsb2F0NjRBcnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAotICAgIGh0
bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAog
ICAgIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsCiAgICAgaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUZsb2F0LmlkbAogICAgIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxv
YXQuaWRsCiAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsCiAgICAgaHRt
bC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MTZB
cnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwKLSAgICBodG1sL2NhbnZh
cy9VaW50OEFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAog
ICAgIGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmlk
bApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODIsMzEgKzM4MiwxOSBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL1Rp
bWVSYW5nZXMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAog
ICAgICQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlclZpZXcuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dy
YWRpZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0gICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvRE9NUGF0aC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJh
d0J1ZmZlcnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFy
cmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwK
LSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL0ludDhBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVu
dEluZGV4VWludC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZs
b2F0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5p
ZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9V
aW50OENsYW1wZWRBcnJheS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xB
Y3RpdmVJbmZvLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxMCArMzAsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNBYnN0cmFjdFdvcmtlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNBYnN0cmFjdFdvcmtlci5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlC
dWZmZXIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZmZXIuaCBcCi0J
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyVmlldy5jcHAgXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0F0dHIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXR0ci5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXVkaW9CdWZmZXIuY3BwIFwKQEAgLTE1Niw4ICsxNTIs
NiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNEYXRhVHJhbnNmZXJJdGVtLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJh
bnNmZXJJdGVtTGlzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRhVHJhbnNm
ZXJJdGVtTGlzdC5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuY3BwIFwK
LQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBcCiAJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNEZWxheU5vZGUuY3BwIFwKQEAgLTI4OCwxMCArMjgyLDYgQEAgd2ViY29y
ZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmlsZVdyaXRl
ckNhbGxiYWNrLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5j
cHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5oIFwKLQlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTRmxvYXQzMkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0Zsb2F0MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmxv
YXQ2NEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zsb2F0NjRBcnJheS5o
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9jdXNFdmVudC5jcHAgXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNGb2N1c0V2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNGb250TG9hZGVyLmNwcCBcCkBAIC00ODksMTIgKzQ3OSw2IEBAIHdlYmNvcmVfYnVpbHRfc291
cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luamVjdGVkU2NyaXB0SG9zdC5o
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luc3BlY3RvckZyb250ZW5kSG9zdC5oIFwKLQlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW50MTZBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbnQz
MkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDMyQXJyYXkuaCBcCi0J
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDhBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnQ4QXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Njcmlw
dFByb2Nlc3Nvck5vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU2NyaXB0UHJv
Y2Vzc29yTm9kZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSmF2YVNjcmlwdENhbGxG
cmFtZS5jcHAgXApAQCAtNzU5LDE0ICs3NDMsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0g
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNUcmVlV2Fsa2VyLmggXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNVSUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VJ
RXZlbnQuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmNwcCBcCi0J
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVaW50MzJBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNV
aW50MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDhBcnJheS5jcHAg
XAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50OEFycmF5LmggXAotCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
VmFsaWRpdHlTdGF0ZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWYWxpZGl0eVN0
YXRlLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWb2lkQ2FsbGJhY2suY3BwIFwKQEAg
LTE1NDMsMzEgKzE1MTksMTkgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJDb3JlKS9o
dG1sL1RpbWVSYW5nZXMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0FycmF5QnVmZmVyLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1
ZmZlclZpZXcuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50Lmlk
bCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAJJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9E
YXRhVmlldy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwgXAogCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXAotCSQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9G
bG9hdDY0QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRs
IFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUZsb2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5p
ZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwgXAot
CSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50
OEFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5p
ZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCiAJJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApAQCAtMjMzNCw5ICsyMjk4LDcg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0Nv
bnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaCBcCi0JU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0b20uY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBc
CkBAIC0yMzg4LDcgKzIzNTAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XcmFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdD
dXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
ZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXApAQCAtMjU0MSw2ICsyNTAyLDgg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKQEAgLTMzMTksOCArMzI4Miw2IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmggXAotCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRGF0YVZpZXcuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRE9NUGF0
aC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmggXApJbmRleDogU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2IEBAIFNPVVJDRVMgKz0gXAogICAgICBiaW5kaW5n
cy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIFwKICAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5j
cHAgXAogICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKLSAgICAgYmluZGluZ3Mv
anMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9KU0F1ZGlvQnVm
ZmVyQ3VzdG9tLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAgXAogICAg
ICBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIFwKQEAgLTExNCw3ICsxMTMsNiBAQCBTT1VS
Q0VTICs9IFwKICAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIFwKICAgICAg
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9KU0RP
TVdyYXBwZXIuY3BwIFwKLSAgICAgYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHAgXAog
ICAgICBiaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcCBcCiAgICAgIGJp
bmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXAogICAgICBiaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBcCkBAIC0yMDAsNiArMTk4LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBcCiAgICAgIGJpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAgXAorICAgICBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwIFwKICAgICAgYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIFwKICAgICAgYnJpZGdlL05QX2pz
b2JqZWN0LmNwcCBcCiAgICAgIGJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcCBcCkBAIC03MTks
NyArNzE4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBcCi0gICAgaHRtbC9jYW52YXMv
RGF0YVZpZXcuY3BwIFwKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmNwcCBcCiAgICAg
aHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxJbnB1dFN0cmVhbS5jcHAgXAogICAgIGh0bWwvcGFy
c2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcCBcCkBAIC0xMzQ0LDcgKzEzNDIsNiBAQCBIRUFE
RVJTICs9IFwKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCBcCiAgICAgYmluZGluZ3Mv
anMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggXAogICAgIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5oIFwKLSAgICBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIFwKICAg
ICBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCBcCiAgICAgYmluZGlu
Z3MvanMvSlNDYWxsYmFja0RhdGEuaCBcCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXIuaCBcCkBAIC0xNzgxLDcgKzE3NzgsNiBAQCBIRUFERVJTICs9IFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oIFwK
LSAgICBodG1sL2NhbnZhcy9EYXRhVmlldy5oIFwKICAgICBodG1sL2NhbnZhcy9ET01QYXRoLmgg
XAogICAgIGh0bWwvQ2xhc3NMaXN0LmggXAogICAgIGh0bWwvRE9NRm9ybURhdGEuaCBcCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvVXNlSlNDLmNtYWtlCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Vc2VK
U0MuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCiAgICAg
YmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIu
Y3BwCi0gICAgYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMv
SlNDREFUQVNlY3Rpb25DdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0NTU0ZvbnRGYWNlUnVsZUN1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0NTU0ltcG9ydFJ1bGVDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlND
U1NNZWRpYVJ1bGVDdXN0b20uY3BwCkBAIC0xNTAsNiArMTQ4LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCiAgICAgYmluZGlu
Z3MvanMvU2NyaXB0VmFsdWUuY3BwCiAgICAgYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAorICAgIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAK
IAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAogICAgIGJyaWRnZS9OUF9qc29iamVjdC5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw2IEBA
IF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNVJhbmdlRVAKIF9fWk43V2ViQ29yZTEy
ZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU180S1VSTEVSS04z
V1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyZ2NDb250cm9sbGVyRXYKIF9fWk43V2ViQ29yZTEy
aWNvbkRhdGFiYXNlRXYKLV9fWk43V2ViQ29yZTEydG9VaW50OEFycmF5RU4zSlNDN0pTVmFsdWVF
CiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmplY3RFdgogX19aTjdXZWJDb3Jl
MTNBWE9iamVjdENhY2hlMThyb290T2JqZWN0Rm9yRnJhbWVFUE5TXzVGcmFtZUUKIF9fWk43V2Vi
Q29yZTEzQVhPYmplY3RDYWNoZTIxZ0FjY2Vzc2liaWxpdHlFbmFibGVkRQpAQCAtMjg4LDcgKzI4
Nyw2IEBAIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1MKIF9fWk43V2Vi
Q29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEzbGlzdERp
cmVjdG9yeUVSS04zV1RGNlN0cmluZ0VTM18KIF9fWk43V2ViQ29yZTEzcG9pbnRlckN1cnNvckV2
Ci1fX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZmZXJFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29y
ZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pON1dlYkNv
cmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVz
b3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAgLTkwNyw3
ICs5MDUsNiBAQCBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9fWk43V2ViQ29yZTRQYXRoRDFFdgog
X19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2ViQ29yZTRj
b3JlRVAyOE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLV9fWk43V2ViQ29yZTR0b0pTRVBO
M0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TMF8xMUFycmF5QnVmZmVy
RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9i
amVjdEVQTlNfMTBDbGllbnRSZWN0RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0
ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTNET01TdHJpbmdMaXN0RQogX19aTjdXZWJD
b3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTRD
bGllbnRSZWN0TGlzdEUKQEAgLTI3NDMsNyArMjc0MCw2IEBAIF9fWk43V2ViQ29yZTE2SFRNTE1l
ZGlhRWxlbWVudDE2cmV0dXJuVG8KIF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxMmlz
RnVsbHNjcmVlbkV2CiBfX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMzYWRkRWRkCiBfX1pON1dlYkNv
cmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVlRQotX19aTjdXZWJDb3JlMTR0b0Zsb2F0MzJB
cnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBUaW1lUmFuZ2VzRQogX19aTks3V2ViQ29yZTEw
VGltZVJhbmdlczduZWFyZXN0RWQKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0RhdGFWaWV3X2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfRGF0YVZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0Fy
cmF5QnVmZmVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlcl9oCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlci5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdfaAorI2RlZmlu
ZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTRGF0YVZp
ZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0pT
RGF0YVZpZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9KU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNUeXBlZEFy
cmF5c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNUeXBlZEFycmF5cy5oPgorI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJy
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVHlw
ZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5Q29udHJv
bGxlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4K
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVk
QXJyYXlJbmxpbmVzc19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlJbmxpbmVzc19o
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9G
V0RfVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVhbHRpbWVB
bmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
UmVhbHRpbWVBbmFseXNlci5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTUgKzI2LDEyIEBACiAjZGVmaW5lIFJlYWx0aW1lQW5hbHlzZXJfaAogCiAjaW5jbHVkZSAiQXVk
aW9BcnJheS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLW5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgRmxvYXQzMkFycmF5OwotY2xhc3MgVWludDhBcnJheTsKLX0KLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRpb0J1czsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTU0MDY0KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTc0MjgsNiArMTc0MjgsMjAgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdz
XGpzXFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjQyLDYgKzI0Miw4IEBACiAJCTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uLmNwcCAqLzsgfTsKIAkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlm
b3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgg
Ki87IH07CiAJCTBGMDkwODdGMTQ0NEZEQjIwMDAyODkxNyAvKiBTY3JvbGxiYXJUaGVtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MTQxNTE0
MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWUuY3BwICovOyB9OworCQkwRjA5OUQwODE3
Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDk5RDA2MTdCOTY4QTEw
MEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9OworCQkwRjA5
OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNzE3Qjk2
OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMUE1NEYwRjM5MjMzMTAw
QzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJT
ZWxlY3Rpb25JbmZvLmggKi87IH07CiAJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0
Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi87
IH07CiAJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNG
MTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLzsgfTsKQEAgLTgy
OCwxMSArODMwLDYgQEAKIAkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJM
b2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmgg
Ki87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0MzkxMTky
MDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTJFOTRGNDNDMTE5MjA3
REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFk
ZXIuaCAqLzsgfTsKLQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0U3MTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi87IH07Ci0JCTJFOTdDQ0VCMTI5MzlDQjgw
MEM1QzhGRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi87IH07
Ci0JCTJFOTdDQ0Y3MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0Y2MTI5M0E0
M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLzsgfTsKLQkJMkU5N0NFNkYxMjkz
QUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZp
ZXcuY3BwICovOyB9OwotCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkUx
MjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2
NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8q
IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUI0QkNEMjEyMUYwM0UzMDBF
QzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVz
b3VyY2VIYW5kbGUuY3BwICovOyB9OwogCQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUgLyogQmxv
YlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmgg
Ki87IH07CkBAIC0xMjg4LDggKzEyODUsNiBAQAogCQk0OUIzNzYwRDE1QzZDNjg0MDA1OTEzMUQg
LyogQXJyYXlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLzsgfTsKIAkJ
NDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODAxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAq
LzsgfTsKLQkJNDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgyMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi87IH07Ci0JCTQ5QzdCOTk2MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5Lmgg
Ki87IH07CiAJCTQ5QzdCOTk3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi87IH07CiAJCTQ5
QzdCOTk4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg1MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCAqLzsgfTsKIAkJNDlDN0I5OUIxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJv
Z3JhbS5jcHAgKi87IH07CkBAIC0xMzUwLDIyICsxMzQ1LDYgQEAKIAkJNDlFQ0VCNkUxNDk5Nzkw
RDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9w
ZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY1MTQ5OTc5
MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJNDlFQ0VCNzAxNDk5
NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0
ZXJPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjIxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OwotCQk0OUVFQ0YwMTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlC
dWZmZXIuaCAqLzsgfTsKLQkJNDlFRUNGMDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFy
cmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgKi87IH07Ci0JCTQ5
RUVDRjAzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTRmxvYXQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA0MTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi87
IH07Ci0JCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY3MTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNw
cCAqLzsgfTsKLQkJNDlFRUNGMDcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjkxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwODEwNTA3MEM0
MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJy
YXkuY3BwICovOyB9OwotCQk0OUVFQ0YwOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VG
QjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlFRUNGMEExMDUwNzBDNDAwMDk5RkFCIC8q
IEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICov
OyB9OwotCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkQxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMEMxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJy
YXkuY3BwICovOyB9OwotCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNF
RkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMUIx
MDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZBQiAv
KiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi87IH07Ci0JCTQ5RUVDRjFDMTA1MDcyRjMwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDlFRUQxNDIxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDEzQzEw
NTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKIAkJ
NDlFRUQxNDMxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0QxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwogCQk0OUVF
RDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0UxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLzsgfTsKQEAg
LTE4MjcsOCArMTgwNiw2IEBACiAJCTZFNjdEMkE2MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNp
b25zM0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkU2N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAg
Ki87IH07CiAJCTZFNjdEMkE3MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFNjdEMkE1
MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLzsgfTsKIAkJNkU2N0Qy
QTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRC5oICovOyB9OwotCQk2RUJDNUVBRjEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9h
dDY0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVCQzVFQUQxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLzsgfTsK
LQkJNkVCQzVFQjAxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJDNUVBRTEzOEI1MEYyMDBB
MENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgfTsKIAkJNkVCRjBFNDgxMkE4OTI2MTAwREIx
NzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU0NTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZs
b2F0LmNwcCAqLzsgfTsKIAkJNkVCRjBFNDkxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVG
bG9hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVC
RjBFNDYxMkE4OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5oICovOyB9OwogCQk2RUJG
MEU1NDEyQTg5Mjk4MDBEQjE3MDkgLyogV2ViR0xFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNTIxMkE4OTI5ODAwREIxNzA5
IC8qIFdlYkdMRXh0ZW5zaW9uLmNwcCAqLzsgfTsKQEAgLTI1ODksNyArMjU2Niw2IEBACiAJCTg1
RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0
RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi87IH07CiAJCTg2MUMyRUE0MTNGQjRGREQwMDA2
MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODYxQzJFQTMxM0ZCNEZERDAwMDYyQUJCIC8qIERvY3VtZW50
TG9hZFRpbWluZy5jcHAgKi87IH07CiAJCTg2MUMyRUE2MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNv
dXJjZUxvYWRUaW1pbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODYxQzJFQTUxM0ZCNEZGRjAwMDYyQUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5j
cHAgKi87IH07Ci0JCTg2MjQzRDAxMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmll
d0hlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi87
IH07CiAJCTg2NTEyRURFMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGlt
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmNwcCAq
LzsgfTsKIAkJODY1MTJFREYxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
NTEyRURDMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggKi87
IH07CiAJCTg2QkE3NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2QkE3NjZEMTY2
NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCAqLzsgfTsKQEAgLTI3MDMsOCAr
MjY3OSw2IEBACiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2
YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9
OwogCQk5MDAxNzg4MDEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3
ODdFMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovOyB9
OwogCQk5MDAxNzg4MTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzg3
RjEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07Ci0J
CTkxMDg5RDMyMTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MTA4OUQzMDE0QzMzNUNE
MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovOyB9OwotCQk5MTA4OUQzMzE0QzMz
NjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyog
SlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi87IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4
MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07
CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4
MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMy
ODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC00NjU1LDcgKzQ2MjksNiBAQAogCQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYg
LyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NEIyRTE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmggKi87IH07CiAJCUJDMjc0QjMxMTQwRUJFRDgwMEVBREZBNiAvKiBD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5jcHAgKi87IH07CiAJCUJDMjc1Qjc5MTFDNUQxQzMwMEM5MjA2QyAvKiBK
U1dlYktpdFBvaW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3Vz
dG9tLmNwcCAqLzsgfTsKLQkJQkMyNzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZm
ZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICov
OyB9OwogCQlCQzI5OTM1RDE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyOTkzNUMxN0Ex
REQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJQkMyQ0JGNEUxNDBG
MUFCRDAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBK
U1dlYkdMQ29udGV4dEV2ZW50LmggKi87IH07CiAJCUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAv
KiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmNwcCAqLzsgfTsKQEAgLTY0ODAsNiArNjQ1Myw4IEBACiAJCTBDM0YxRjU5MTBDODg3
MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEM0NTM0MjUxMENE
QkJGQTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYw
OTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjA5OUQwNzE3Qjk2
OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVu
ZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMxNjNE
MTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBwYXRoID0gY2EvUGxhdGZvcm1D
QUZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2M0YxNkVEMENE
RTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHBhdGggPSBjYS9t
YWMvUGxhdGZvcm1DQUZpbHRlcnNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03MTM0LDEyICs3MTA5LDYgQEAKIAkJMkU3NTg0MUMxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmls
ZVJlYWRlckxvYWRlckNsaWVudC5oOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRGNDM5MTE5MjA3REEwMEI3
Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNGaWxlUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5
NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkU5N0NDRTcxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERhdGFWaWV3LmNwcDsgcGF0aCA9IGNhbnZhcy9E
YXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U4MTI5MzlD
QjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBEYXRhVmlldy5oOyBwYXRoID0gY2FudmFzL0RhdGFWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOTdDQ0U5MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gRGF0YVZpZXcuaWRsOyBwYXRoID0gY2FudmFzL0RhdGFWaWV3
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRjYxMjkzQTQzQTAwQzVD
OEZGIC8qIEpTRGF0YVZpZXdDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNEYXRhVmlld0N1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RhdGFWaWV3Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJT
Y3JpcHRMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV29y
a2VyU2NyaXB0TG9hZGVyQ2xpZW50Lmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMDEyMUYwM0Uz
MDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJsb2JSZXNvdXJjZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJFQjRCQ0QxMTIxRjAzRTMwMEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5k
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYlJlc291cmNlSGFuZGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjU0LDggKzc2MjMsNiBAQAogCQk0
OUIzNzYwQjE1QzZDNjg0MDA1OTEzMUQgLyogQXJyYXlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcnJheVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU0ludDhBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0ludDhBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0ludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTEZyYW1lYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTg4
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC03NjY5LDcgKzc2MzYsNiBAQAogCQk0OUM3QjlBODEwNDJEMzJFMDAwOUQ0
NDcgLyogV2ViR0xCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0xCdWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QTkxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdM
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMQnVmZmVyLmg7
IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlDN0I5QUExMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXZWJHTEJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0
NDcgLyogSW50OEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBJbnQ4QXJyYXkuaWRs
OyBwYXRoID0gY2FudmFzL0ludDhBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuY3BwOyBw
YXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmg7IHBhdGgg
PSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlCMDEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xGcmFtZWJ1ZmZlci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzI1LDMw
ICs3NjkxLDYgQEAKIAkJNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb24uaDsg
cGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5RUNFQjY1MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbnMuY3Bw
OyBwYXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlFQ0VCNjYxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9ucy5oOyBw
YXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IEFycmF5QnVmZmVyVmlldy5pZGw7IHBhdGggPSBjYW52YXMv
QXJyYXlCdWZmZXJWaWV3LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNE
Q0MxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBBcnJheUJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvQXJyYXlCdWZmZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDRjEwNTAzQzIzMDAwOTlGQUIgLyogRmxv
YXQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBGbG9hdDMyQXJyYXkuaWRsOyBw
YXRoID0gY2FudmFzL0Zsb2F0MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQzMkFycmF5LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBJbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQzMkFycmF5Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFC
IC8qIEludDE2QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDE2QXJyYXkuaWRs
OyBwYXRoID0gY2FudmFzL0ludDE2QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0REODEwNTAzQzIzMDAwOTlGQUIgLyogVWludDhBcnJheS5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gVWludDhBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDhBcnJheS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZB
QiAvKiBVaW50MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDMyQXJyYXku
aWRsOyBwYXRoID0gY2FudmFzL1VpbnQzMkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlFRUNEREUxMDUwM0MyNDAwMDk5RkFCIC8qIFVpbnQxNkFycmF5LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50MTZBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvVWludDE2
QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGMjEwNTA3MEM0
MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDMyQXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNTEwNTA3MEM0MDAwOTlG
QUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNGbG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjYx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0ludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50MzJBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50MTZBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJ
bnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZBMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNVaW50OEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNVaW50MzJBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWlu
dDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkUxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNVaW50MTZBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUZGMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJW
aWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZm
ZXJWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGMUExMDUwNzJG
MzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RUVEMTNDMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0QxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTgyMzgsOSArODE4MCw2IEBACiAJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAv
KiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXh0ZW5zaW9uczNET3BlbkdMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVu
c2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhB
IC8qIEZsb2F0NjRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5
LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEg
LyogSlNGbG9hdDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNG
bG9hdDY0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDUxMkE4
OTI2MTAwREIxNzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuY3BwOyBwYXRoID0gY2FudmFzL09FU1Rl
eHR1cmVGbG9hdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ2MTJB
ODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gT0VTVGV4dHVyZUZsb2F0Lmg7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZs
b2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ3MTJBODkyNjEwMERC
MTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1Rl
eHR1cmVGbG9hdC5pZGw7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5NzgsNyArODkxNyw2IEBACiAJCTg1RkYzMTU5MEFB
RkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRM
b2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxQzJFQTUxM0ZC
NEZGRjAwMDYyQUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk4NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZl
clZpZXdIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1
ZmZlclZpZXdIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREIx
NTRBMkFFRTAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURDMTU0QTJBRUYwMEE5MDQy
NiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY1MTJFREQxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3Vy
Y2VUaW1pbmcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VU
aW1pbmcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTExMyw5ICs5MDUxLDYg
QEAKIAkJOTAwMTc3M0YxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBw
YXRoID0gY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkw
MDE3ODdGMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAv
KiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTVWludDhDbGFtcGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkxQTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBV
aW50OENsYW1wZWRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDhDbGFtcGVkQXJyYXkuaWRsOyBwYXRoID0g
Y2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTExMzQyLDcgKzExMjc3LDYgQEAKIAkJQkMyNzRCMkUxNDBFQkVCMjAwRUFE
RkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI3
NUI3ODExQzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpT
QXJyYXlCdWZmZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvcklucHV0VHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdM
Q29udGV4dEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xD
b250ZXh0RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyQ0JGN0ExNDBG
MUQ1ODAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbnRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNDAyNSw4ICsxMzk1OSw2IEBACiAJCTQ5NDg0RkFFMTAyQ0Yw
MUUwMDE4N0REMyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwg
Ki8sCi0JCQkJNDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwg
Ki8sCiAJCQkJNkU0RTkxQTcxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1
dGVzLmNwcCAqLywKIAkJCQk2RTRFOTFBODEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4
dEF0dHJpYnV0ZXMuaCAqLywKIAkJCQk0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFz
R3JhZGllbnQuY3BwICovLApAQCAtMTQwNDcsOSArMTM5NzksNiBAQAogCQkJCTQ5NDg0RkJFMTAy
Q0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsICovLAogCQkJCTQ5
NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCiAJCQkJNDk0ODRG
QzAxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmggKi8sCi0JCQkJMkU5N0NDRTcxMjkz
OUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0NFODEyOTM5Q0I4MDBD
NUM4RkYgLyogRGF0YVZpZXcuaCAqLywKLQkJCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyog
RGF0YVZpZXcuaWRsICovLAogCQkJCUZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRo
LmggKi8sCiAJCQkJRkI5MTM5MjExNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaWRsICovLAog
CQkJCUEwMjQ1NzRFMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5jcHAgKi8sCkBA
IC0xNDA1OCwxMSArMTM5ODcsNiBAQAogCQkJCTc3Mjg2OTRCMTRGODg4MjUwMEY0ODREQyAvKiBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwICovLAogCQkJCTc3Mjg2OTRDMTRGODg4MjUw
MEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAqLywKIAkJCQk3NzI4Njk0
RDE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbCAqLywK
LQkJCQk0OUVFQ0RDRjEwNTAzQzIzMDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmlkbCAqLywKLQkJ
CQk2RUJDNUQ4MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLywKLQkJCQk0
OUVFQ0RENTEwNTAzQzIzMDAwOTlGQUIgLyogSW50MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNE
RDIxMDUwM0MyMzAwMDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUFEMTA0
MkQzMkUwMDA5RDQ0NyAvKiBJbnQ4QXJyYXkuaWRsICovLAogCQkJCTdFNUQ3QTczMTYxRDNGOEYw
MDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLywKIAkJCQk3RTVEN0E3NDE2MUQz
RjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWludC5oICovLAogCQkJCTkwMDE3NzNEMTJF
MDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLywKQEAgLTE0MDc3
LDEwICsxNDAwMSw2IEBACiAJCQkJNzdBMTdBNkUxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRl
eEFycmF5T2JqZWN0LmNwcCAqLywKIAkJCQk3N0ExN0E2RjEyRjI4MTgyMDA0RTAyRjYgLyogT0VT
VmVydGV4QXJyYXlPYmplY3QuaCAqLywKIAkJCQk3N0ExN0E3MDEyRjI4MTgyMDA0RTAyRjYgLyog
T0VTVmVydGV4QXJyYXlPYmplY3QuaWRsICovLAotCQkJCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZB
QiAvKiBVaW50MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8q
IFVpbnQzMkFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0REODEwNTAzQzIzMDAwOTlGQUIgLyogVWlu
dDhBcnJheS5pZGwgKi8sCi0JCQkJOTFBMzkwNTgxNEMwRjRCOTAwRjY3OTAxIC8qIFVpbnQ4Q2xh
bXBlZEFycmF5LmlkbCAqLywKIAkJCQlBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xB
Y3RpdmVJbmZvLmggKi8sCiAJCQkJQTdEMjBGM0IxMDdGMzczODAwQTgwMzkyIC8qIFdlYkdMQWN0
aXZlSW5mby5pZGwgKi8sCiAJCQkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVm
ZmVyLmNwcCAqLywKQEAgLTE2NjQ1LDEwICsxNjU2NSw2IEBACiAJCUE4M0I3OTA4MENDQUZGMkIw
MDBCMDgyNSAvKiBIVE1MICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQk0OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8s
Ci0JCQkJNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKLQkJ
CQk0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAot
CQkJCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAog
CQkJCUJFOEVGMDNFMTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suY3BwICovLAogCQkJ
CUJFOEVGMDNGMTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suaCAqLywKIAkJCQlCRThF
RjA0MDE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrTGlzdC5jcHAgKi8sCkBAIC0xNjY2
Miw4ICsxNjU3OCw2IEBACiAJCQkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCiAJCQkJNDlFRUQxM0YxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8sCi0JCQkJMkU5N0NFNkQx
MjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovLAotCQkJCTJFOTdDRTZFMTI5M0FE
NkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmggKi8sCiAJCQkJMkUwODg4RDIxMTQ4ODQ4QTAwQUY0
MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwICovLAogCQkJCTJFMDg4OEQzMTE0ODg0OEEwMEFGNDI2
NSAvKiBKU0RPTUZvcm1EYXRhLmggKi8sCiAJCQkJRkI5MTM5MjkxNkFFNEZDMDAwMUZFNjgyIC8q
IEpTRE9NUGF0aC5jcHAgKi8sCkBAIC0xNjY3OCwxMCArMTY1OTIsNiBAQAogCQkJCTZFQkYwRTc1
MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8sCiAJCQkJNzcyODY5ODEx
NEZEOUFEQTAwRjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywK
IAkJCQk3NzI4Njk4MjE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCAqLywKLQkJCQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJy
YXkuY3BwICovLAotCQkJCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJh
eS5oICovLAotCQkJCTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5j
cHAgKi8sCi0JCQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5Lmgg
Ki8sCiAJCQkJQkM5N0U0MTAxMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24u
Y3BwICovLAogCQkJCUJDOTdFNDExMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0
aW9uLmggKi8sCiAJCQkJMUE0QTJERUIwQTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVs
ZW1lbnQuY3BwICovLApAQCAtMTY4MzUsMTIgKzE2NzQ1LDYgQEAKIAkJCQlFNDQ2MTQwRjBDRDY4
MjY5MDBGQURBNzUgLyogSlNIVE1MVmlkZW9FbGVtZW50LmggKi8sCiAJCQkJQTc3OTc5MjQwRDZC
OUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkyNTBENkI5RTY0
MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCAqLywKLQkJCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlG
QUIgLyogSlNJbnQxNkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQxNkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
SW50MzJBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MzJBcnJheS5oICovLAotCQkJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJh
eS5jcHAgKi8sCi0JCQkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5Lmgg
Ki8sCiAJCQkJQ0QyN0Y2RTIxNDU3Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmNw
cCAqLywKIAkJCQlDRDI3RjZFMzE0NTc2NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIu
aCAqLywKIAkJCQlFNDQ2MTQxMDBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmNwcCAq
LywKQEAgLTE2ODczLDE0ICsxNjc3Nyw2IEBACiAJCQkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1
IC8qIEpTVGltZVJhbmdlcy5oICovLAogCQkJCTA3ODQ2MzQwMTQ1QjE1MUEwMEE1OERGMSAvKiBK
U1RyYWNrRXZlbnQuY3BwICovLAogCQkJCTA3ODQ2MzQxMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1Ry
YWNrRXZlbnQuaCAqLywKLQkJCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZB
cnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJy
YXkuaCAqLywKLQkJCQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5j
cHAgKi8sCi0JCQkJNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAq
LywKLQkJCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLywK
LQkJCQk0OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8sCi0JCQkJ
OTEwODlEMkYxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovLAot
CQkJCTkxMDg5RDMwMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8s
CiAJCQkJMTVDNzcwOTIxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi8s
CiAJCQkJMTVDNzcwOTExMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5oICovLAog
CQkJCUJFOEVGMDQ2MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwICovLApAQCAt
MTg3ODAsNiArMTg2NzYsOCBAQAogCQkJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwICovLAogCQkJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAv
KiBTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLywKIAkJCQlCQzUzRDkxMDExNDMxMENDMDAwRDgx
N0UgLyogV2ViQ29yZUpTQ2xpZW50RGF0YS5oICovLAorCQkJCTBGMDk5RDA2MTdCOTY4QTEwMEZG
ODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMDk5RDA3
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKIAkJ
CQlFMUE2NDNGQzBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAg
Ki8sCiAJCQkJRTFBNjQzRjEwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xs
ZXIuaCAqLywKIAkJCQlGMzQ3NDJFNjEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwICovLApAQCAtMTg4MzUsOCArMTg3MzMsNiBAQAogCQlCQzRFREVGNzBDMDhG
NDE0MDA3RURENDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1
c3RvbS5jcHAgKi8sCi0JCQkJODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyLmggKi8sCiAJCQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0
ckN1c3RvbS5jcHAgKi8sCiAJCQkJQ0RERTY5MUQxNzFERjg5MTAwQTQ0RDg5IC8qIEpTQXVkaW9C
dWZmZXJDdXN0b20uY3BwICovLAogCQkJCUZERUFBQUVGMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1
ZGlvQnVmZmVyU291cmNlTm9kZUN1c3RvbS5jcHAgKi8sCkBAIC0xODg2Miw3ICsxODc1OCw2IEBA
CiAJCQkJQUQ3MjZGRUExNkQ5RjQwQjAwM0E0RTZEIC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1
c3RvbS5oICovLAogCQkJCUUxQUQxNEU3MTI5NzM3NzQwMEFDQTk4OSAvKiBKU0NTU1N0eWxlUnVs
ZUN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFs
dWVDdXN0b20uY3BwICovLAotCQkJCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFW
aWV3Q3VzdG9tLmNwcCAqLywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCiAJCQkJMzFGQjFBNkIxMjBBNUQ2
OTAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwICovLAogCQkJCTU5MEUx
QjRBMTFFNEVGNzAwMDY5Rjc4NCAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3Bw
ICovLApAQCAtMjEzMjEsNyArMjEyMTYsNiBAQAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVC
MCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEz
MTYzNkU2MDAwOUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODFBQzU5OUExMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1NzMyQjBCMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAv
KiBEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTgzMCw2ICsyMTcyNCw3IEBA
CiAJCQkJODkzQzQ4MEYxMjQ4QkQzQTAwMkIzRDg2IC8qIEZpbGVFbnRyeVN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3NkQ2QzgzMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJFREYzNjlGMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUz
Q0Q3MDAwQzc0RjkgLyogRmlsZUljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
REJFMTI1MUYxMkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzZENkM4NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMjIyMzksOSArMjIxMzQsNiBAQAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FG
MDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVF
Q0ExMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDlFRUNGMUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1
ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBC
RTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNB
NTgzQSAvKiBKU0F1ZGlvQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMy
MURCMDBBNTFFQUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTIyMzAyLDcgKzIyMTk0LDYgQEAKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNE
YXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYw
NzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3
MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2
MkE0NTgxMDExNDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZEQTE1RUQyMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2
aWNlTW90aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzNzUsOCArMjIyNjYsNiBAQAog
CQkJCTg5ODc4NUIzMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDZEQTg0NEUxMjI0QTA3MTAwNjBEMDA2IC8qIEpTRmlsZVdyaXRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODkzQzQ3QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmls
ZVdyaXRlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMzEwNTA3MEM0MDAw
OTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFQkM1RUIwMTM4
QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZE
OUQyN0IxNEVBQzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDA5RUJEQzAxNkI3RjM4RTAwQ0JBM0ZDIC8qIEpTRm9udExvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkRBMTVFQUMxMkIwM0VFMTAwM0E1ODNBIC8qIEpTR2Fpbk5vZGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI0NzcsOSArMjIzNjYsNiBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4
NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc2REIxMEJGMDU5
ODAwQTAyNzZFIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3
QTBFNzcxRjEwQzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTQ5RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXku
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMy
QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4
IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMw
OURBMkI0ODAwOTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM1RjQ1NDMwRjdDM0I1RjAwRDdDMUZCIC8qIEpTTGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjI3MjksMTAgKzIyNjE1LDYgQEAKIAkJCQlFMTdCNDkyMTE2QTlCOEZGMDAx
Qzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzUwRDVE
MEE5MERFRTEwMDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
NjYyOUNGMDlEQTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTEwODlEMzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhD
bGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBQTRGQUQyMTc1RDVDQjMwMDc0Mzg3
MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNUM3NzA5MzEwMEQz
Q0E4MDA1QkEyNjcgLyogSlNWYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRThF
RjA0QjE3MUM5MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTI0NzMyLDcgKzI0NjE0LDYgQEAKIAkJCQk5N0JDNkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0
YWJhc2VUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3
NEFDIC8qIERhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDEx
RDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkyRTk3Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU3MzJCMEExMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY1NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRU
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBE
YXRlVGltZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1Mzg4LDkgKzI1MjY5LDYg
QEAKIAkJCQkxQzgxQkEwOTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0
cmFjdFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVDOTEyQjAzRjUwMDAzQTU4
M0EgLyogSlNBbmFseXNlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDAxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMy
NzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNDlFRUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0
dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ2QkMwQzZCRDJGMDAwOTIwQkZGIC8qIEpT
QXR0ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUU5RDEyQjAzRUUxMDAzQTU4
M0EgLyogSlNBdWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDcwLDggKzI1MzQ4
LDYgQEAKIAkJCQkxQUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCNTlERDY5QTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAv
KiBKU0RhdGFiYXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZC
MDBDNUM4RkYgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NGNzEy
OTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
REExNUVEMTEyQjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yNTU0Myw4ICsyNTQxOSw2IEBACiAJCQkJODk4Nzg1RjQxMjJFMUVBQzAwM0FBQkRBIC8q
IEpTRmlsZVJlYWRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk4Nzg1QjIxMjJDQTJB
NzAwM0FBQkRBIC8qIEpTRmlsZVN5c3RlbUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg5M0M0N0JCMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk0OUVFQ0YwMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJy
YXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpT
RmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjdDMTRFQUMwODYwMDkw
RDc1RSAvKiBKU0ZvY3VzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQUIxMkIw
M0VFMTAwM0E1ODNBIC8qIEpTR2Fpbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MERB
NjMwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yNTYwMyw2ICsyNTQ3Nyw3IEBACiAJCQkJQTYxNDhBNzgxMkU0MUUzQjAwNDRBNzg0IC8qIEpT
SFRNTEtleWdlbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjEwQTFDRTYz
QjAwQjQyQjI1IC8qIEpTSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUUyQUIyMzBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjA5OUQwODE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjI1MEExQ0U2M0IwMEI0
MkIyNSAvKiBKU0hUTUxMSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMTAw
QTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxQUQxMzlCMTI5NUQ5MjYwMEFDQTk4OSAvKiBKU0hUTUxMaW5rRWxlbWVudEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjU3LDkgKzI1NTMyLDYgQEAKIAkJCQlGMzE2Mzk2RTEz
Mjk0ODc2MDBBNjQ5Q0IgLyogSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0EwRTc3MUUxMEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBK
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjA0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJNDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDNUZBRUQxMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1RkFFRTcwRENGREE2ODAwRDU4
Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODY2MjlENDA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjU5NDEsMTAgKzI1ODEzLDYgQEAKIAkJCQkxQTc1MEQ1QzBBOTBERUUxMDAw
RkYyMTUgLyogSlNUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNkJCNzk0MENF
OTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTg2NjI5RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFQ0YwQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk0OUVFQ0YwQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNV
aW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkxMDg5RDMzMTRDMzM2MDUwMDVBRkM0
OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBQTRGQUQz
MTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE1Qzc3MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkU4RUYwNEExNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdy
YXBwZXJXb3JsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RP
TVdyYXBwZXJXb3JsZC5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIEpTRE9NV3JhcHBlcjsKIGNsYXNzIFNjcmlwdENvbnRy
b2xsZXI7CiAKLXR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTRE9NV3JhcHBlcj4g
PiBET01PYmplY3RXcmFwcGVyTWFwOwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBKU0M6OldlYWs8
SlNDOjpKU09iamVjdD4gPiBET01PYmplY3RXcmFwcGVyTWFwOwogdHlwZWRlZiBKU0M6OldlYWtH
Q01hcDxTdHJpbmdJbXBsKiwgSlNDOjpKU1N0cmluZywgUHRySGFzaDxTdHJpbmdJbXBsKj4gPiBK
U1N0cmluZ0NhY2hlOwogCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxET01XcmFwcGVyV29ybGQ+IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXJyYXlCdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjb25zdHJ1
Y3RKU0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Kj4oZXhlYy0+Y2FsbGVlKCkpOwotCi0gICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA+IDApCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvSW50MzIoZXhlYyk7IC8vIE5hTi8raW5mLy1pbmYgcmV0dXJucyAwLCB0aGlzIGlzIGludGVu
ZGVkIGJ5IFdlYklETAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChs
ZW5ndGggPj0gMCkKLSAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obGVuZ3RoKSwgMSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJy
YXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3Ry
dWN0b3ItPmdsb2JhbE9iamVjdCgpLCBidWZmZXIuZ2V0KCkpKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKLSNk
ZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXJfaAotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0
aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUJhc2UuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciogdG9vTGFyZ2VTaXplID0gIlNpemUgaXMg
dG9vIGxhcmdlIChvciBpcyBuZWdhdGl2ZSkuIjsKLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5h
bWUgVD4KLWJvb2wgY29weVR5cGVkQXJyYXlCdWZmZXIoQyogdGFyZ2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIHNvdXJjZSwgdW5zaWduZWQgc291cmNlTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0g
ICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBzb3VyY2VUeXBlID0gc291cmNlLT5nZXRUeXBl
KCk7Ci0gICAgQVNTRVJUKHNvdXJjZVR5cGUgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZp
ZXcpOwotCi0gICAgaWYgKHRhcmdldC0+Z2V0VHlwZSgpID09IHNvdXJjZVR5cGUpIHsKLSAgICAg
ICAgaWYgKCF0YXJnZXQtPnNldChzdGF0aWNfY2FzdDxDKj4oc291cmNlKSwgb2Zmc2V0KSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKCF0YXJnZXQtPmNoZWNrSW5ib3VuZERhdGEob2Zmc2V0LCBzb3VyY2VMZW5ndGgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKLSAgICBj
YXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBv
ZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj4gKj4oc291
cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmll
dzo6VHlwZVVpbnQ4OgotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDhDbGFtcGVk
OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRB
cnJheUJhc2U8dW5zaWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2OgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJn
ZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8c2lnbmVk
IHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zm
c2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+ICo+KHNv
dXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVJbnQzMjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRp
Y19jYXN0PFR5cGVkQXJyYXlCYXNlPGludD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQzMjoKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAg
dGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVu
c2lnbmVkIGludD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkg
KyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxmbG9hdD4gKj4oc291cmNl
KS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6
VHlwZUZsb2F0NjQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5n
dGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNf
Y2FzdDxUeXBlZEFycmF5QmFzZTxkb3VibGU+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDLCB0eXBlbmFtZSBUPgotYm9vbCBzZXRX
ZWJHTEFycmF5V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQyog
aW1wbCkKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheSA9IHRvQXJyYXlCdWZm
ZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIGFycmF5VHlwZSA9IGFy
cmF5LT5nZXRUeXBlKCk7Ci0gICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVEYXRhVmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0
ID0gMDsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAgICAgIG9mZnNl
dCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBsZW5n
dGggPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoIShjb3B5VHlw
ZWRBcnJheUJ1ZmZlcjxDLCBUPihpbXBsLCBhcnJheS5nZXQoKSwgbGVuZ3RoLCBvZmZzZXQpKSkK
LSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBp
cyBvdXQgb2YgcmFuZ2UuIikpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIEMsIHR5cGVuYW1lIFQ+Ci1KU0M6OkpTVmFsdWUgc2V0V2ViR0xBcnJheUhlbHBlcihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgQyogaW1wbCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEpTQzo6dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBpZiAoc2V0V2ViR0xBcnJheVdpdGhU
eXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYywgaW1wbCkpCi0gICAgICAgIC8vIHZvaWQgc2V0
KGluIFdlYkdMPD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICBpZiAoZXhlYy0+
YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5j
ZTxsb25nPiBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
ICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0gSlNDOjphc09iamVjdChleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPT0gMikKLSAgICAgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAg
ICAgIGlmICghaW1wbC0+Y2hlY2tJbmJvdW5kRGF0YShvZmZzZXQsIGxlbmd0aCkpCi0gICAgICAg
ICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91
dCBvZiByYW5nZS4iKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU1ZhbHVl
IHYgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQo
KTsKLSAgICAgICAgICAgICAgICBpbXBsLT5zZXQoaSArIG9mZnNldCwgdi50b051bWJlcihleGVj
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHJldHVybiBKU0M6OnRocm93VHlwZUVycm9yKGV4ZWMs
ICJJbnZhbGlkIGFyZ3VtZW50Iik7Ci19Ci0KLS8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkg
WFhYQXJyYXlDb25zdHJ1Y3RvcnMuCi0vLyBJZiB0aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJl
YWR5IGhhdmUgdGhyb3duIGEgSmF2YVNjcmlwdCBleGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBD
LCB0eXBlbmFtZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRo
VHlwZWRBcnJheUFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+IHNvdXJjZSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBcnJheUJ1
ZmZlclZpZXc6OlZpZXdUeXBlIHNvdXJjZVR5cGUgPSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBp
ZiAoc291cmNlVHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldykKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09iamVjdChleGVjLT5hcmd1bWVu
dCgwKSktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50
MzIoZXhlYyk7Ci0gICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgpOwotICAgIGlmICghYXJyYXkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7
Ci0gICAgfQotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oYXJyYXkuZ2V0
KCksIHNvdXJjZS5nZXQoKSwgbGVuZ3RoLCAwKSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFycmF5OwotfQotCi0vLyBUZW1wbGF0ZSBmdW5j
dGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgotLy8gSWYgdGhpcyByZXR1cm5zIDAs
IGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFTY3JpcHQgZXhjZXB0aW9uLgotdGVt
cGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlC
dWZmZXJWaWV3V2l0aEFycmF5QnVmZmVyQXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1
bnNpZ25lZCBvZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1
bWVudCgxKS50b1VJbnQzMihleGVjKSA6IDA7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IDA7
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpCi0gICAgICAgIGxlbmd0aCA9IGV4
ZWMtPmFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOwotICAgIGVsc2UgewotICAgICAgICBpZiAo
KGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIHNpemVvZihUKSkgewotICAgICAgICAg
ICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBs
ZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1l
bnQgc2l6ZS4iKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBs
ZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAg
IH0KLSAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpjcmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCk7Ci0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlC
dWZmZXJWaWV3KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIFRoZXJlIGFyZSAzIGNv
bnN0cnVjdG9yczoKLSAgICAvLwotICAgIC8vICAxKSAoaW4gaW50IHNpemUpCi0gICAgLy8gIDIp
IChpbiBBcnJheUJ1ZmZlciBidWZmZXIsIFtPcHRpb25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlv
bmFsXSBpbiB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4p
IC0gVGhpcyBlbmRzIHVwIGJlaW5nIGEgSlMgImFycmF5LWxpa2UiIG9iamVjdAotICAgIC8vICAg
IAotICAgIC8vIEZvciB0aGUgMCBhcmdzIGNhc2UsIGp1c3QgY3JlYXRlIGEgemVyby1sZW5ndGgg
dmlldy4gV2UgY291bGQKLSAgICAvLyBjb25zaWRlciByYWlzaW5nIGEgU3ludGF4RXJyb3IgZm9y
IHRoaXMgY2FzZSwgYnV0IG5vdCBhbGwKLSAgICAvLyBKYXZhU2NyaXB0IERPTSBiaW5kaW5ncyBj
YW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiAibmV3Ci0gICAgLy8gPFR5cGU+QXJyYXkoKSIgYW5kIHdo
YXQgb2NjdXJzIHdoZW4gYSBwcmV2aW91c2x5LWNvbnN0cnVjdGVkCi0gICAgLy8gQXJyYXlCdWZm
ZXJWaWV3IGlzIHJldHVybmVkIHRvIEphdmFTY3JpcHQ7IGUuZy4sIGZyb20KLSAgICAvLyAiYXJy
YXkuc3Vic2V0KCkiLgotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAg
ICByZXR1cm4gQzo6Y3JlYXRlKDApOwotICAgIAotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5p
c051bGwoKSkgewotICAgICAgICAvLyBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICBSZWZQdHI8Qz4gdmlldyA9
IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PEMsIFQ+KGV4
ZWMpOwotICAgICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgIAot
ICAgICAgICB2aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1
bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICByZXR1cm4g
dmlldzsKLQotICAgICAgICBKU0M6OkpTT2JqZWN0KiBzcmNBcnJheSA9IGFzT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gc3JjQXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgICAgIFJlZlB0cjxDPiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsK
LSAgICAgICAgaWYgKCFhcnJheSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGFy
cmF5OwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IHNyY0FycmF5LT5nZXQoZXhl
YywgaSk7Ci0gICAgICAgICAgICBhcnJheS0+c2V0KGksIHYudG9OdW1iZXIoZXhlYykpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBpbnQgbGVuZ3RoID0g
ZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBSZWZQdHI8Qz4gcmVzdWx0Owot
ICAgIGlmIChsZW5ndGggPj0gMCkKLSAgICAgICAgcmVzdWx0ID0gQzo6Y3JlYXRlKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBKU1R5cGUsIHR5cGVuYW1lIFdl
YkNvcmVUeXBlPgotc3RhdGljIEpTQzo6SlNWYWx1ZSB0b0pTQXJyYXlCdWZmZXJWaWV3KEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJDb3Jl
VHlwZSogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLQotICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFw
cGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7
Ci0KLSAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChvYmplY3QtPmJ5dGVM
ZW5ndGgoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8SlNUeXBlPihleGVjLCBnbG9iYWxP
YmplY3QsIG9iamVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0
LmgiCiAKICNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJKU0F1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnRleHQu
aCIKICNpbmNsdWRlICJKU09mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJPZmZsaW5l
QXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmNwcCIK
ICNpbmNsdWRlICJEaWN0aW9uYXJ5LmNwcCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuY3BwIgot
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQXR0ckN1c3Rv
bS5jcHAiCiAjaW5jbHVkZSAiSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0F1
ZGlvVHJhY2tMaXN0Q3VzdG9tLmNwcCIKQEAgLTcwLDcgKzY5LDYgQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvd0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5jcHAiCiAjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmNwcCIKLSNpbmNsdWRlICJKU0RhdGFWaWV3Q3VzdG9tLmNwcCIK
ICNpbmNsdWRlICJKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCIKICNpbmNs
dWRlICJKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRG9j
dW1lbnRDdXN0b20uY3BwIgpAQCAtMTcwLDUgKzE2OCw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJv
ZmlsZXIuY3BwIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmNwcCIKICNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAi
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCbG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwx
NCArMzQsMTQgQEAKICNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkpTRmls
ZS5oIgogI2luY2x1ZGUgIldlYktpdEJsb2JCdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBydWxlKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBydWxlKTsKICAgICBpZiAod3JhcHBl
cikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhCiAgICAgaWYgKCF2YWx1ZS0+aXNDU1NPTVNhZmUoKSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihj
dXJyZW50V29ybGQoZXhlYyksIHZhbHVlKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB2YWx1ZSk7CiAKICAgICBpZiAod3JhcHBl
cikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgIkpTQ3J5cHRvLmgiCiAKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUg
PHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIApAQCAtNDEsMTIgKzQxLDEyIEBAIEpTVmFsdWUgSlNDcnlwdG86OmdldFJhbmRvbVZh
bHVlcyhFeGVjU3QKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwogCiAgICAgSlNWYWx1ZSBidWZmZXIgPSBleGVjLT5h
cmd1bWVudCgwKTsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldyA9IHRvQXJy
YXlCdWZmZXJWaWV3KGJ1ZmZlcik7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlC
dWZmZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoYnVmZmVyKTsKICAgICBpZiAoIWFycmF5QnVm
ZmVyVmlldykKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZm
ZXJWaWV3LCBlYyk7CisgICAgaW1wbCgpLT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3
LmdldCgpLCBlYyk7CiAKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
CShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIxIEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvci5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5o
PgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9P
YmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL051bGxQdHIuaD4KQEAgLTEyOCw2ICsxMzQsMTYgQEAg
Y2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNP
YmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLCBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5
cGUoKSkpOwogICAgIH0KIAorICAgIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+
KHdvcmxkLT52bSgpLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVy
KCk7CisgICAgfQorICAgIAorICAgIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVy
biB3b3JsZDsKKyAgICB9CisKICAgICBpbmxpbmUgSlNET01XcmFwcGVyKiBnZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqKSB7IHJldHVybiAwOyB9CiAgICAgaW5s
aW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lkKiwg
SlNET01XcmFwcGVyKiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqLCB2b2lkKikgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzks
NiArMTU1LDEzIEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBkb21PYmpl
Y3QtPndyYXBwZXIoKTsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU0FycmF5QnVmZmVyKiBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlC
dWZmZXIqIGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdl
dCgpOworICAgIH0KKwogICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NV3Jh
cHBlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCog
Y29udGV4dCkKICAgICB7CiAgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCkBAIC0xNDcs
NiArMTcwLDE0IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlC
dWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQq
IGNvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkb21PYmplY3QtPm1fd3JhcHBlciA9IEpTQzo6
UGFzc1dlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRl
eHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgU2NyaXB0V3JhcHBh
YmxlKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlm
ICghd29ybGQtPmlzTm9ybWFsKCkpCkBAIC0xNTUsMjQgKzE4NiwzMiBAQCBjbGFzcyBET01TdHJp
bmdMaXN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0RPTVdyYXBwZXIqIGdldENhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICBpbmxpbmUgYm9v
bCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpB
cnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCiAgICAg
ewotICAgICAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcih3b3JsZCwgZG9tT2JqZWN0KSkKKyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+
bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgICAgIHJldHVybiB3b3JsZC0+bV93cmFwcGVycy5nZXQoZG9tT2JqZWN0KTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3Jh
cHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBKU0RPTVdy
YXBwZXIqIHdyYXBwZXIpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAg
ewogICAgICAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFwcGVyT3duZXIod29y
bGQsIGRvbU9iamVjdCk7CiAgICAgICAgIHZvaWQqIGNvbnRleHQgPSB3cmFwcGVyQ29udGV4dCh3
b3JsZCwgZG9tT2JqZWN0KTsKICAgICAgICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBwZXIod29y
bGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIsIGNvbnRleHQpKQogICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBlcj4gcGFzc1dlYWsod3JhcHBl
ciwgb3duZXIsIGNvbnRleHQpOworICAgICAgICBKU0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+
IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KTsKICAgICAgICAgd2Vha0FkZCh3b3Js
ZC0+bV93cmFwcGVycywgKHZvaWQqKWRvbU9iamVjdCwgcGFzc1dlYWspOwogICAgIH0KIAotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVy
KiB3cmFwcGVyKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdv
cmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAgewog
ICAgICAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdy
YXBwZXIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk1LDcgKzIzNCw3IEBAIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiAgICAgewogICAgICAgICBpZiAoIWRvbU9iamVjdCkKICAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvbU9iamVjdCkpCisgICAg
ICAgIGlmIChKU0M6OkpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50
V29ybGQoZXhlYyksIGRvbU9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmpl
Y3QsIGRvbU9iamVjdCk7CiAgICAgfQpAQCAtMzIzLDYgKzM2MiwyNSBAQCBjbGFzcyBET01TdHJp
bmdMaXN0OwogICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAorICAgIGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYg
KCFidWZmZXIpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgaWYg
KEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNDOjpKU0FycmF5QnVm
ZmVyPihleGVjLCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
YnVmZmVyLT5yZWYoKTsKKyAgICAgICAgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0gSlND
OjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1
ZmZlclN0cnVjdHVyZSgpLCBidWZmZXIpOworICAgICAgICBjYWNoZVdyYXBwZXIoY3VycmVudFdv
cmxkKGV4ZWMpLCBidWZmZXIsIHdyYXBwZXIpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAg
ICB9CisKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2
aWV3KQorICAgIHsKKyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiB2aWV3LT53cmFwKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CisgICAgfQorCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPFQ+IHB0cikKICAgICB7CkBAIC0zNzYsNiArNDM0LDMyIEBAIGNs
YXNzIERPTVN0cmluZ0xpc3Q7CiAKICAgICBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAK
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9BcnJheUJ1ZmZl
clZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0FycmF5QnVm
ZmVyVmlldyogd3JhcHBlciA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3Kj4odmFsdWUpOworICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKKyAgICB9CisgICAgCisgICAgaW5s
aW5lIFBhc3NSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvSW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2
YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvSW50MTZB
cnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6
SW50MzJBcnJheT4gdG9JbnQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5s
aW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1VpbnQ4QXJyYXkoSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9y
Pih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
PiB0b1VpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZhbHVlKTsgfQorICAg
IGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVWludDE2QXJyYXkoSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2
QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50MzJBcnJh
eT4gdG9VaW50MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFz
c1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9GbG9hdDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+
KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zs
b2F0NjRBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odmFsdWUpOyB9CisgICAgCisgICAgaW5saW5lIFBh
c3NSZWZQdHI8SlNDOjpEYXRhVmlldz4gdG9EYXRhVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OkpTRGF0YVZpZXcqIHdyYXBwZXIgPSBKU0M6OmpzRHluYW1pY0Nh
c3Q8SlNDOjpKU0RhdGFWaWV3Kj4odmFsdWUpOworICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPnR5cGVkSW1wbCgpOwor
ICAgIH0KKwogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsK
IAogICAgIHRlbXBsYXRlPD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YVZpZXdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRGF0YVZpZXdDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RhdGFW
aWV3LmgiCi0KLSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotZW51bSBEYXRhVmlld0FjY2Vzc1R5cGUgewotICAgIEFjY2Vzc0RhdGFWaWV3TWVtYmVy
QXNGbG9hdDMyLAotICAgIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0Ci19OwotCi1KU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBEYXRhVmlldyogb2JqZWN0KQotewotICAgIHJldHVybiB3cmFwPEpTRGF0YVZpZXc+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTRGF0YVZpZXcoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSB8fCAhZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7Ci0KLSAgICBSZWZQdHI8RGF0YVZpZXc+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZp
ZXdXaXRoQXJyYXlCdWZmZXJBcmd1bWVudDxEYXRhVmlldywgY2hhcj4oZXhlYyk7Ci0gICAgaWYg
KCF2aWV3LmdldCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpF
X0VSUik7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgfQotCi0gICAgSlNEYXRhVmlld0NvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0
PEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCksIHZpZXcuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldERhdGFWaWV3TWVt
YmVyKEV4ZWNTdGF0ZSogZXhlYywgRGF0YVZpZXcqIGltcCwgRGF0YVZpZXdBY2Nlc3NUeXBlIHR5
cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGJvb2wgbGl0dGxlRW5k
aWFuID0gZmFsc2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEgJiYgKHR5cGUg
PT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIgfHwgdHlwZSA9PSBBY2Nlc3NEYXRhVmll
d01lbWJlckFzRmxvYXQ2NCkpIHsKLSAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1l
bnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0OwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQWNjZXNzRGF0YVZp
ZXdNZW1iZXJBc0Zsb2F0MzI6Ci0gICAgY2FzZSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2
NDogewotICAgICAgICBkb3VibGUgdmFsdWUgPSAodHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJl
ckFzRmxvYXQzMikgPyBpbXAtPmdldEZsb2F0MzIoYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBl
YykgOiBpbXAtPmdldEZsb2F0NjQoYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci0gICAg
ICAgIHJlc3VsdCA9IHN0ZDo6aXNuYW4odmFsdWUpID8ganNOYU4oKSA6IGpzTnVtYmVyKHZhbHVl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfSBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSlNWYWx1ZSBKU0RhdGFWaWV3OjpnZXRG
bG9hdDMyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YVZpZXdNZW1iZXIo
ZXhlYywgc3RhdGljX2Nhc3Q8RGF0YVZpZXcqPihpbXBsKCkpLCBBY2Nlc3NEYXRhVmlld01lbWJl
ckFzRmxvYXQzMik7Ci19Ci0KLUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQ2NChFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19j
YXN0PERhdGFWaWV3Kj4oaW1wbCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEw
ICszNiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgog
I2luY2x1ZGUgIkpTVHJhY2tDdXN0b20uaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNp
bmNsdWRlICJKU1ZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVk
QXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDE1NDA2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRp
b25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhl
Y1N0YXRlKiAKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTG9jYXRpb24qIGxvY2F0
aW9uID0gZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5sb2NhdGlvbigpOwotICAgIGlm
IChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgbG9jYXRpb24pKQorICAgIGlmIChKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdy
YXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBsb2NhdGlvbikpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogCiAgICAgSlNMb2NhdGlvbioganNMb2NhdGlvbiA9IEpTTG9jYXRpb246OmNyZWF0ZShn
ZXRET01TdHJ1Y3R1cmU8SlNMb2NhdGlvbj4oZXhlYywgZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxP
YmplY3QoKSwgbG9jYXRpb24pOwpAQCAtODMsNyArODMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBl
cihjdXJyZW50V29ybGQoZXhlYyksIGRvY3VtZW50KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9
IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb2N1bWVudCk7CiAgICAgaWYg
KHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYQogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpT
RE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCBldmVudCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgZXZlbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Zp
bGVSZWFkZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw4IEBACiAjaW5jbHVkZSAiSlNGaWxlUmVhZGVyLmgiCiAKICNpbmNsdWRlICJGaWxlUmVh
ZGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJy
YXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmEKICAgICBpZiAoIWNvbGxlY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVu
dFdvcmxkKGV4ZWMpLCBjb2xsZWN0aW9uKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBjb2xsZWN0aW9uKTsKIAogICAgIGlmICh3
cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
VGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBA
QCBKU1ZhbHVlIEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudChFCiAgICAgSFRNTFRlbXBs
YXRlRWxlbWVudCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudCo+KGltcGwo
KSk7CiAgICAgRG9jdW1lbnRGcmFnbWVudCogY29udGVudCA9IGltcC0+Y29udGVudCgpOwogCi0g
ICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIGNvbnRlbnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBl
cihjdXJyZW50V29ybGQoZXhlYyksIGNvbnRlbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdl
RGF0YS5oIgotI2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKIAogI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5LDcg
QEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghaW1h
Z2VEYXRhKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVy
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0
YSk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3Js
ZChleGVjKSwgaW1hZ2VEYXRhKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRl
ICJKU0V2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1
ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5oIgog
I2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIK
LSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1N0
b3JhZ2UuaCIKLSNpbmNsdWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCiAjaW5jbHVkZSAiU3RvcmFnZS5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+
CkBAIC02Nyw4ICs1OSwxMSBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvUmVnRXhwT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5
SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VFdmVudC5oIgogCi0jaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNN
ZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDEzICszMCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNF
dmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2Fn
ZVBvcnRDdXN0b20uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQ
YXRoU2VnQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFvYmplY3QpCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBn
ZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkKKyAgICBpZiAoSlNP
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2Jq
ZWN0KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBzd2l0Y2ggKG9iamVjdC0+cGF0
aFNlZ1R5cGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNo
ZWV0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1N0eWxlU2hlZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw3ICs1MCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAg
ICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9N
V3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBz
dHlsZVNoZWV0KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3Vy
cmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJh
Y2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgaWYgKCF0cmFj
aykKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIAotICAgIEpTRE9NV3JhcHBlciogd3Jh
cHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB0cmFjayk7CisgICAg
SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
dHJhY2spOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMTggKzM2LDE0IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgogI2luY2x1ZGUgIkpTRVhURHJhd0J1ZmZlcnMuaCIKICNpbmNsdWRlICJKU0VYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCiAj
aW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxl
bWVudC5oIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNJbnQzMkFycmF5
LmgiCiAjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCiAjaW5jbHVkZSAiSlNPRVNT
dGFuZGFyZERlcml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKICNp
bmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKICNpbmNsdWRlICJKU09FU1ZlcnRleEFy
cmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWlu
dDhBcnJheS5oIgogI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJKU1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaCIKICNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQy5oIgpAQCAtODUsMTAgKzgxLDkgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQw
NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01G
b3JtRGF0YS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCkBAIC01MCw2ICs0OCw4
IEBACiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMjcsOSArMTI3LDEwIEBA
IEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICAgICAgICAgIGlt
cGwoKS0+c2VuZCh0b0RPTUZvcm1EYXRhKHZhbCksIGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFs
LmluaGVyaXRzKEpTQXJyYXlCdWZmZXI6OmluZm8oKSkpCiAgICAgICAgICAgICBpbXBsKCktPnNl
bmQodG9BcnJheUJ1ZmZlcih2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0
cyhKU0FycmF5QnVmZmVyVmlldzo6aW5mbygpKSkKLSAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0
b0FycmF5QnVmZmVyVmlldyh2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBp
ZiAodmFsLmluaGVyaXRzKEpTQXJyYXlCdWZmZXJWaWV3OjppbmZvKCkpKSB7CisgICAgICAgICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB2aWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsKTsK
KyAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2aWV3LmdldCgpLCBlYyk7CisgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YyksIGVjKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsMjUgKzMyLDEzIEBACiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUg
IkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9i
LmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiSlNGaWxlTGlzdC5oIgotI2luY2x1
ZGUgIkpTRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNGbG9hdDY0QXJyYXkuaCIKICNpbmNs
dWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MTZBcnJheS5oIgotI2luY2x1ZGUg
IkpTSW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNN
ZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgiCi0jaW5jbHVkZSAiSlNVaW50
MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4
QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgpAQCAtNjMsMTIgKzUxLDE3IEBACiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5z
dGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJh
dGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9SZWdFeHAuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cE9iamVjdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC0xNzIyLDQ3ICsxNzE1LDYgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2Ny
aXB0VgogICAgIG1fYmxvYlVSTHMuc3dhcChibG9iVVJMcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5l
dXRlclZpZXcoSlNDZWxsKiBqc1ZpZXcpCi17Ci0gICAgaWYgKCFqc1ZpZXcpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBzd2l0Y2ggKGpzVmlldy0+Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlT
dG9yYWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgIC8vIFRoaXMg
Y291bGQgYmUgYSBEYXRhVmlldywgZm9yIGV4YW1wbGUuIEFzc3VtZSB0aGF0IHRoZXJlIGFyZSB2
aWV3cyB0aGF0IHRoZQotICAgICAgICAvLyBERkcgZG9lc24ndCBjYXJlIGFib3V0LgotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAganNDYXN0PEpTSW50
OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgVHlwZWRBcnJheUludDE2OgotICAgICAgICBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4o
anNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
VHlwZWRBcnJheUludDMyOgotICAgICAgICBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eVVpbnQ4OgotICAgICAgICBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdl
TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xh
bXBlZDoKLSAgICAgICAganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkqPihqc1ZpZXcpLT5tX3N0
b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWlu
dDE2OgotICAgICAgICBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxl
bmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0g
ICAgICAgIGpzQ2FzdDxKU1VpbnQzMkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0g
MDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAg
IGpzQ2FzdDxKU0Zsb2F0MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICBqc0Nh
c3Q8SlNGbG9hdDY0QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0K
IFBhc3NPd25QdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXk+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMoCiAgICAgRXhl
Y1N0YXRlKiBleGVjLCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZlcnMsIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlJiBjb2RlKQogewpAQCAtMTc3OSwyNiArMTczMSwxNSBAQCBQYXNzT3duUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCCiAKICAgICBIYXNoU2V0PEpTQzo6QXJyYXlC
dWZmZXIqPiB2aXNpdGVkOwogICAgIGZvciAoc2l6ZV90IGFycmF5QnVmZmVySW5kZXggPSAwOyBh
cnJheUJ1ZmZlckluZGV4IDwgYXJyYXlCdWZmZXJzLnNpemUoKTsgYXJyYXlCdWZmZXJJbmRleCsr
KSB7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+IG5ldXRlcmVkVmll
d3M7Ci0KICAgICAgICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoYXJyYXlCdWZmZXJzW2FycmF5QnVm
ZmVySW5kZXhdLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB2aXNpdGVk
LmFkZChhcnJheUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0KCkpOwogCi0gICAgICAgIGJv
b2wgcmVzdWx0ID0gYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLT50cmFuc2Zlcihjb250
ZW50cy0+YXQoYXJyYXlCdWZmZXJJbmRleCksIG5ldXRlcmVkVmlld3MpOworICAgICAgICBib29s
IHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIoY29udGVu
dHMtPmF0KGFycmF5QnVmZmVySW5kZXgpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgIGNvZGUgPSBWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHZpZXdzIG1heSBoYXZlIGJl
ZW4gbmV1dGVyZWQsIGJ1dCB0aGVpciB3cmFwcGVycyBhbHNvIG5lZWQgdG8gYmUgbmV1dGVyZWQs
IHRvby4KLSAgICAgICAgZm9yIChzaXplX3Qgdmlld0luZGV4ID0gbmV1dGVyZWRWaWV3cy5zaXpl
KCk7IHZpZXdJbmRleC0tOykgewotICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0g
bmV1dGVyZWRWaWV3c1t2aWV3SW5kZXhdLmdldCgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
d29ybGRJbmRleCA9IHdvcmxkcy5zaXplKCk7IHdvcmxkSW5kZXgtLTspIHsKLSAgICAgICAgICAg
ICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gd29ybGRzW3dvcmxkSW5kZXhdLmdldCgpOwot
ICAgICAgICAgICAgICAgIG5ldXRlclZpZXcoZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgdmlldykp
OwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBjb250ZW50cy5y
ZWxlYXNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlND
bGllbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRPTU9i
amVjdEhhc2hUYWJsZU1hcC5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
CkBAIC03NSw2ICs3Niw3IEBAIGlubGluZSB2b2lkIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEo
SlMKICAgICBXZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3JlSlNDbGllbnREYXRhID0gbmV3IFdl
YkNvcmVKU0NsaWVudERhdGE7CiAgICAgdm0tPmNsaWVudERhdGEgPSB3ZWJDb3JlSlNDbGllbnRE
YXRhOyAvLyB+Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgd2ViQ29yZUpTQ2xpZW50RGF0
YS0+bV9ub3JtYWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKHZtLCB0cnVlKTsKKyAg
ICB2bS0+bV90eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKKyNpbmNsdWRlIDxoZWFwL1Bhc3NXZWFrLmg+CisjaW5jbHVkZSA8cnVudGltZS9B
cnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQoreworfQorV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pT
QXJyYXlCdWZmZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBu
YXRpdmUpCit7CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oCisgICAgICAgIFdl
YkNvcmU6OnRvSlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSwgbmF0aXZlKSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0Fy
cmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxV
bmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyKiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihoYW5kbGUu
Z2V0KCkuYXNDZWxsKCkpOworICAgIGlmICghanNBcnJheUJ1ZmZlci0+aGFzQ3VzdG9tUHJvcGVy
dGllcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJyYXlCdWZmZXIqIHJvb3QgPSBq
c0FycmF5QnVmZmVyLT5pbXBsKCk7CisgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVS
b290KHJvb3QpOworfQorCit2b2lkIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJh
eUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSgKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiBjb250ZXh0KQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAg
IHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc0FycmF5QnVmZmVyLT5pbXBsKCksIGpzQXJyYXlCdWZm
ZXIpOworICAgIGpzQXJyYXlCdWZmZXItPmltcGwoKS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gK
KyNkZWZpbmUgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPGhlYXAv
V2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyIDogcHVibGljIEpTQzo6VHlwZWRBcnJh
eUNvbnRyb2xsZXIgeworcHVibGljOgorICAgIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigp
OworICAgIHZpcnR1YWwgfldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAg
IHZpcnR1YWwgSlNDOjpKU0FycmF5QnVmZmVyKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKKyAgICAKKyAgICBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKCkgeyByZXR1cm4gJm1fb3duZXI7IH0KKworcHJpdmF0
ZToKKyAgICBjbGFzcyBKU0FycmF5QnVmZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworICAgIH07CisKKyAgICBKU0FycmF5
QnVmZmVyT3duZXIgbV9vd25lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDE1
NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDIxICsxODAsMjIgQEAgc3ViIEZvckFsbFBhcmVudHMK
IAogICAgIG15ICRyZWN1cnNlOwogICAgICRyZWN1cnNlID0gc3ViIHsKKyAgICAgICAgbXkgJG91
dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gc2hp
ZnQ7CiAKICAgICAgICAgZm9yIChAeyRjdXJyZW50SW50ZXJmYWNlLT5wYXJlbnRzfSkgewogICAg
ICAgICAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkXzsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJ
bnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSk7CisgICAg
ICAgICAgICBteSAkcGFyZW50SW50ZXJmYWNlID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJG91
dGVySW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CiAKICAgICAgICAgICAgIGlmICgkYmVmb3Jl
UmVjdXJzaW9uKSB7CiAgICAgICAgICAgICAgICAgJiRiZWZvcmVSZWN1cnNpb24oJHBhcmVudElu
dGVyZmFjZSkgZXEgJ3BydW5lJyBhbmQgbmV4dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICYkcmVjdXJzZSgkcGFyZW50SW50ZXJmYWNlKTsKKyAgICAgICAgICAgICYkcmVjdXJzZSgkb3V0
ZXJJbnRlcmZhY2UsICRwYXJlbnRJbnRlcmZhY2UpOwogICAgICAgICAgICAgJiRhZnRlclJlY3Vy
c2lvbigkcGFyZW50SW50ZXJmYWNlKSBpZiAkYWZ0ZXJSZWN1cnNpb247CiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgJiRyZWN1cnNlKCRpbnRlcmZhY2UpOworICAgICYkcmVjdXJzZSgkaW50ZXJm
YWNlLCAkaW50ZXJmYWNlKTsKIH0KIAogc3ViIEZpbmRTdXBlck1ldGhvZApAQCAtMjM4LDYgKzIz
OSw3IEBAIHN1YiBJRExGaWxlRm9ySW50ZXJmYWNlCiBzdWIgUGFyc2VJbnRlcmZhY2UKIHsKICAg
ICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKIAogICAgIHJldHVybiB1bmRlZiBpZiAkaW50
ZXJmYWNlTmFtZSBlcSAnT2JqZWN0JzsKQEAgLTI0OCw3ICsyNTAsNyBAQCBzdWIgUGFyc2VJbnRl
cmZhY2UKIAogICAgICMgU3RlcCAjMTogRmluZCB0aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRo
ICdpbnRlcmZhY2UnCiAgICAgbXkgJGZpbGVuYW1lID0gJG9iamVjdC0+SURMRmlsZUZvckludGVy
ZmFjZSgkaW50ZXJmYWNlTmFtZSkKLSAgICAgICAgb3IgZGllKCJDb3VsZCBOT1QgZmluZCBJREwg
ZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5hbWVcIiFcbiIpOworICAgICAgICBvciBk
aWUoIkNvdWxkIE5PVCBmaW5kIElETCBmaWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFt
ZVwiLCByZWFjaGFibGUgZnJvbSBcIiIgLiAkb3V0ZXJJbnRlcmZhY2UtPm5hbWUgLiAiXCIhXG4i
KTsKIAogICAgIHByaW50ICIgIHwgIHw+ICBQYXJzaW5nIHBhcmVudCBJREwgXCIkZmlsZW5hbWVc
IiBmb3IgaW50ZXJmYWNlIFwiJGludGVyZmFjZU5hbWVcIlxuIiBpZiAkdmVyYm9zZTsKIApAQCAt
Mjc3LDYgKzI3OSwxMCBAQCBzdWIgU2tpcEluY2x1ZGVIZWFkZXIKIAogICAgICMgU3BlY2lhbCBj
YXNlOiBTVkdOdW1iZXIuaCBkb2VzIG5vdCBleGlzdC4KICAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiU1ZHTnVtYmVyIjsKKyAgICAKKyAgICAjIFR5cGVkIGFycmF5cyBhbHJlYWR5IGluY2x1ZGVk
IGJ5IEpTRE9NQmluZGluZy5oLgorICAgIHJldHVybiAxIGlmICRvYmplY3QtPklzVHlwZWRBcnJh
eVR5cGUoJHR5cGUpOworICAgIAogICAgIHJldHVybiAwOwogfQogCkBAIC0zNjgsNyArMzc0LDcg
QEAgc3ViIElzVHlwZWRBcnJheVR5cGUKICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJBcnJh
eUJ1ZmZlciIpIG9yICgkdHlwZSBlcSAiQXJyYXlCdWZmZXJWaWV3IikpOwogICAgIHJldHVybiAx
IGlmICgoJHR5cGUgZXEgIlVpbnQ4QXJyYXkiKSBvciAoJHR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFy
cmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDMyQXJy
YXkiKSk7CiAgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0eXBl
IGVxICJJbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQzMkFycmF5IikpOwotICAgIHJldHVy
biAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFy
cmF5IikpOworICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgk
dHlwZSBlcSAiRmxvYXQ2NEFycmF5Iikgb3IgKCR0eXBlIGVxICJEYXRhVmlldyIpKTsKICAgICBy
ZXR1cm4gMDsKIH0KIApAQCAtNjA5LDYgKzYxNSw3IEBAIHN1YiBJc1dyYXBwZXJUeXBlCiAgICAg
cmV0dXJuIDAgaWYgJG9iamVjdC0+R2V0U2VxdWVuY2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4g
MCBpZiAkb2JqZWN0LT5Jc0VudW1UeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0
LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOworICAgIHJldHVybiAwIGlmICRvYmplY3QtPklzVHlwZWRB
cnJheVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICR3ZWJDb3JlVHlwZUhhc2h7JHR5cGV9
OwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJhbnkiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdWIgQWRkSW5jbHVkZXNG
b3JUeXBlCiAgICAgbXkgJGluY2x1ZGVzUmVmID0gc2hpZnQ7CiAKICAgICByZXR1cm4gaWYgU2tp
cEluY2x1ZGVIZWFkZXIoJHR5cGUpOwotCisgICAgCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVk
IHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdv
bid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KICAgICBpZiAoJHR5cGUgZXEgIlhQYXRoTlNS
ZXNvbHZlciIpIHsKQEAgLTIyNSw4ICsyMjUsNiBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAg
ICAgICAgICRpbmNsdWRlc1JlZi0+eyJKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIn0gPSAxOwog
ICAgIH0gZWxzaWYgKCRpc0NhbGxiYWNrICYmICRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBl
KCR0eXBlKSkgewogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlMke3R5cGV9LmgifSA9IDE7Ci0g
ICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0g
ICAgICAgICRpbmNsdWRlc1JlZi0+eyI8cnVudGltZS8ke3R5cGV9Lmg+In0gPSAxOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAg
ICAgICAgICRpbmNsdWRlc1JlZi0+eyIke3R5cGV9LmgifSA9IDE7CkBAIC02ODIsMTEgKzY4MCw3
IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0KIAogICAgIGlmICgkaGFzUGFyZW50ICYmICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3Qi
fSkgewotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGludGVy
ZmFjZU5hbWUpKSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lLyRpbnRl
cmZhY2VOYW1lLmg+In0gPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwotICAgICAgICB9CisgICAgICAgICRo
ZWFkZXJJbmNsdWRlc3siJGludGVyZmFjZU5hbWUuaCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAg
JGhlYWRlckluY2x1ZGVzeyI8cnVudGltZS9KU09iamVjdC5oPiJ9ID0gMTsKQEAgLTk2NSwyMiAr
OTU5LDYgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgfVxuIik7CiAgICAgfQogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJy
YXlUeXBlKCRpbXBsVHlwZSkgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFu
ZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlciIpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGNvbnN0IEpTQzo6VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0
b3JhZ2VUeXBlID0gSlNDOjoiKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVk
QXJyYXlJbnQ4IikgaWYgJGltcGxUeXBlIGVxICJJbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDE2IikgaWYgJGltcGxUeXBlIGVxICJJbnQxNkFy
cmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQzMiIpIGlm
ICRpbXBsVHlwZSBlcSAiSW50MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICJUeXBlZEFycmF5VWludDgiKSBpZiAkaW1wbFR5cGUgZXEgIlVpbnQ4QXJyYXkiOwotICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCIpIGlmICRpbXBs
VHlwZSBlcSAiVWludDhDbGFtcGVkQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiVHlwZWRBcnJheVVpbnQxNiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDE2QXJyYXkiOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQzMiIpIGlmICRpbXBsVHlw
ZSBlcSAiVWludDMyQXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRB
cnJheUZsb2F0MzIiKSBpZiAkaW1wbFR5cGUgZXEgIkZsb2F0MzJBcnJheSI7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5RmxvYXQ2NCIpIGlmICRpbXBsVHlwZSBlcSAi
RmxvYXQ2NEFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIjtcbiIpOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGludHB0cl90IG1fc3RvcmFnZUxlbmd0aDtc
biIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHZvaWQqIG1fc3RvcmFnZTtc
biIpOwotICAgIH0KLQogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsK
ICAgICAjIENvbnN0cnVjdG9yCiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ci
KSB7CkBAIC0xODY5LDEyICsxODQ3LDYgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIp
OwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBl
KSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUg
IkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5
cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJHtjbGFzc05hbWV9OjppbmZvKCksIE9CSkVD
VF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2Ns
YXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB2bS5yZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVz
Y3JpcHRvcik7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3Rv
cmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBtX3N0b3JhZ2VMZW5ndGggPSBpbXBsKCktPmxlbmd0aCgpO1xuIik7Ci0gICAgICAg
IH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CkBA
IC0yMzc0LDcgKzIzNDYsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICgk
ZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5TZXR0ZXJFeHByZXNz
aW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJuYXRpdmVWYWx1
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSkgYW5kIG5v
dCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIkFycmF5QnVmZmVyIikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2
ZVZhbHVlLmdldCgpIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgIm5hdGl2ZVZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5
In07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0gPSAxOwpAQCAtMjUyNiwxMyArMjUwMiw2IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgaWYgKCRpc0N1c3RvbSkgewog
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAi
KGV4ZWMpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSBlcSAic2V0IiBhbmQgJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0V2ViR0xBcnJheUhlbHBlcjwkaW1wbFR5
cGUsICR2aWV3VHlwZT4oZXhlYywgY2FzdGVkVGhpcy0+aW1wbCgpKSk7XG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkaW1wbFR5cGUqIGltcGwgPSBzdGF0aWNf
Y2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRUaGlzLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICgkc3ZnUHJvcGVydHlUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoaW1wbC0+aXNSZWFkT25seSgpKSB7XG4iKTsKQEAg
LTMwODcsNyArMzA1Niw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIikg
eworICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8ICgkY29kZUdlbmVyYXRv
ci0+SXNUeXBlZEFycmF5VHlwZSgkYXJnVHlwZSkgYW5kIG5vdCAkYXJnVHlwZSBlcSAiQXJyYXlC
dWZmZXIiKSkgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5hbWUuZ2V0KCkiOwog
ICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYo
JGFyZ1R5cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4gL0xpc3QkLykgewogICAgICAgICAg
ICAgcHVzaCBAYXJndW1lbnRzLCAiJG5hbWUtPnByb3BlcnR5UmVmZXJlbmNlKCkiOwpAQCAtMzM2
OSw2ICszMzM4LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICBteSAkc3ZnTmF0aXZlVHlwZSA9
ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpOwogICAgIHJl
dHVybiAiJHtzdmdOYXRpdmVUeXBlfSoiIGlmICRzdmdOYXRpdmVUeXBlOwogICAgIHJldHVybiAi
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nTGlzdCI7CisgICAg
cmV0dXJuICJSZWZQdHI8JHt0eXBlfT4iIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlU
eXBlKCR0eXBlKSBhbmQgbm90ICR0eXBlIGVxICJBcnJheUJ1ZmZlciI7CiAgICAgcmV0dXJuICRu
YXRpdmVUeXBleyR0eXBlfSBpZiBleGlzdHMgJG5hdGl2ZVR5cGV7JHR5cGV9OwogCiAgICAgbXkg
JGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwpAQCAtMzUw
OCw2ICszNDc4LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIkpTRE9NU3RyaW5nTGlzdC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJu
ICJ0b0RPTVN0cmluZ0xpc3QoZXhlYywgJHZhbHVlKSI7CiAgICAgfQorICAgIAorICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJu
ICJ0byR0eXBlKCR2YWx1ZSkiOworICAgIH0KIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJIVE1M
T3B0aW9uRWxlbWVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiSFRNTE9wdGlvbkVs
ZW1lbnQiOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFdmVudC5oIiwgJGNvbmRpdGlvbmFsKSBp
ZiAkdHlwZSBlcSAiRXZlbnQiOwpAQCAtMzU3Nyw3ICszNTUxLDcgQEAgc3ViIE5hdGl2ZVRvSlNW
YWx1ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAk
Y29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsICR2
YWx1ZSkiOwogICAgIH0KLQorICAgIAogICAgIG15ICRnbG9iYWxPYmplY3Q7CiAgICAgaWYgKCR0
aGlzVmFsdWUpIHsKICAgICAgICAgJGdsb2JhbE9iamVjdCA9ICIkdGhpc1ZhbHVlLT5nbG9iYWxP
YmplY3QoKSI7CkBAIC0zNjE4LDE0ICszNTkyLDEyIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICB9IGVsc2lmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAi
YW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVz
ZXJpYWxpemUoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCki
OworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkg
eworICAgICAgICAjIERvIG5vdGhpbmcgLSBhbGwgaGVhZGVycyBhcmUgYWxyZWFkeSBpbmNsdWRl
ZC4KICAgICB9IGVsc2UgewogICAgICAgICAjIERlZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdpdGgg
c2FtZSBuYW1lLgogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRp
dGlvbmFsKTsKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0
eXBlKSkgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1lLyR0eXBlLmg+
IiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVy
KCR0eXBlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNs
dWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfQorICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
JHR5cGUuaCIsICRjb25kaXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVk
ZUhlYWRlcigkdHlwZSk7CiAgICAgfQogCiAgICAgcmV0dXJuICR2YWx1ZSBpZiAkY29kZUdlbmVy
YXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpOwpAQCAtNDEwOCwzMCArNDA4MCw2IEBAIEVO
RAogfQogCiBFTkQKLSAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0
b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiVHlwZWRBcnJheSIpKSB7Ci0gICAgICAgICAgICAkaW1w
bEluY2x1ZGVzeyJKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIn0gPSAxOwotICAgICAgICAgICAg
bXkgJHZpZXdUeXBlID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJy
YXkifTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgJHtjb25zdHJ1Y3RvckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1l
fShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IntcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0
b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05h
bWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgUmVmUHRyPCRpbnRlcmZhY2VOYW1lPiBhcnJheSA9IGNvbnN0cnVjdEFycmF5QnVm
ZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwgJHZpZXdUeXBlPihleGVjKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghYXJyYXkuZ2V0KCkpXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJl
YWR5IGJlZW4gdGhyb3duLlxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmpl
Y3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkp
KSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAke2ludGVyZmFj
ZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0b0pTQXJy
YXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1lfT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRT
ZXR0ZXIifSkgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtj
bGFzc05hbWV9OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5k
ZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpbXBsKCktPnNldChpbmRleCwgdmFsdWUudG9OdW1iZXIoZXhlYykpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNpZiAoIUhhc0N1c3RvbUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2Vu
ZXJhdGluZ05hbWVkQ29uc3RydWN0b3IpKSB7CiAgICAgICAgICAgICBteSAkb3ZlcmxvYWRlZElu
ZGV4U3RyaW5nID0gIiI7CiAgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZElu
ZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9ID4gMCkgewpAQCAtNDIxMCw3ICs0
MTU4LDcgQEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JIZWxwZXJNZXRob2RzCiAKICAgICBteSAk
Y29uc3RydWN0b3JDbGFzc05hbWUgPSAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPyAiJHtj
bGFzc05hbWV9TmFtZWRDb25zdHJ1Y3RvciIgOiAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwog
ICAgIG15ICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMDsKLSAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSB8fCAkY29kZUdl
bmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJUeXBlZEFycmF5Iikp
IHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJm
YWNlLCAiRXZlbnQiKSkgewogICAgICAgICAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDE7CiAg
ICAgfSBlbHNpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9y
In0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9y
In0pIHsKICAgICAgICAgbXkgQGNvbnN0cnVjdG9ycyA9IEB7JGludGVyZmFjZS0+Y29uc3RydWN0
b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIu
Y3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJs
b2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEJsb2JC
dWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXIqIGFyCiAgICAgYXBwZW5kQnl0ZXNEYXRhKGFycmF5
QnVmZmVyLT5kYXRhKCksIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogfQogCi12b2lkIEJs
b2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcpCit2b2lk
IEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVm
ZmVyVmlldykKIHsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigi
V2ViQ29yZS5CbG9iLmNvbnN0cnVjdG9yLkFycmF5QnVmZmVyT3JWaWV3IiwgQmxvYkNvbnN0cnVj
dG9yQXJyYXlCdWZmZXJWaWV3LCBCbG9iQ29uc3RydWN0b3JBcnJheUJ1ZmZlck9yVmlld01heCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgJKHJl
dmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVuZGluZyk7CiAjaWYgRU5B
QkxFKEJMT0IpCiAgICAgdm9pZCBhcHBlbmQoSlNDOjpBcnJheUJ1ZmZlciopOwotICAgIHZvaWQg
YXBwZW5kKEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4pOwogI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPEJsb2I+
IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdp
bmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGwsCi0g
ICAgQ3VzdG9tQ29uc3RydWN0b3IodW5zaWduZWQgbG9uZyBsZW5ndGgpLAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDLAotICAgIEltcGxlbWVu
dGF0aW9uTGFja3NWVGFibGUKLV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyIHsKLSAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlTGVuZ3RoOwotICAgIEFycmF5QnVmZmVyIHNs
aWNlKGxvbmcgYmVnaW4sIG9wdGlvbmFsIGxvbmcgZW5kKTsKLX07Ci0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAkocmV2aXNpb24gMTU0
MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEN1c3RvbVRv
SlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVz
cGFjZT1KU0MKLV0gaW50ZXJmYWNlIEFycmF5QnVmZmVyVmlldyB7Ci0gICAgcmVhZG9ubHkgYXR0
cmlidXRlIEFycmF5QnVmZmVyIGJ1ZmZlcjsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGJ5dGVMZW5ndGg7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3
LmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBW
YWx1ZSB7Ci0gICAgVCBkYXRhOwotICAgIGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YodWludDhfdCkpOwotICAgIGlm
ICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNy
ZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5
dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZzZXQoYnl0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50
MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hl
Y2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0
ICsgY2hlY2tlZExlbmd0aDsKLSAgICBpZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwg
Y2hlY2tlZE1heC51bnNhZmVHZXQoKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9m
ZnNldCwgYnl0ZUxlbmd0aCkpOwotfQotCi1EYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVu
Z3RoKQotICAgIDogQXJyYXlCdWZmZXJWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1f
Ynl0ZUxlbmd0aChieXRlTGVuZ3RoKQotewotfQotCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0
ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJu
IGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0gICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYK
LX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hh
ciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAqcTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2
b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsg
MSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAg
IHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0K
LXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRl
cyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVz
KHAgKyAyLCBwICsgNSk7Ci0gICAgc3dhcEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVkKGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBs
aXR0bGVFbmRpYW4pCi17Ci0gICAgaWYgKCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAg
ICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAg
ICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
NDoKLSAgICAgICAgZmxpcEJ5dGVzRm9yMzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSA4OgotICAgICAgICBmbGlwQnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6
Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7
Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2Ug
aXQgd291bGQgY2F1c2UgYSBidXMgZXJyb3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1
cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgotICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2
YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0
ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAgICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywg
c2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBUIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qg
d2FudCB0byBzdG9yZSB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1
cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3Rv
cmVzLgotICAgIFZhbHVlPFQ+IHRlbXBWYWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVl
OwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0
bGVFbmRpYW4pOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykg
KyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUuYnl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBE
YXRhVmlldzo6Z2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19
Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6OmdldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQs
IGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBy
ZXR1cm4gZ2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0K
LQotdWludDE2X3QgRGF0YVZpZXc6OmdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8
dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERh
dGFWaWV3OjpnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9m
ZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50
MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBnZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVF
bmRpYW4sIGVjKTsKLX0KLQotZmxvYXQgRGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
ZG91YmxlIERhdGFWaWV3OjpnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3Vi
bGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50
OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBzaG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFs
dWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1
ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBzZXREYXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxmbG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIHNldERhdGE8ZG91YmxlPihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJW
aWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5dGVMZW5ndGggPSAwOwotfQotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERhdGFWaWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAot
Ci0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5n
dGg7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBz
bGljZShpbnQsIGludCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWlu
dDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0
SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdl
dEludDE2KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdWludDE2X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBnZXRVaW50MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVp
bnQxNl90IGdldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7IH0KLSAgICBpbnQzMl90IGdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZs
b2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMp
OyB9Ci0gICAgZG91YmxlIGdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBi
eXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVp
bnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2
KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykg
eyBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNl
dFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVP
ZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBm
YWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWlu
dDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25D
b2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0g
ICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29s
IGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZs
b2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwg
RXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlRGF0YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRlcigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRl
TGVuZ3RoKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5
b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9mZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+
PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9mZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0
ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1
bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIERhdGFWaWV3X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRh
Vmlldy5pZGwJKHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0RhdGFWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwot
ICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIEN1c3Rv
bUNvbnN0cnVjdG9yKEFycmF5QnVmZmVyIGJ1ZmZlciwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBi
eXRlT2Zmc2V0LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGgpLAotICAgIEN1c3Rv
bVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcwotXSBpbnRlcmZhY2UgRGF0YVZpZXcg
OiBBcnJheUJ1ZmZlclZpZXcgewotICAgIC8vIEFsbCB0aGVzZSBtZXRob2RzIHJhaXNlIGFuIGV4
Y2VwdGlvbiBpZiB0aGV5IHdvdWxkIHJlYWQgb3Igd3JpdGUgYmV5b25kIHRoZSBlbmQgb2YgdGhl
IHZpZXcuCi0KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBieXRlIGdldEludDgodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0KTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSBvY3RldCBnZXRVaW50OCh1bnNp
Z25lZCBsb25nIGJ5dGVPZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSBzaG9ydCBnZXRJbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHVuc2lnbmVkIHNob3J0IGdldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVP
ZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGxvbmcgZ2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRl
T2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB1bnNpZ25lZCBsb25nIGdldFVpbnQzMih1bnNpZ25l
ZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLQotICAg
IC8vIFVzZSBjdXN0b20gY29kZSB0byBoYW5kbGUgTmFOIGNhc2UuCi0gICAgW0N1c3RvbSwgU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGZsb2F0IGdldEZsb2F0MzIodW5zaWdu
ZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAg
W0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIGRvdWJsZSBnZXRG
bG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVF
bmRpYW4pOwotCi0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgYnl0ZSB2YWx1ZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBz
ZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9jdGV0IHZhbHVlKTsKLQotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQxNih1bnNpZ25l
ZCBsb25nIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVu
ZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNl
dFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBv
cHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwg
bG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50MzIodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsb25nIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRs
ZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHNldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgb3B0aW9u
YWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZG91
YmxlIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci19OwotCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1
NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwot
ICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0
cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAg
IEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1
c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5
PWZsb2F0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgRmxv
YXQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZ
VEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKLSAgICBGbG9hdDMyQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVk
XSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGZsb2F0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsK
LQotICAgIC8vIHZvaWQgc2V0KEZsb2F0MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwJKHJldmlzaW9uIDE1
NDA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4
dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1U
eXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0
aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwK
LSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9ZG91YmxlLAotICAgIElt
cGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgRmxvYXQ2NEFycmF5IDogQXJy
YXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5U
ID0gODsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAg
ICBGbG9hdDY0QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwot
Ci0gICAgZ2V0dGVyIGRvdWJsZSAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lk
IHNldChGbG9hdDY0QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsK
LSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQg
bG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3Jr
ZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAg
Q3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAg
SlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tD
b25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlv
bk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7
Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50OEFycmF5IHN1
YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBieXRlICh1
bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDhBcnJheSBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNl
PGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBz
ZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZB
cnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29w
ZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhl
ZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1Rh
YmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0g
ICAgVHlwZWRBcnJheT1zaG9ydCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0g
aW50ZXJmYWNlIEludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2ln
bmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEludDE2QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBzaG9ydCAodW5zaWduZWQgbG9uZyBp
bmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQxNkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNp
Z25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXks
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFs
Q29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1w
bGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0
ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09i
amVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9aW50LAotICAg
IEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50MzJBcnJheSA6IEFy
cmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVO
VCA9IDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0g
ICAgSW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
c3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0g
ICAgZ2V0dGVyIGxvbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQo
SW50MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8v
IHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9VaW50OEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9VaW50OEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckds
b2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0
b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05v
U3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0
YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25O
YW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsK
LSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50OEFycmF5IHN1
YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwg
bG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQot
ICAgIC8vIHZvaWQgc2V0KFVpbnQ4QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwg
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAkocmV2aXNp
b24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJy
YXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwot
ICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0
cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAg
IEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1
c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5
PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVy
ZmFjZSBVaW50OENsYW1wZWRBcnJheSA6IFVpbnQ4QXJyYXkgewotICAgIGNvbnN0IHVuc2lnbmVk
IGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5IHN1YmFycmF5KFtEZWZh
dWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwot
Ci0gICAgZ2V0dGVyIG9jdGV0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIEZJWE1F
OiBNaXNzaW5nIG90aGVyIHNldHRlcnMhCi0gICAgLy8gdm9pZCBzZXQoVWludDhDbGFtcGVkQXJy
YXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNl
dChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWlu
dDE2QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Vp
bnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDE2QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxT
Y29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5k
ZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRp
Y1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMs
Ci0gICAgVHlwZWRBcnJheT11bnNpZ25lZCBzaG9ydCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVz
cGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQxNkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50MTZBcnJheSBzdWJh
cnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxv
bmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25lZCBzaG9ydCAodW5zaWduZWQgbG9uZyBpbmRl
eCk7Ci0KLSAgICAvLyB2b2lkIHNldChVaW50MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWdu
ZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBv
cHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAx
NTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2Jh
bENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVt
cGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJh
dGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNP
YmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVk
IGludCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQz
MkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVT
X1BFUl9FTEVNRU5UID0gNDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKLSAgICBVaW50MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNp
Z25lZCBsb25nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQz
MkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9p
ZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTU0MDY0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOCBAQAogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5o
IgogI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCiAKKyNpbmNsdWRlIDxydW50aW1l
L09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KQEAgLTM0MTUsNyArMzQxNyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAvLyBWYWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlw
ZS4KLSAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWlu
dDgpIHsKKyAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUxNTYsNyArNTE1OCw3IEBAIGJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OCkgeworICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4
QXJyYXkiKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTE2NCwx
MyArNTE2NiwxMyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAocGl4
ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2KSB7CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKICAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50MTZBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZm
ZXJWaWV3OjpUeXBlRmxvYXQzMikgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0g
SlNDOjpUeXBlRmxvYXQzMikgewogICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FU
IGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJheSIpOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCShyZXZpc2lv
biAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDE0ICs0MSw3IEBAIG5hbWVzcGFjZSB7CiAKIGJvb2wgaXNJbnRlZ2VyQXJyYXko
QXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKIHsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBl
IHR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAgIHJldHVybiB0eXBlID09IEFycmF5QnVmZmVy
Vmlldzo6VHlwZUludDgKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5
cGVVaW50OAotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4
Q2xhbXBlZAotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2
Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2Ci0gICAg
ICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzIKLSAgICAgICAgICAg
fHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MzI7CisgICAgcmV0dXJuIEpTQzo6
aXNJbnQoYXJyYXktPmdldFR5cGUoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbQkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIK
LSNpbXBvcnQgIkRhdGFWaWV3LmgiCiAjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIu
aCIKICNpbXBvcnQgIkZsb2F0Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9u
LmgiCkBAIC00Nyw2ICs0Niw5IEBACiAjaW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIu
aCIKICNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPG9iamMvcnVu
dGltZS5oPgorI2ltcG9ydCA8cnVudGltZS9EYXRhVmlldy5oPgorI2ltcG9ydCA8cnVudGltZS9P
cGVyYXRpb25zLmg+CisjaW1wb3J0IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW1w
b3J0IDxydW50aW1lL1VpbnQxNkFycmF5Lmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQzMkFycmF5
Lmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KQEAgLTkyMyw4ICs5MjUsOCBAQCBi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAgIC8vIFs0IGJ5
dGVzOiBrZXlVUkkgc2l6ZV0sIFtrZXlVUkkgc2l6ZSBieXRlczoga2V5VVJJXQogICAgICAgICB1
bnNpZ25lZCBrZXlVUklTaXplID0ga2V5VVJJLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAg
ICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBpbml0RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGUoNCArIGtleVVSSVNpemUsIDEpOwotICAgICAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXRE
YXRhVmlldyA9IERhdGFWaWV3OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpbml0RGF0YVZpZXctPnNldFVpbnQzMigwLCBr
ZXlVUklTaXplLCB0cnVlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAgUmVmUHRyPEpTQzo6
RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1
ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGluaXREYXRh
Vmlldy0+c2V0PHVpbnQzMl90PigwLCBrZXlVUklTaXplLCB0cnVlKTsKIAogICAgICAgICBSZWZQ
dHI8VWludDE2QXJyYXk+IGtleVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0
YUJ1ZmZlciwgNCwga2V5VVJJLmxlbmd0aCgpKTsKICAgICAgICAga2V5VVJJQXJyYXktPnNldFJh
bmdlKGtleVVSSS5jaGFyYWN0ZXJzKCksIGtleVVSSS5sZW5ndGgoKSAvIHNpemVvZih1bnNpZ25l
ZCBjaGFyKSwgMCk7CkBAIC0xMjA0LDEzICsxMjA2LDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVm
ZmVyID0gaW5pdERhdGEtPmJ1ZmZlcigpOwogCiAgICAgLy8gVXNlIGEgRGF0YVZpZXcgdG8gcmVh
ZCB1aW50MzIgdmFsdWVzIGZyb20gdGhlIGJ1ZmZlciwgYXMgVWludDMyQXJyYXkgcmVxdWlyZXMg
dGhlIHJlYWRzIGJlIGFsaWduZWQgb24gNC1ieXRlIGJvdW5kYXJpZXMuIAotICAgIFJlZlB0cjxE
YXRhVmlldz4gaW5pdERhdGFWaWV3ID0gRGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwg
MCwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgUmVmUHRyPEpTQzo6RGF0YVZp
ZXc+IGluaXREYXRhVmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwg
MCwgaW5pdERhdGFCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAgICAgdWludDMyX3Qgb2Zmc2V0ID0g
MDsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIHN0YXR1cyA9IHRydWU7CiAK
LSAgICB1aW50MzJfdCBrZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZz
ZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBrZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXct
PmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsK
LSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgp
KQorICAgIGlmICghc3RhdHVzIHx8IG9mZnNldCArIGtleVVSSUxlbmd0aCA+IGluaXREYXRhLT5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5
PiBrZXlVUklBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNl
dCwga2V5VVJJTGVuZ3RoKTsKQEAgLTEyMjAsOSArMTIyMiw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICBrZXlVUkkgPSBTdHJpbmcoa2V5VVJJQXJyYXkt
PmRhdGEoKSwga2V5VVJJTGVuZ3RoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zm
c2V0ICs9IGtleVVSSUxlbmd0aDsKIAotICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERh
dGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBlYyk7CisgICAgdWludDMyX3Qga2V5SURM
ZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVz
KTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGgg
PiBpbml0RGF0YS0+bGVuZ3RoKCkpCisgICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5SURM
ZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFJlZlB0cjxVaW50MTZBcnJheT4ga2V5SURBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5p
dERhdGFCdWZmZXIsIG9mZnNldCwga2V5SURMZW5ndGgpOwpAQCAtMTIzMiw5ICsxMjM0LDkgQEAg
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleUlEID0gU3Ry
aW5nKGtleUlEQXJyYXktPmRhdGEoKSwga2V5SURMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpKTsKICAgICBvZmZzZXQgKz0ga2V5SURMZW5ndGg7CiAKLSAgICB1aW50MzJfdCBjZXJ0aWZp
Y2F0ZUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOwor
ICAgIHVpbnQzMl90IGNlcnRpZmljYXRlTGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMy
X3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVj
IHx8IG9mZnNldCArIGNlcnRpZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAg
IGlmICghc3RhdHVzIHx8IG9mZnNldCArIGNlcnRpZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxl
bmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjZXJ0aWZpY2F0ZSA9IFVpbnQ4
QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBjZXJ0aWZpY2F0ZUxlbmd0aCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9t
RmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEyICszNyw5IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
RmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8
cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAot
bmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBVaW50OENsYW1wZWRBcnJheTsKLX0KLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDdXN0b21GaWx0ZXJSZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVz
c2lhbkJsdXIuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsOCBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJU
ZXh0U3RyZWFtLmgiCiAKKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENs
YW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1BhcmFsbGVsSm9icy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gMTU0MDY0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiRmlsdGVy
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisj
aW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAog
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja0NETS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNLmNwcAkocmV2aXNpb24gMTU0MDY0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2Nr
Q0RNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ0RN
LmgiCiAjaW5jbHVkZSAiTWVkaWFLZXlFcnJvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0
aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRl
IDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU0MDY4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRl
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBZ
b3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIEpTVWludDhBcnJheSBhbnltb3JlIGlmIHlvdSBqdXN0
IHdhbnQgdG8KKyAgICAgICAgdW53cmFwIG9uZTsgSlNET01CaW5kaW5nIGdpdmVzIHlvdSBhbGwg
b2YgdGhlIHRoaW5ncyB5b3UgbmVlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorCiAyMDEzLTA4LTE0ICBUaW0gSG9ydG9uICA8dGlt
b3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNTM4NzcpOiBQ
bHVnaW4gc2Nhbm5pbmcgc2xvd3MgY3JlYXRpb24gb2YgV2ViVmlld3MKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxNTQwNjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTTm90
aWZpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CkluZGV4OiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJv
bHMuZmlsdGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJ
KHJldmlzaW9uIDE1NDA2NCkKKysrIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJKHdv
cmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNiBAQCBfWk43V2ViQ29yZTlGcmFtZVZpZXcxN3Nl
dFRyYWNrc1JlcGFpbnRzCiBfWk5LN1dlYkNvcmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNB
c1RleHRFdjsKIF9aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEVQTjNXVEYxMUFycmF5QnVmZmVyRTsKIF9aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjZyZWxvYWRFYjsKLV9aTjdXZWJDb3JlMTN0b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFOwog
X1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS05TXzExTGF5b3V0UG9pbnRFampqajsKIF9a
TjdXZWJDb3JlMTVIaXRUZXN0TG9jYXRpb24xMnJlY3RGb3JQb2ludEVSS05TXzExTGF5b3V0UG9p
bnRFampqajsKIF9aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVJLTjNX
VEY2U3RyaW5nRTsKQEAgLTMwNyw4ICszMDYsNiBAQCBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExp
c3RDMUVSS04zV1RGNlZlCiBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RGNlZl
Y3RvcklOU185RmxvYXRRdWFkRUxqMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUU7CiBfWk43V2Vi
Q29yZTEwVGltZVJhbmdlczNhZGRFZGQ7CiBfWk43V2ViQ29yZTEydG9UaW1lUmFuZ2VzRU4zSlND
N0pTVmFsdWVFOwotX1pON1dlYkNvcmUxNHRvRmxvYXQzMkFycmF5RU4zSlNDN0pTVmFsdWVFOwot
X1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0
RVBOUzBfMTFBcnJheUJ1ZmZlckU7CiBfWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVF
UE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0U7CiBfWk5LN1dlYkNvcmUx
MFRpbWVSYW5nZXM3bmVhcmVzdEVkOwogX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTlyZWN0
QmFzZWRUZXN0UmVzdWx0RXY7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwODcpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MyBAQAorMjAxMy0wOC0x
NCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5
cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
KworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91
dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kYXRh
LXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Nj
cmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzOgorICAgICAgICAo
Y2hlY2tWaWV3KToKKyAgICAgICAgKiBmYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1m
dW5jdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVj
dG9yLWFzLWEtZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiBmYXN0L2pzL2NvbnN0cnVjdG9yLWxl
bmd0aC5odG1sOgorICAgICAgICAqIGZhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1
dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvZ2xv
YmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2VyLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9j
LWh1Z2UtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mv
QXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5
LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVy
LUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1J
bnQ4QXJyYXktdmlldy1hbGxvYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJh
eS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2
ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJB
cnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sb25n
LWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5
LWFsbG9jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qczogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1s
aXZlZC1idWZmZXIuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuanM6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmct
bGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
SW50MzJBcnJheS1hbGxvYy1odWdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlL3R5cGVkYXJyYXlzL2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKyAgICAgICAgKiB3ZWJnbC9y
ZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRhLXZp
ZXctdGVzdC5odG1sOgorCiAyMDEzLTA4LTE0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBh
cHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTgxNz4gQVg6IElu
dGVncmF0ZSBsYXlvdXQgdGVzdHMgZnJvbSBvdmVyZmxvdyBib3VuZGluZyBib3hlcyBhcmUgd2F5
IHRvbyBiaWc7IHByZXZlbnRzIFZvaWNlT3ZlciB0YXBzIGZyb20gYWN0aXZhdGluZyB0aGUgcmln
aHQgZWxlbWVudHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNl
dC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LWludmFsaWQtYXJndW1lbnRzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktc2V0LWludmFsaWQtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMiwyNyArMiwyNyBAQCBWZXJpZmllcyB0aGF0IGF0dGVtcHRpbmcgdG8gc2V0IGludmFsaWQg
CiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBl
ZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZh
bGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRB
cnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50
cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJh
eSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4u
Ci1QQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVu
b3VnaCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXku
c2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBv
dXQgb2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8g
d29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFT
UyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJh
eS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBh
cmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXku
c2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1Q
QVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFT
UyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChv
dGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9m
IHJhbmdlLi4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdo
ZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNo
b3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQg
bGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1Mg
dHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Rmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQo
b3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rp
bmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJy
YXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25l
IGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFT
UyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5k
cy4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBl
Y3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3
b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBi
ZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRB
cnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3Qg
YXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJB
cnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Yg
b2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBl
ZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BB
U1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBv
YmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBv
dXQgb2YgYm91bmRzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtb3V0
LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtb3V0
LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsMjYgKzQsMjYgQEAg
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiBSZWdyZXNzaW9uIHRl
c3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzM1MiA6IFBh
c3NpbmcgYXJyYXkgdGhhdCBpcyB0b28gbGFyZ2UgdG8gc2V0IG1ldGhvZCBvZiBXZWJHTEFycmF5
cyBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KIFRlc3RpbmcgSW50OEFycmF5Ci1QQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4
IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcg
ZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdM
QXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNv
bnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0
aW5nIFVpbnQ4QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJh
eS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0
IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUg
b3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcy4KIFRlc3RpbmcgSW50MTZBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2Yg
cmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChb
NCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9m
IG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5n
IG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50MTZB
cnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwg
NSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2Uu
LgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91
bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2Yg
Ym91bmRzLgogVGVzdGluZyBJbnQzMkFycmF5Ci1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwg
MSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1Q
QVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6
IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFu
ZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2
XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0
IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0aW5nIFVpbnQzMkFycmF5Ci1QQVNT
IHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IElu
ZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNT
IHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJh
bmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBU
ZXN0aW5nIEZsb2F0MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJH
TEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBp
cyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVu
Z3RoIGFyZSBvdXQgb2YgYm91bmRzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJh
eS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0
MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsMTkgKzQsOSBAQCBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIFBBU1MgdGVzdFNsaWNlCiB0ZXN0IGluaGVy
aXRhbmNlIGhpZXJhcmNoeSBvZiB0eXBlZCBhcnJheSB2aWV3cwotUEFTUyBBcnJheUJ1ZmZlclZp
ZXcgZG9lcyBub3QgaGF2ZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSBh
bmQgc2hvdWxkIGJlIGRlZmluZWQKLVBBU1MgbmV3IEludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFy
cmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50OEFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGlu
c3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEludDE2QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgVWludDE2QXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgSW50MzJBcnJh
eSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50MzJB
cnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBGbG9h
dDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcg
RmxvYXQ2NEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1Mg
bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZp
ZXcgaXMgdHJ1ZQotUEFTUyBuZXcgQXJyYXlCdWZmZXJWaWV3KCkgdGhyZXcgVHlwZUVycm9yCi1Q
QVNTIG5ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgaXMgdHJ1
ZQorUEFTUyBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMKK1dBUk46
IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzCitQQVNTIG5ldyBVaW50OENsYW1w
ZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgaXMgZmFsc2UKIFBBU1MgdGVzdCBGbG9h
dDMyQXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCiBQQVNTIHRlc3QgRmxvYXQzMkFycmF5IENv
bnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCiBQQVNTIHRlc3QgRmxvYXQzMkFycmF5IENv
bnN0cnVjdFdpdGhUeXBlZEFycmF5T2ZTaWduZWRWYWx1ZXMKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHJldmlzaW9u
IDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVz
dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDI2ICsxMTksMTIgQEAgZnVuY3Rpb24gdGVz
dEluaGVyaXRhbmNlSGllcmFyY2h5KCkgewogCiAgIHRyeSB7CiAgICAgdmFyIGZvbyA9IEFycmF5
QnVmZmVyVmlldzsKLSAgICB0ZXN0UGFzc2VkKCdBcnJheUJ1ZmZlclZpZXcgZG9lcyBub3QgaGF2
ZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSBhbmQgc2hvdWxkIGJlIGRl
ZmluZWQnKTsKLQotICAgIHNob3VsZEJlKCduZXcgSW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJy
YXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQ4QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcg
VWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScp
OwotICAgIHNob3VsZEJlKCduZXcgSW50MTZBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVy
VmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50MTZBcnJheSgxKSBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBJbnQzMkFy
cmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRC
ZSgnbmV3IFVpbnQzMkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUn
KTsKLSAgICBzaG91bGRCZSgnbmV3IEZsb2F0MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVm
ZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDY0QXJyYXkoMSkgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRGF0
YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0
cnVlJyk7Ci0KLSAgICBzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsgbmV3IEFycmF5
QnVmZmVyVmlldygpIH0sICJuZXcgQXJyYXlCdWZmZXJWaWV3KCkiKTsKKyAgICB0ZXN0RmFpbGVk
KCJBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBidXQgaXMgZGVmaW5lZCIpOwog
ICB9IGNhdGNoIChlKSB7Ci0gICAgdGVzdEZhaWxlZCgnQXJyYXlCdWZmZXJWaWV3IGRvZXMgbm90
IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYnV0IHdhcyBub3Qg
ZGVmaW5lZCcpOworICAgIHRlc3RQYXNzZWQoJ0FycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgdW5k
ZWZpbmVkIGFuZCBpcycpOwogICB9CiAKLSAgLy8gVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgb25l
IGtpbmQgb2YgdmlldyB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlcgotICBzaG91bGRCZSgnbmV3
IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScsICd0cnVlJyk7Cisg
IHNob3VsZEJlKCduZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50OEFycmF5
JywgZmFsc2UpOwogfQogCiAvLwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
ZGF0YS12aWV3LWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
NTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDggKzIsOCBAQCBUZXN0IHRoYXQgRGF0
YVZpZXcgZG9lcyBub3QgY3Jhc2ggd2l0aCBiCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
IAotUEFTUyB2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5LmJ1ZmZlciwgLTQ1MDAwMDAwMDApIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRp
dmUpLi4KLVBBU1MgdmlldyA9IG5ldyBEYXRhVmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAw
LCA0NTAwMDAwMDAwKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogU2l6ZSBpcyB0b28gbGFy
Z2UgKG9yIGlzIG5lZ2F0aXZlKS4uCitQQVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVm
ZmVyLCAtNDUwMDAwMDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEJ5dGUgb2Zmc2V0
IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlci4KK1BBU1MgdmlldyA9IG5ldyBEYXRh
VmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAwLCA0NTAwMDAwMDAwKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVm
ZmVyLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZm
ZXItdHJhbnNmZXItb2YtY29udHJvbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJv
bC5qcwkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
c2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEzLDYgKzEzLDcgQEAgdmFyIGJhc2ljQnVmZmVyVHlwZXMgPQogICAgIFsiVWlu
dDMyIiwgVWludDMyQXJyYXksIDRdLAogICAgIFsiSW50OCIsIEludDhBcnJheSwgMV0sCiAgICAg
WyJVaW50OCIsIFVpbnQ4QXJyYXksIDFdLAorICAgIFsiVWludDhDbGFtcGVkIiwgVWludDhDbGFt
cGVkQXJyYXksIDFdLAogICAgIFsiSW50MTYiLCBJbnQxNkFycmF5LCAyXSwKICAgICBbIlVpbnQx
NiIsIFVpbnQxNkFycmF5LCAyXSwKICAgICBbIkZsb2F0MzIiLCBGbG9hdDMyQXJyYXksIDRdLApA
QCAtMjAwLDcgKzIwMSw3IEBAIGZ1bmN0aW9uIGNoZWNrVmlldyh0ZXN0TmFtZSwgdHlwZWRBcnJh
eVQKICAgICB9CiAgICAgaWYgKHZpZXcuYnVmZmVyLmJ5dGVMZW5ndGggIT09IGFycmF5U2l6ZSB8
fAogICAgICAgICAoISh2aWV3IGluc3RhbmNlb2YgRGF0YVZpZXcpICYmIHZpZXcubGVuZ3RoICE9
PSBhcnJheUVmZmVjdGl2ZVNpemUgLyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5UKSkgewotICAgICAg
ICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBoYXMgdGhlIHdyb25nIGxlbmd0aCAoIiAr
IHZpZXcubGVuZ3RoICsgIikiKTsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZp
ZXcgaGFzIHRoZSB3cm9uZyBsZW5ndGggKCIgKyB2aWV3Lmxlbmd0aCArICIgaW5zdGVhZCBvZiAi
ICsgYXJyYXlFZmZlY3RpdmVTaXplICsgIiAvICIgKyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5UICsg
IikiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAodmlldy5ieXRlT2Zm
c2V0ICE9PSBhcnJheU9mZnNldCkgewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1h
LWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1h
LWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0zLDI1ICszLDE1IEBAIFRoaXMgdGVzdHMgaWYgVHlwZUVycm9yIGlzIHRocm93biBvciBub3QK
IE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIEFycmF5QnVmZmVyKCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5j
dGlvbiAoZXZhbHVhdGluZyAnQXJyYXlCdWZmZXIoKScpLgogU0tJUCBBdWRpb0NvbnRleHQgaXMg
bm90IGltcGxlbWVudGVkLgogUEFTUyBGb3JtRGF0YSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEZvcm1EYXRhQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0Zv
cm1EYXRhKCknKS4KLVBBU1MgRGF0YVZpZXcoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBE
YXRhVmlld0NvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdEYXRhVmll
dygpJykuCiBQQVNTIEV2ZW50U291cmNlKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXZl
bnRTb3VyY2VDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnRXZlbnRT
b3VyY2UoKScpLgogUEFTUyBGaWxlUmVhZGVyKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
RmlsZVJlYWRlckNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdGaWxl
UmVhZGVyKCknKS4KLVBBU1MgRmxvYXQzMkFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogRmxvYXQzMkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcg
J0Zsb2F0MzJBcnJheSgpJykuCi1QQVNTIEZsb2F0NjRBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFs
dWF0aW5nICdGbG9hdDY0QXJyYXkoKScpLgogUEFTUyBBdWRpbygpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEF1ZGlvQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcg
J0F1ZGlvKCknKS4KIFBBU1MgSW1hZ2UoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbWFn
ZUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbWFnZSgpJykuCiBQ
QVNTIE9wdGlvbigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbkNvbnN0cnVjdG9y
IGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdPcHRpb24oKScpLgotUEFTUyBJbnQxNkFy
cmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50MTZBcnJheUNvbnN0cnVjdG9yIGlz
IG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbnQxNkFycmF5KCknKS4KLVBBU1MgSW50MzJB
cnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDMyQXJyYXlDb25zdHJ1Y3RvciBp
cyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnSW50MzJBcnJheSgpJykuCi1QQVNTIEludDhB
cnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDhBcnJheUNvbnN0cnVjdG9yIGlz
IG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbnQ4QXJyYXkoKScpLgogUEFTUyBNZXNzYWdl
Q2hhbm5lbCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE1lc3NhZ2VDaGFubmVsQ29uc3Ry
dWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ01lc3NhZ2VDaGFubmVsKCknKS4K
IFBBU1MgU2hhcmVkV29ya2VyKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogU2hhcmVkV29y
a2VyQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1NoYXJlZFdvcmtl
cigpJykuCi1QQVNTIFVpbnQxNkFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVWlu
dDE2QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnVWludDE2
QXJyYXkoKScpLgotUEFTUyBVaW50MzJBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IFVpbnQzMkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1Vp
bnQzMkFycmF5KCknKS4KLVBBU1MgVWludDhBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IFVpbnQ4QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAn
VWludDhBcnJheSgpJykuCiBQQVNTIFdlYktpdENTU01hdHJpeCgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdXZWJLaXRDU1NNYXRyaXgoKScpLgogUEFTUyBXZWJLaXRQb2ludCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFdlYktpdFBvaW50Q29uc3RydWN0b3IgaXMgbm90IGEgZnVu
Y3Rpb24gKGV2YWx1YXRpbmcgJ1dlYktpdFBvaW50KCknKS4KIFBBU1MgV2ViU29ja2V0KCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogV2ViU29ja2V0Q29uc3RydWN0b3IgaXMgbm90IGEgZnVu
Y3Rpb24gKGV2YWx1YXRpbmcgJ1dlYlNvY2tldCgpJykuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLmh0
bWwJKHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25z
dHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBA
CiAKIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGlmIFR5cGVFcnJvciBpcyB0aHJvd24gb3Igbm90
IHdoZW4gd2UgY2FsbCBhIGNvbnN0cnVjdG9yIGFzIGEgbm9ybWFsIGZ1bmN0aW9uLiIpOwogCi12
YXIgdGVzdF9jb25zdHJ1Y3RvcnMgPSBbIkFycmF5QnVmZmVyIiwgIkF1ZGlvQ29udGV4dCIsICJG
b3JtRGF0YSIsICJEYXRhVmlldyIsICJFdmVudFNvdXJjZSIsICJGaWxlUmVhZGVyIiwgIkZsb2F0
MzJBcnJheSIsICJGbG9hdDY0QXJyYXkiLCAiQXVkaW8iLCAiSW1hZ2UiLCAiT3B0aW9uIiwgIklu
dDE2QXJyYXkiLCAiSW50MzJBcnJheSIsICJJbnQ4QXJyYXkiLCAiTWVzc2FnZUNoYW5uZWwiLCAi
U2hhcmVkV29ya2VyIiwgIlVpbnQxNkFycmF5IiwgIlVpbnQzMkFycmF5IiwgIlVpbnQ4QXJyYXki
LCAiV2ViS2l0Q1NTTWF0cml4IiwgIldlYktpdFBvaW50IiwgIldlYlNvY2tldCIsICJXb3JrZXIi
LCAiWE1MSHR0cFJlcXVlc3QiLCAiWFNMVFByb2Nlc3NvciJdOwordmFyIHRlc3RfY29uc3RydWN0
b3JzID0gWyJBdWRpb0NvbnRleHQiLCAiRm9ybURhdGEiLCAiRXZlbnRTb3VyY2UiLCAiRmlsZVJl
YWRlciIsICJBdWRpbyIsICJJbWFnZSIsICJPcHRpb24iLCAiTWVzc2FnZUNoYW5uZWwiLCAiU2hh
cmVkV29ya2VyIiwgIldlYktpdENTU01hdHJpeCIsICJXZWJLaXRQb2ludCIsICJXZWJTb2NrZXQi
LCAiV29ya2VyIiwgIlhNTEh0dHBSZXF1ZXN0IiwgIlhTTFRQcm9jZXNzb3IiXTsKIAogdGVzdF9j
b25zdHJ1Y3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RydWN0b3IpIHsKICAgICBpZiAoZXZh
bCgid2luZG93LiIgKyBjb25zdHJ1Y3RvcikpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Nv
bnN0cnVjdG9yLWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
Y29uc3RydWN0b3ItbGVuZ3RoLmh0bWwJKHJldmlzaW9uIDE1NDA2NCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDE4
ICsxNSwxOCBAQCBzaG91bGRCZSgnQ2xvc2VFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUo
J0N1c3RvbUV2ZW50Lmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnRE9NRm9ybURhdGEubGVuZ3Ro
JywgJzAnKTsKIHNob3VsZEJlKCdET01QYXJzZXIubGVuZ3RoJywgJzAnKTsKLXNob3VsZEJlKCdE
YXRhVmlldy5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ0RhdGFWaWV3Lmxlbmd0aCcsICczJyk7
CiBzaG91bGRCZSgnRXJyb3JFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0V2ZW50Lmxl
bmd0aCcsICcxJyk7CiBzaG91bGRCZSgnRXZlbnRTb3VyY2UubGVuZ3RoJywgJzEnKTsKLXNob3Vs
ZEJlKCdGbG9hdDMyQXJyYXkubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdGbG9hdDY0QXJyYXku
bGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdGbG9hdDMyQXJyYXkubGVuZ3RoJywgJzMnKTsKK3No
b3VsZEJlKCdGbG9hdDY0QXJyYXkubGVuZ3RoJywgJzMnKTsKIHNob3VsZEJlKCdGaWxlUmVhZGVy
Lmxlbmd0aCcsICcwJyk7CiBzaG91bGRCZSgnRmlsZVJlYWRlclN5bmMubGVuZ3RoJywgJzAnKTsK
IHNob3VsZEJlKCdIYXNoQ2hhbmdlRXZlbnQubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdJbnQx
NkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnSW50MzJBcnJheS5sZW5ndGgnLCAnMScp
Owotc2hvdWxkQmUoJ0ludDhBcnJheS5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ0ludDE2QXJy
YXkubGVuZ3RoJywgJzMnKTsKK3Nob3VsZEJlKCdJbnQzMkFycmF5Lmxlbmd0aCcsICczJyk7Citz
aG91bGRCZSgnSW50OEFycmF5Lmxlbmd0aCcsICczJyk7CiBzaG91bGRCZSgnSW50ZW50Lmxlbmd0
aCcsICczJyk7CiBzaG91bGRCZSgnTWVkaWFDb250cm9sbGVyLmxlbmd0aCcsICcwJyk7CiBzaG91
bGRCZSgnTWVkaWFTdHJlYW0ubGVuZ3RoJywgJzAnKTsKQEAgLTQyLDEwICs0MiwxMCBAQCBzaG91
bGRCZSgnU2hhcmVkV29ya2VyLmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnU3RvcmFnZUV2ZW50
Lmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnVGV4dFRyYWNrQ3VlLmxlbmd0aCcsICczJyk7CiBz
aG91bGRCZSgnVHJhY2tFdmVudC5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQxNkFycmF5
Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnVWludDMyQXJyYXkubGVuZ3RoJywgJzEnKTsKLXNo
b3VsZEJlKCdVaW50OEFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnVWludDhDbGFtcGVk
QXJyYXkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdVaW50MTZBcnJheS5sZW5ndGgnLCAnMycp
Oworc2hvdWxkQmUoJ1VpbnQzMkFycmF5Lmxlbmd0aCcsICczJyk7CitzaG91bGRCZSgnVWludDhB
cnJheS5sZW5ndGgnLCAnMycpOworc2hvdWxkQmUoJ1VpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCcs
ICczJyk7CiBzaG91bGRCZSgnV2ViR0xDb250ZXh0RXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3Vs
ZEJlKCdXZWJLaXRBbmltYXRpb25FdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1dlYktp
dENTU01hdHJpeC5sZW5ndGgnLCAnMCcpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZGVkaWNhdGVkLXdvcmtlci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0
dHJpYnV0ZXMtZGVkaWNhdGVkLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA2NCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRl
ZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDIxICs0LDEx
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBTdGFydGlu
ZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMuanMK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdB
cnJheUJ1ZmZlcicpLnZhbHVlIGlzIEFycmF5QnVmZmVyCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9w
ZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093blByb3BlcnR5KCdzZXQnKSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyJykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuY29u
ZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykudmFsdWUgaXMgQmxvYgogUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxv
YicpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmll
dycpLnZhbHVlIGlzIERhdGFWaWV3Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3Jyku
ZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZScpLnZhbHVlIGlzIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFs
c2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQpAQCAtMzksMzEgKzI5LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmls
ZVJlYWRlclN5bmMnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLnZhbHVlIGlzIEZsb2F0MzJBcnJheQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJB
cnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdGbG9hdDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLnZhbHVl
IGlzIEZsb2F0NjRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRB
cnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5jb25maWd1cmFibGUgaXMg
dHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ludDE2QXJyYXknKS52YWx1ZSBpcyBJbnQxNkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blBy
b3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS52YWx1ZSBpcyBJbnQzMkFycmF5Ci1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJh
eScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMy
QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLnZhbHVlIGlzIEludDhBcnJh
eQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0ludDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdJbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykudmFsdWUg
aXMgTWVzc2FnZUNoYW5uZWwKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdnZXQnKSBp
cyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkBA
IC03OSwyNiArNDQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
VVJMJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuZW51bWVyYWJsZSBpcyBm
YWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VSTCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS52YWx1ZSBpcyBVaW50
MTZBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2
QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmVudW1l
cmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJy
YXknKS52YWx1ZSBpcyBVaW50MzJBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDhBcnJheScpLnZhbHVlIGlzIFVpbnQ4QXJyYXkKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFz
T3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS52YWx1ZSBpcyBVaW50OENs
YW1wZWRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZh
bHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
OENsYW1wZWRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykudmFsdWUgaXMgV2ViU29ja2V0CiBQQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0
JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25z
dHJ1Y3RvcnMtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3Rv
cnMtYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgsMTYgKzgsNiBA
QCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQW5hbHlzZXJOb2RlJykuaGFzT3duUHJv
cGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQW5hbHlzZXJOb2RlJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmNvbmZp
Z3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnQXJyYXlCdWZmZXInKS52YWx1ZSBpcyBBcnJheUJ1ZmZlcgotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVy
dHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykudmFs
dWUgaXMgQXJyYXlCdWZmZXJWaWV3Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZh
bHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlC
dWZmZXJWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykuZW51bWVy
YWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0FycmF5QnVmZmVyVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXR0cicpLnZhbHVlIGlzIEF0dHIKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBdHRyJykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnQXR0cicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAt
MjYzLDExICsyNTMsNiBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
CiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRE9NVG9rZW5M
aXN0JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRE9NVG9rZW5MaXN0JykuZW51bWVyYWJsZSBpcyBm
YWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRv
a2VuTGlzdCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS52YWx1ZSBpcyBEYXRhVmlldwotUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdEYXRhVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVsYXlOb2RlJykudmFsdWUgaXMgRGVs
YXlOb2RlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVs
YXlOb2RlJykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVsYXlOb2RlJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCkBAIC0zNDgsMTYgKzMzMyw2IEBAIFBBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdGaWxlUmVhZGVyJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicp
LmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdGaWxlUmVhZGVyJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS52YWx1ZSBp
cyBGbG9hdDMyQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdGbG9hdDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1Q
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS52YWx1ZSBpcyBGbG9hdDY0QXJyYXkKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
bG9hdDY0QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRy
dWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2
ZW50JykudmFsdWUgaXMgRm9jdXNFdmVudAogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0ZvY3VzRXZlbnQnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFs
c2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2
ZW50JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkBAIC03NDgsMjEgKzcyMyw2IEBA
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbWFnZURhdGEnKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbWFnZURhdGEnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuY29uZmlndXJhYmxlIGlz
IHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykudmFsdWUgaXMgSW50MTZBcnJheQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMg
ZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmVudW1lcmFibGUgaXMg
ZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykudmFsdWUgaXMgSW50MzJBcnJheQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50
MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS52
YWx1ZSBpcyBJbnQ4QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5oYXNP
d25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuY29uZmln
dXJhYmxlIGlzIHRydWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdLZXlib2FyZEV2ZW50JykudmFsdWUgaXMgS2V5Ym9hcmRFdmVudAogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0tleWJvYXJkRXZlbnQnKS5oYXNPd25Q
cm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdLZXlib2FyZEV2ZW50JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZh
bHNlCkBAIC0xNzk4LDI2ICsxNzU4LDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsbwogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VSTCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQxNkFycmF5JykudmFsdWUgaXMgVWludDE2QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykudmFsdWUgaXMg
VWludDMyQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3du
UHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS52YWx1ZSBpcyBVaW50OEFycmF5Ci1QQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuZW51
bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykudmFsdWUg
aXMgVWludDhDbGFtcGVkQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4
Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dhdmVTaGFwZXJOb2RlJyku
dmFsdWUgaXMgV2F2ZVNoYXBlck5vZGUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdXYXZlU2hhcGVyTm9kZScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dhdmVT
aGFwZXJOb2RlJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2Vy
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1j
b25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0
dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQs
MjEgKzQsMTEgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiAK
IFN0YXJ0aW5nIHdvcmtlcjogc2NyaXB0LXRlc3RzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmli
dXRlcy5qcwotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyJykudmFsdWUgaXMgQXJyYXlCdWZmZXIKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhh
c093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZm
ZXInKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS52YWx1ZSBpcyBCbG9iCiBQQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMg
ZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdCbG9iJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0RhdGFWaWV3JykudmFsdWUgaXMgRGF0YVZpZXcKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdn
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0
YVZpZXcnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0V2ZW50U291cmNlJykudmFsdWUgaXMgRXZlbnRTb3VyY2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLmhhc093blBy
b3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0V2ZW50U291cmNlJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCkBAIC0zNCwzMSArMjQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdGaWxlUmVhZGVyU3luYycpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGaWxlUmVhZGVyU3luYycpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykudmFsdWUgaXMgRmxvYXQzMkFycmF5Ci1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5Jyku
aGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuZW51bWVyYWJsZSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0Zsb2F0MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5Jyku
dmFsdWUgaXMgRmxvYXQ2NEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQ2NEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MTZBcnJheScpLnZhbHVlIGlzIEludDE2QXJyYXkKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFz
T3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLnZhbHVlIGlzIEludDMyQXJyYXkKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQz
MkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW50MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykudmFsdWUgaXMgSW50
OEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnSW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5
JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuZW51bWVyYWJsZSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0ludDhBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS52
YWx1ZSBpcyBNZXNzYWdlQ2hhbm5lbAogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKQEAgLTc5LDI2ICs0NCw2IEBAIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3IKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdVUkwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5lbnVtZXJhYmxl
IGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVVJMJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLnZhbHVlIGlz
IFVpbnQxNkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5Jyku
ZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
MzJBcnJheScpLnZhbHVlIGlzIFVpbnQzMkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuY29uZmln
dXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OEFycmF5JykudmFsdWUgaXMgVWludDhBcnJheQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXkn
KS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFy
cmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLnZhbHVlIGlzIFVp
bnQ4Q2xhbXBlZEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0Jykg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQ4Q2xhbXBlZEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJTb2NrZXQnKS52YWx1ZSBpcyBXZWJTb2NrZXQKIFBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJT
b2NrZXQnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJTb2NrZXQnKS5oYXNPd25Q
cm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
aHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVn
ZS1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZl
ci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxs
b2MtbGFyZ2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1sYXJnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmct
bGl2ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1s
b25nLWxpdmVkLWJ1ZmZlcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVm
ZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bG9uZy1saXZlZC1idWZmZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQt
YnVmZmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVy
LUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZAorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxp
dmVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4
QXJyYXktdmlldy1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9JbnQzMkFycmF5
LUludDhBcnJheS12aWV3LWFsbG9jCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1J
bnQ4QXJyYXktdmlldy1hbGxvYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJh
eS12aWV3LWFsbG9jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJh
eS1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9JbnQzMkFycmF5LWFsbG9jCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWh1Z2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1odWdlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
SW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1o
dWdlLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5
LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2Mt
aHVnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1s
b25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1o
dWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1h
bGxvYy1sYXJnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1sYXJnZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1s
aXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFy
Z2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXkt
YWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxhcmdlLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJn
ZS1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJB
cnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZAorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJB
cnJheS1hbGxvYy1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9j
LWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAordmFyIGFy
cmF5ID0gbmV3IEFycmF5KDEwMDApOworCit2YXIgbiA9IDEwMDAwOworCitmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgIGFycmF5WyhpIC8gKG4gLyBhcnJheS5sZW5ndGgpKSB8IDBd
ID0gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTAwMDAwKSk7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVuZ3Ro
ICE9IDEwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsg
YXJyYXlbaV0ubGVuZ3RoOworICAgIGlmIChhcnJheVtpXS5idWZmZXIuYnl0ZUxlbmd0aCAhPSAx
MDAwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGJ1ZmZlciBsZW5ndGg6ICIg
KyBhcnJheVtpXS5idWZmZXIuYnl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdl
LWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZl
ZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5
Lmxlbmd0aF0gPSBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigxMDAwKSk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVu
Z3RoICE9IDEwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGxlbmd0aDogIiArIGFycmF5
W2ldLmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGggIT0gMTAwMCkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYnVmZmVyLmJ5dGVMZW5ndGg6ICIgKyBhcnJheVtp
XS5idWZmZXIuYnl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVm
ZmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9B
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3Ro
XSA9IG5ldyBJbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKDEwKSkuYnVmZmVyOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmJ5dGVM
ZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGJ5dGVMZW5ndGg6ICIgKyBh
cnJheVtpXS5ieXRlTGVuZ3RoOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
dmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCA3MDAw
MDsgKytpKQorICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IEludDhBcnJheShuZXcg
QXJyYXlCdWZmZXIoMTApKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsr
aSkgeworICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVm
ZmVyLmJ5dGVMZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGJ1ZmZlci5i
eXRlTGVuZ3RoOiAiICsgYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJh
eS1hbGxvYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNzAwMDA7ICsraSkKKyAgICBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigx
MCkpOworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0lu
dDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3
LWFsbG9jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMzAwMDA7ICsraSkgeworICAg
IHZhciBhcnJheTEgPSBuZXcgSW50MzJBcnJheSgxMCk7CisgICAgdmFyIGFycmF5MiA9IG5ldyBJ
bnQ4QXJyYXkoYXJyYXkxLmJ1ZmZlcik7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9J
bnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdl
LWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBhcnJheSA9
IG5ldyBBcnJheSgxMDAwKTsKKwordmFyIG4gPSAxMDAwMDsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICBhcnJheVsoaSAvIChuIC8gYXJyYXkubGVuZ3RoKSkgfCAwXSA9IG5l
dyBJbnQzMkFycmF5KDEwMDAwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVuZ3RoICE9IDEwMDAwMCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOworfQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5
LWFsbG9jLWh1Z2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2Mt
aHVnZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDA7ICsraSkKKyAgICBuZXcgSW50MzJBcnJheSgxMDAwMDAwKTsKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdl
LWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMy
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
IEBACit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQzMkFy
cmF5KDEwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Cisg
ICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCBhcnJheSBsZW5ndGg6ICIgKyBhcnJheVtpXS5sZW5ndGg7Cit9CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9J
bnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgKytpKQor
ICAgIG5ldyBJbnQzMkFycmF5KDEwMDAwKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJh
eS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwMCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwMDsgKytpKQorICAgIGFycmF5W2kgJSBhcnJh
eS5sZW5ndGhdID0gbmV3IEludDMyQXJyYXkoMTApOworCitmb3IgKHZhciBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFy
cmF5LWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDsgKytp
KQorICAgIG5ldyBJbnQzMkFycmF5KDEwKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTU0MDY0KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zh
c3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTEsMTggKzExLDE4IEBAIFBBU1MgQ2xvc2VFdmVudC5sZW5ndGggaXMgMQogUEFTUyBDdXN0b21F
dmVudC5sZW5ndGggaXMgMQogRkFJTCBET01Gb3JtRGF0YS5sZW5ndGggc2hvdWxkIGJlIDAuIFRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogRE9NRm9y
bURhdGEKIFBBU1MgRE9NUGFyc2VyLmxlbmd0aCBpcyAwCi1QQVNTIERhdGFWaWV3Lmxlbmd0aCBp
cyAxCitQQVNTIERhdGFWaWV3Lmxlbmd0aCBpcyAzCiBQQVNTIEVycm9yRXZlbnQubGVuZ3RoIGlz
IDEKIFBBU1MgRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgRXZlbnRTb3VyY2UubGVuZ3RoIGlzIDEK
LVBBU1MgRmxvYXQzMkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEZsb2F0NjRBcnJheS5sZW5ndGgg
aXMgMQorUEFTUyBGbG9hdDMyQXJyYXkubGVuZ3RoIGlzIDMKK1BBU1MgRmxvYXQ2NEFycmF5Lmxl
bmd0aCBpcyAzCiBQQVNTIEZpbGVSZWFkZXIubGVuZ3RoIGlzIDAKIEZBSUwgRmlsZVJlYWRlclN5
bmMubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENh
bid0IGZpbmQgdmFyaWFibGU6IEZpbGVSZWFkZXJTeW5jCiBQQVNTIEhhc2hDaGFuZ2VFdmVudC5s
ZW5ndGggaXMgMQotUEFTUyBJbnQxNkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEludDMyQXJyYXku
bGVuZ3RoIGlzIDEKLVBBU1MgSW50OEFycmF5Lmxlbmd0aCBpcyAxCitQQVNTIEludDE2QXJyYXku
bGVuZ3RoIGlzIDMKK1BBU1MgSW50MzJBcnJheS5sZW5ndGggaXMgMworUEFTUyBJbnQ4QXJyYXku
bGVuZ3RoIGlzIDMKIEZBSUwgSW50ZW50Lmxlbmd0aCBzaG91bGQgYmUgMy4gVGhyZXcgZXhjZXB0
aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBJbnRlbnQKIFBBU1MgTWVk
aWFDb250cm9sbGVyLmxlbmd0aCBpcyAwCiBGQUlMIE1lZGlhU3RyZWFtLmxlbmd0aCBzaG91bGQg
YmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBNZWRpYVN0cmVhbQpAQCAtMzgsMTAgKzM4LDEwIEBAIFBBU1MgU2hhcmVkV29ya2VyLmxlbmd0
aCBpcyAxCiBQQVNTIFN0b3JhZ2VFdmVudC5sZW5ndGggaXMgMQogUEFTUyBUZXh0VHJhY2tDdWUu
bGVuZ3RoIGlzIDMKIFBBU1MgVHJhY2tFdmVudC5sZW5ndGggaXMgMQotUEFTUyBVaW50MTZBcnJh
eS5sZW5ndGggaXMgMQotUEFTUyBVaW50MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBVaW50OEFy
cmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCBpcyAxCitQQVNT
IFVpbnQxNkFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIFVpbnQzMkFycmF5Lmxlbmd0aCBpcyAzCitQ
QVNTIFVpbnQ4QXJyYXkubGVuZ3RoIGlzIDMKK1BBU1MgVWludDhDbGFtcGVkQXJyYXkubGVuZ3Ro
IGlzIDMKIFBBU1MgV2ViR0xDb250ZXh0RXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgV2ViS2l0QW5p
bWF0aW9uRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgV2ViS2l0Q1NTTWF0cml4Lmxlbmd0aCBpcyAw
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS90eXBlZGFycmF5cy9hcnJheS11bml0LXRlc3RzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
dHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCShyZXZpc2lvbiAxNTQwNjQpCisrKyBM
YXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90
eXBlZGFycmF5cy9hcnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwy
NiArMTQ5LDEzIEBAIGZ1bmN0aW9uIHRlc3RJbmhlcml0YW5jZUhpZXJhcmNoeSgpIHsKIAogICB0
cnkgewogICAgIHZhciBmb28gPSBBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdGVzdFBhc3NlZCgnQXJy
YXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBh
dHRyaWJ1dGUgYW5kIHNob3VsZCBiZSBkZWZpbmVkJyk7Ci0KLSAgICBzaG91bGRCZSgnbmV3IElu
dDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hv
dWxkQmUoJ25ldyBVaW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3Ry
dWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IEludDE2QXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCdu
ZXcgVWludDE2QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwot
ICAgIHNob3VsZEJlKCduZXcgSW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmll
dycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50MzJBcnJheSgxKSBpbnN0YW5jZW9m
IEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDMyQXJy
YXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJl
KCduZXcgRmxvYXQ2NEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUn
KTsKLSAgICBzaG91bGRCZSgnbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFu
Y2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotCi0gICAgc2hvdWxkVGhyb3dUeXBlRXJy
b3IoZnVuY3Rpb24oKSB7IG5ldyBBcnJheUJ1ZmZlclZpZXcoKSB9LCAibmV3IEFycmF5QnVmZmVy
VmlldygpIik7CisgICAgdGVzdEZhaWxlZCgiQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRl
ZmluZWQgYnV0IGlzIGRlZmluZWQiKTsKICAgfSBjYXRjaCAoZSkgewotICAgIHRlc3RGYWlsZWQo
J0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5k
ZWQgYXR0cmlidXRlIGJ1dCB3YXMgbm90IGRlZmluZWQnKTsKKyAgICB0ZXN0UGFzc2VkKCJBcnJh
eUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMiKTsKICAgfQogCiAgIC8vIFRo
ZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBraW5kIG9mIHZpZXcgdGhhdCBpbmhlcml0cyBmcm9t
IGFub3RoZXIKLSAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9m
IFVpbnQ4QXJyYXknLCAndHJ1ZScpOworICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5
KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScsICdmYWxzZScpOwogfQogCiAvLwpJbmRleDogTGF5
b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlw
ZWRhcnJheXMvZGF0YS12aWV3LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9k
YXRhLXZpZXctdGVzdC5odG1sCShyZXZpc2lvbiAxNTQwNjQpCisrKyBMYXlvdXRUZXN0cy93ZWJn
bC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRh
LXZpZXctdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsOSArMjcwLDkgQEAgZnVuY3Rp
b24gcnVuQ29uc3RydWN0b3JUZXN0cygpCiAgICAgLy8gVXNlIHRyeS9jYXRjaCBpbnN0ZWFkIG9m
IGNhbGxpbmcgc2hvdWxkVGhyb3cgdG8gYXZvaWQgZGlmZmVyZW50IGV4Y2VwdGlvbiBtZXNzYWdl
IGJlaW5nIHJlcG9ydGVkIGZyb20gZGlmZmVyZW50IHBsYXRmb3JtLgogICAgIHRyeSB7CiAgICAg
ICAgIFRlc3RFdmFsKGV4cHIpOwotICAgICAgICB0ZXN0RmFpbGVkKGV4cHIgKyAiIGRvZXMgbm90
IHRocm93IGV4Y2VwdGlvbiIpOworICAgICAgICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHdvcmtzIik7
CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHRocmV3IGV4
Y2VwdGlvbiIpOworICAgICAgICB0ZXN0RmFpbGVkKGV4cHIgKyAiIHRocmV3IGV4Y2VwdGlvbiIp
OwogICAgIH0KIAogICAgIGRlYnVnKCIiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208791</attachid>
            <date>2013-08-14 22:38:22 -0700</date>
            <delta_ts>2013-08-14 23:59:50 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>749976</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA4
NykKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA4
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJy
YXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50
LgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMu
ZmlsdGVyOgorCiAyMDEzLTA4LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFVuLWlubGluZSBkYXRhTG9nIGR1bXBlcnMgZm9yIEludFNpemUgYW5k
IEludFBvaW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA4NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0NDQgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBUeXBlZCBhcnJheXMgd2Vy
ZSBwcmV2aW91c2x5IGRlZmljaWVudCBpbiBzZXZlcmFsIG1ham9yIHdheXM6CisgICAgICAgIAor
ICAgICAgICAtIFRoZXkgd2VyZSBkZWZpbmVkIHNlcGFyYXRlbHkgaW4gV2ViQ29yZSBhbmQgaW4g
dGhlIGpzYyBzaGVsbC4gVGhlIHR3bworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyB3ZXJlIGRp
ZmZlcmVudCwgYW5kIHRoZSBqc2Mgc2hlbGwgb25lIHdhcyBiYXNpY2FsbHkgd3JvbmcuCisgICAg
ICAgICAgVGhlIFdlYkNvcmUgb25lIHdhcyBxdWl0ZSBhd2Z1bCwgYWxzby4KKyAgICAgICAgCisg
ICAgICAgIC0gVHlwZWQgYXJyYXlzIHdlcmUgbm90IHZpc2libGUgdG8gdGhlIEpJVCBleGNlcHQg
dGhyb3VnaCBzb21lIHdlaXJkIGhvb2tzLgorICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgSklU
IGNvdWxkIG5vdCBhc2sgIndoYXQgaXMgdGhlIFN0cnVjdHVyZSB0aGF0IHRoaXMgdHlwZWQKKyAg
ICAgICAgICBhcnJheSB3b3VsZCBoYXZlIGlmIEkganVzdCBhbGxvY2F0ZWQgaXQgZnJvbSB0aGlz
IGdsb2JhbCBvYmplY3QiLiBBbHNvLAorICAgICAgICAgIGl0IHdhcyBkaWZmaWN1bHQgdG8gd2ly
ZSBhbnkgb2YgdGhlIHR5cGVkIGFycmF5IGludHJpbnNpY3MsIGJlY2F1c2UgbW9zdAorICAgICAg
ICAgIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdhc24ndCB2aXNpYmxlIGFueXdoZXJlIGluIEpTQy4K
KyAgICAgICAgCisgICAgICAgIC0gVHlwZWQgYXJyYXkgYWxsb2NhdGlvbiB3YXMgYnJhaW4tZGVh
ZC4gQWxsb2NhdGluZyBhIHR5cGVkIGFycmF5IGludm9sdmVkCisgICAgICAgICAgdHdvIEpTIG9i
amVjdHMsIHR3byBHQyB3ZWFrIGhhbmRsZXMsIGFuZCB0aHJlZSBtYWxsb2MgYWxsb2NhdGlvbnMu
CisgICAgICAgIAorICAgICAgICAtIE5ldXRlcmluZy4gSXQgaW52b2x2ZWQga2VlcGluZyB0YWJz
IG9uIGFsbCBuYXRpdmUgdmlld3MgYnV0IG5vdCB0aGUgdmlldworICAgICAgICAgIHdyYXBwZXJz
LCBldmVuIHRob3VnaCB0aGUgbmF0aXZlIHZpZXdzIGNhbiBhdXRvbmV1dGVyIGp1c3QgYnkgYXNr
aW5nIHRoZQorICAgICAgICAgIGJ1ZmZlciBpZiBpdCB3YXMgbmV1dGVyZWQgYW55dGltZSB5b3Ug
dG91Y2ggdGhlbTsgd2hpbGUgdGhlIEpTIHZpZXcKKyAgICAgICAgICB3cmFwcGVycyBhcmUgdGhl
IG9uZXMgdGhhdCB5b3UgcmVhbGx5IHdhbnQgdG8gcmVhY2ggb3V0IHRvLgorICAgICAgICAKKyAg
ICAgICAgLSBDb21tb24gY2FzZS1pbmcuIE1vc3QgdHlwZWQgYXJyYXlzIGhhdmUgb25lIGJ1ZmZl
ciBhbmQgb25lIHZpZXcsIGFuZAorICAgICAgICAgIHVzdWFsbHkgbm9ib2R5IHRvdWNoZXMgdGhl
IGJ1ZmZlci4gWWV0IHdlIGNyZWF0ZWQgYWxsIG9mIHRoYXQgc3R1ZmYKKyAgICAgICAgICBhbnl3
YXksIHVzaW5nIGRhdGEgc3RydWN0dXJlcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHlv
dSBoYWQgYSBsb3QKKyAgICAgICAgICBvZiB2aWV3cy4KKyAgICAgICAgCisgICAgICAgIC0gU2Vt
YW50aWMgZ29vZnMuIFR5cGVkIGFycmF5cyBzaG91bGQsIGluIHRoZSBmdXR1cmUsIGJlaGF2ZSBs
aWtlIEVTCisgICAgICAgICAgZmVhdHVyZXMgcmF0aGVyIHRoYW4gRE9NIGZlYXR1cmVzLCBmb3Ig
ZXhhbXBsZSB3aGVuIGl0IGNvbWVzIHRvIGV4Y2VwdGlvbnMuCisgICAgICAgICAgRmlyZWZveCBh
bHJlYWR5IGRvZXMgdGhpcyBhbmQgSSBhZ3JlZSB3aXRoIHRoZW0uCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhdGNoIGNsZWFuc2VzIG91ciBjb2RlYmFzZSBvZiB0aGVzZSBzaW5zOgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheXMgYXJlIGFsbW9zdCBlbnRpcmVseSBkZWZpbmVkIGlu
IEpTQy4gT25seSB0aGUgbGlmZWN5Y2xlCisgICAgICAgICAgbWFuYWdlbWVudCBvZiBuYXRpdmUg
cmVmZXJlbmNlcyB0byBidWZmZXJzIGlzIGxlZnQgdG8gV2ViQ29yZS4KKyAgICAgICAgCisgICAg
ICAgIC0gQWxsb2NhdGluZyBhIHR5cGVkIGFycmF5IHJlcXVpcmVzIGVpdGhlciB0d28gR0MgYWxs
b2NhdGlvbnMgKGEgY2VsbCBhbmQgYQorICAgICAgICAgIGNvcGllZCBzdG9yYWdlIHZlY3Rvcikg
b3Igb25lIEdDIGFsbG9jYXRpb24sIGEgbWFsbG9jIGFsbG9jYXRpb24sIGFuZCBhCisgICAgICAg
ICAgd2VhayBoYW5kbGUgKGEgY2VsbCBhbmQgYSBtYWxsb2MnZCBzdG9yYWdlIHZlY3RvciwgcGx1
cyBhIGZpbmFsaXplciBmb3IgdGhlCisgICAgICAgICAgbGF0dGVyKS4gVGhlIGxhdHRlciBpcyBv
bmx5IHVzZWQgZm9yIG92ZXJzaXplIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUKKyAgICAg
ICAgICBpdCB3YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAg
ICAgIC0gVHlwZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1
Y3R1cmUqLCBCdXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3Iu
IEJlZm9yZSBpdCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAg
ICB0aGVyZSB3ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkg
bm90aGluZyBmb3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFy
ZW4ndCB0cmFja2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUK
KyAgICAgICAgICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNo
IHRvIG5vdCBldmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAg
IAorICAgICAgICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBv
ZiB0cmFja2luZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3Ro
IGZvciBuZXV0ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAg
ICAgICAgIHNwZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBi
dW5jaCBvZiBncmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMg
dmlldyB3cmFwcGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAor
ICAgICAgICAgIHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5h
bGl6ZS4KKyAgICAgICAgCisgICAgICAgIC0gVHlwZWQgYXJyYXkgc2VtYW50aWNzIG5vdyBtYXRj
aCBGaXJlZm94LCB3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlCisgICAgICAgICAg
c3RhbmRhcmRzIGFyZSBnb2luZy4gVGhlIGRpc2N1c3Npb24gb24gd2Via2l0LWRldiBzZWVtZWQg
dG8gY29uZmlybSB0aGF0CisgICAgICAgICAgQ2hyb21lIGlzIGFsc28gaGVhZGluZyBpbiB0aGlz
IGRpcmVjdGlvbi4gVGhpcyBpbmNsdWRlcyBtYWtpbmcKKyAgICAgICAgICBVaW50OENsYW1wZWRB
cnJheSBub3QgYSBzdWJ0eXBlIG9mIFVpbnQ4QXJyYXksIGFuZCBnZXR0aW5nIHJpZCBvZgorICAg
ICAgICAgIEFycmF5QnVmZmVyVmlldyBhcyBhIEpTLXZpc2libGUgY29uc3RydWN0LgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBhID44eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxv
Y2F0ZSBhIGxvdCBvZiBzbWFsbCB0eXBlZCBhcnJheXMsCisgICAgICAgIGFuZCBhID42eCBzcGVl
ZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxvY2F0ZSBhIGxvdCBvZiBsYXJnZSBvbmVzLgorICAg
ICAgICAKKyAgICAgICAgQW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBvZiB0aGlzIHBhdGNoIGlzIHRo
YXQgdHlwZWQgYXJyYXlzIGFyZSBtb3N0bHkKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgdGVt
cGxhdGVzLiBUaGlzIGRlZHVwbGljYXRlcyBhIGJ1bmNoIG9mIGNvZGUsIGJ1dCBkb2VzIG1lYW4K
KyAgICAgICAgdGhhdCB3ZSBuZWVkIHNvbWUgaGFja3MgZm9yIGV4cG9ydGluZyBzX2luZm8ncyBv
ZiB0ZW1wbGF0ZSBjbGFzc2VzLiBTZWUKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCBhbmQgSlNUeXBlZEFycmF5cy5jcHAuIFRob3NlIGhhY2tzIGFyZSBmYWlybHkKKyAgICAgICAg
bG93LWltcGFjdCBjb21wYXJlZCB0byBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICAKKyAgICAg
ICAgQXV0b21ha2Ugd29yayBjb3VydGVzeSBvZiBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2Fs
aWEuY29tPi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
U0NUeXBlZEFycmF5U3R1YnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5VmFsSW5mby5oOgorICAgICAgICAoSlNDOjpoYXNPcHRpbWl6YWJsZUlu
ZGV4aW5nRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6aml0QXJyYXlNb2RlRm9yQ2xhc3NJ
bmZvKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3Vs
YXRpb25Gcm9tQ2xhc3NJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjp0b1R5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp0eXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db3B5VG9rZW4uaDoK
KyAgICAgICAgKiBoZWFwL0RlZmVyR0MuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJHQ0ZvckFXaGls
ZTo6RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgIChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6On5E
ZWZlckdDRm9yQVdoaWxlKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6fkdDSW5jb21p
bmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Om51bWJl
ck9mSW5jb21pbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50
ZWQ6OmluY29taW5nUmVmZXJlbmNlQXQpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291
bnRlZDo6c2luZ2xldG9uRmxhZyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVk
OjpoYXNWZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6
Omhhc0FueUluY29taW5nKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhh
c1NpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpzaW5nbGV0
b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6dmVjdG9yT2ZDZWxscyk6
CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Ojo6YWRkSW5jb21pbmdSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OmZp
bHRlckluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZFNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6
OnNpemUpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KToKKyAgICAg
ICAgKEpTQzo6Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQpOgorICAgICAgICAoSlNDOjo6OmFk
ZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6Ojo6c3dlZXApOgorICAgICAgICAoSlNDOjo6OnJl
bW92ZUFsbCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3ZlRGVhZCk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkUmVmZXJlbmNlKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZXh0cmFTaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6ZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnRyYW5zZmVy
KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyOjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OkFycmF5
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRl
cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpwaW4pOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6dW5waW4pOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlB
bGxvY2F0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAg
ICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojppc05ldXRlcmVkKToKKyAg
ICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlclZpZXc6OmJhc2VBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3
OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJS
YW5nZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Y2xhbXBPZmZzZXRBbmROdW1F
bGVtZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3LmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpEYXRhVmlldyk6CisgICAgICAgIChK
U0M6OkRhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6d3JhcCk6Cisg
ICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RGF0YVZp
ZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0VHlwZSk6CisgICAg
ICAgIChKU0M6OkRhdGFWaWV3OjpnZXQpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL0Zsb2F0MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvRmxv
YXQ2NEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6ZGF0YSk6CisgICAg
ICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRSYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBl
ZEFycmF5Vmlldzo6emVyb1JhbmdlKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3Ojp6ZXJvRmlsbCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6bGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppdGVtKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91bmREYXRhKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnN1YmFycmF5KToK
KyAgICAgICAgKEpTQzo6Ojp3cmFwKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVy
Lmg6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJheUJ1ZmZlcik6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQzMkFycmF5Lmg6CisgICAgICAg
ICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6cHV0KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjppbXBs
KToKKyAgICAgICAgKEpTQzo6dG9BcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVmZmVyUHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJWaWV3
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnNpemVPZik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojpv
cGVyYXRvciEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9u
Q29udGV4dDo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNv
bnN0cnVjdGlvbkNvbnRleHQ6OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bW9kZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpidXR0ZXJmbHkpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OmltcGwpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6
bmV1dGVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRUeXBlZEFycmF5
SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RGF0YVZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6SlNEYXRhVmll
dyk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpzZXQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3Ojp0eXBlZEltcGwpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0RhdGFW
aWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OmdldERhdGEp
OgorICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNik6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIpOgorICAgICAgICAoSlNDOjpk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMik6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3
UHJvdG9GdW5jU2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50
MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRV
aW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxv
YXQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0ZVNpemUpOgorICAgICAg
ICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlwZWRWZWN0b3IpOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhblNldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHlBc05h
dGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmdldElu
ZGV4UXVpY2tseUFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5BY2Nlc3NSYW5nZVF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlwZWRJbXBsKToKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppbmZvKToKKyAgICAgICAgKEpTQzo6dG9O
YXRpdmVUeXBlZFZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjo6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5
Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6
Ojo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnZhbGlkYXRlUmFuZ2UpOgorICAgICAgICAo
SlNDOjo6OnNldFdpdGhTcGVjaWZpY1R5cGUpOgorICAgICAgICAoSlNDOjo6OnNldCk6CisgICAg
ICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6
Ojo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6Ojo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6Ojo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
Ojo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ojo6Z2V0VHlwZWRBcnJh
eUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY1N1YmFycmF5KToKKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnR5cGVkQXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQx
NkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTVWludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAg
IChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKToKKyAgICAgICAgKiBydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y291bGRIYXZlSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBydW50aW1l
L1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6
OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgor
ICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChK
U0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4
Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRh
cHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlD
b250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFy
cmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmg6IFJlbW92
ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmNs
YXNzSW5mb0ZvclR5cGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjp0b0luZGV4
KToKKyAgICAgICAgKEpTQzo6aXNUeXBlZFZpZXcpOgorICAgICAgICAoSlNDOjplbGVtZW50U2l6
ZSk6CisgICAgICAgIChKU0M6OmlzSW50KToKKyAgICAgICAgKEpTQzo6aXNGbG9hdCk6CisgICAg
ICAgIChKU0M6OmlzU2lnbmVkKToKKyAgICAgICAgKEpTQzo6aXNDbGFtcGVkKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVWludDE2
QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQzMkFycmF5Lmg6CisgICAgICAgICogcnVu
dGltZS9VaW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAg
ICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTMtMDgt
MTQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQg
aml0IG9uIFdpbjY0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgKKyAgICBoZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCisgICAgaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaAogICAgIGhlYXAvR0NUaHJlYWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuY3BwCiAgICAgaGVhcC9IYW5kbGVTZXQuY3BwCkBAIC0yNjQsMTAgKzI2OCwxMCBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHByb2ZpbGVyL1Byb2ZpbGVOb2RlLmNw
cAogICAgIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAogCi0gICAgcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKLSAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0Fy
Z0xpc3QuY3BwCiAgICAgcnVudGltZS9Bcmd1bWVudHMuY3BwCisgICAgcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKKyAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTI4Miw2ICsyODYsOCBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwCiAg
ICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAogICAgIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAK
KyAgICBydW50aW1lL0RhdGFWaWV3LmNwcAorICAgIHJ1bnRpbWUvRGF0YVZpZXcuaAogICAgIHJ1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
CiAgICAgcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCkBAIC0zMDYsMTAgKzMxMiwxNiBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
CiAgICAgcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCiAgICAgcnVudGltZS9KU0FycmF5LmNwcAor
ICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCisg
ICAgcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAKICAgICBydW50aW1lL0pTQ0pTVmFsdWUuY3BwCiAgICAgcnVudGltZS9KU0NlbGwu
Y3BwCiAgICAgcnVudGltZS9KU0NodW5rLmNwcAorICAgIHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAK
KyAgICBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9KU0RhdGVN
YXRoLmNwcAogICAgIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAKICAgICBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtMzI3LDYgKzMzOSw5IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAKICAgICBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNw
cAogICAgIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKKyAgICBydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwCisgICAgcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAogICAgIHJ1bnRpbWUvSlNWYXJp
YWJsZU9iamVjdC5jcHAKICAgICBydW50aW1lL0pTV2l0aFNjb3BlLmNwcAogICAgIHJ1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcApAQCAtMzU5LDYgKzM3NCw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCiAgICAgcnVudGltZS9SZWdF
eHBQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwCisgICAgcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKICAgICBydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAKICAgICBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCiAgICAgcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKQEAgLTM3MCw2ICszODYsOCBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKICAgICBydW50aW1lL1N5bWJvbFRhYmxlLmNwcAor
ICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCisgICAgcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHAKICAgICBydW50aW1lL1ZNLmNwcAogICAgIHJ1bnRpbWUvV2F0Y2hkb2cuY3Bw
CiAgICAgcnVudGltZS9XYXRjaGRvZ05vbmUuY3BwCkBAIC0zOTEsNiArNDA5LDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX0xVVF9GSUxFUwogICAgIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAog
ICAgIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBl
LmNwcAorICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1l
L05hbWVQcm90b3R5cGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgYWxsIDog
XAogICAgIERhdGVDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgRGF0ZVByb3RvdHlwZS5sdXQuaCBc
CiAgICAgRXJyb3JQcm90b3R5cGUubHV0LmggXAorICAgIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmggXAogICAgIEpTT05PYmplY3QubHV0LmggXAogICAgIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIFwK
ICAgICBLZXl3b3JkTG9va3VwLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsxNyw3IEBAIGph
dmFzY3JpcHRjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNj
cmlwdENvcmUvRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZS9EYXRlUHJvdG90eXBlLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZS9FcnJvclByb3RvdHlwZS5sdXQuaCBcCisJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlw
dENvcmUvSlNHbG9iYWxPYmplY3QubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRD
b3JlL0pTT05PYmplY3QubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL01h
dGhPYmplY3QubHV0LmggXApAQCAtMzg0LDYgKzM4NSwxMCBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGFuZGxlQmxvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlQmxvY2tJ
bmxpbmVzLmggXApAQCAtNjg1LDYgKzY5MCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0YVZpZXcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0
ZUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJz
aW9uLmNwcCBcCkBAIC03MTksNiArNzI2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmggXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcCBcCkBAIC03NDQsMTIgKzc1Mywy
NyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FQSVZhbHVlV3JhcHBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlw
ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lu
bGluZXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggXAorCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0RhdGFWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0YVZpZXdQcm90b3R5cGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0RhdGFWaWV3UHJvdG90eXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxp
bmVzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcCBcCkBAIC03NTgsMTIgKzc4MiwyMSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNJbnQxNkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
SW50MzJBcnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJh
eS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAgXApAQCAtNzc2LDYgKzgwOSwxNiBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVWludDMyQXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNVaW50OEFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDhDbGFtcGVkQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRo
U2NvcGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmggXApAQCAt
ODY2LDYgKzkwOSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ0NvdW50ZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Bh
cnNlQXJyYXlWYWx1ZU1hcC5jcHAgXApAQCAtODkyLDggKzkzNywxNCBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RyYWNpbmcuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlCYXNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJh
eS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZXaXRoRnJhY3Rpb24u
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaCBcCkBAIC05
NjcsNSArMTAxOCw0IEBAIFByb2dyYW1zX0xMSW50T2Zmc2V0c0V4dHJhY3Rvcl9TT1VSQ0VTID0K
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAog
CiBQcm9ncmFtc19qc2NfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfU09VUkNFUyA9IFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlw
ZWRBcnJheVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5
cGVkQXJyYXlTdHVicy5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSlNDVHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjA3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBK
U0NUeXBlZEFycmF5U3R1YnNfaAotI2RlZmluZSBKU0NUeXBlZEFycmF5U3R1YnNfaAotCi0jaW5j
bHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiRmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVk
ZSAiSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJJbnQ4
QXJyYXkuaCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgotI2luY2x1ZGUgIk9i
amVjdFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJVaW50
MTZBcnJheS5oIgotI2luY2x1ZGUgIlVpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhBcnJh
eS5oIgotI2luY2x1ZGUgIlVpbnQ4Q2xhbXBlZEFycmF5LmgiCi0KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLSNkZWZpbmUgVFlQRURfQVJSQVkobmFt
ZSwgdHlwZSkgXAotY2xhc3MgSlMjI25hbWUjI0FycmF5IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IHsgXAotcHVibGljOiBcCi0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBC
YXNlOyBcCi0gICAgc3RhdGljIEpTIyNuYW1lIyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFt
ZSMjQXJyYXk+IGltcGwpIFwKLSAgICB7IFwKLSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIg
PSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKUyMjbmFtZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QsIGltcGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52
bSgpKTsgXAotICAgICAgICByZXR1cm4gcHRyOyBcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQgcHV0QnlJbmRl
eChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U0M6OkpTVmFsdWUsIGJvb2wpO1wKLSAgICBERUNMQVJFX0lORk87XAotXAotICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtcCi0g
ICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTtcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTtcCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcCi1cCi0gICAgc3RhdGljIGNvbnN0IEpTQzo6
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjpUeXBlZEFycmF5IyNu
YW1lO1wKLSAgICB1aW50MzJfdCBtX3N0b3JhZ2VMZW5ndGg7XAotICAgIHR5cGUqIG1fc3RvcmFn
ZTtcCi0gICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAotcHJvdGVjdGVkOlwKLSAgICBK
UyMjbmFtZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQ
dHI8bmFtZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7XAot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7IFwKLSAgICBKU0M6OkpTVmFsdWUgZ2V0QnlJbmRl
eChKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcCi0gICAgdm9pZCBpbmRleFNldHRl
cihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpO1wKLX07XAot
XAotY29uc3QgQ2xhc3NJbmZvIEpTIyNuYW1lIyNBcnJheTo6c19pbmZvID0geyAjbmFtZSAiQXJy
YXkiICwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjbmFtZSMj
QXJyYXkpIH07XAotXAotSlMjI25hbWUjI0FycmF5OjpKUyMjbmFtZSMjQXJyYXkoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFt
ZSMjQXJyYXk+IGltcGwpXAotICAgIDogQmFzZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVy
ZSlcCi0gICAgLCBtX2ltcGwoaW1wbClcCi17XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pXAote1wKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7XAotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJkpTIyNuYW1lIyNBcnJh
eTo6c19pbmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2UpLCBP
QkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2VMZW5ndGgpKTtcCi0gICAg
dm0ucmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihtX2ltcGwuZ2V0KCksIGRlc2NyaXB0b3Ip
O1wKLSAgICBtX3N0b3JhZ2UgPSBtX2ltcGwtPmRhdGEoKTtcCi0gICAgbV9zdG9yYWdlTGVuZ3Ro
ID0gbV9pbXBsLT5sZW5ndGgoKTtcCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsgXAotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcCi19XAotXAot
Ym9vbCBKUyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
UyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1l
LmFzSW5kZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3Ro
KSB7XAotICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtc
Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRl
eCkpO1wKLSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6Omdl
dE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XAotfVwK
LVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNP
YmplY3QtPm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3Bl
cnR5TmFtZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
dGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wKLSAgICAg
ICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XAotfVwK
LVwKLWJvb2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICBpZiAocHJvcGVydHlOYW1lIDwgdGhp
c09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QtPmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XAotICAgICAgICByZXR1cm4g
dHJ1ZTtcCi0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0
T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywg
cHJvcGVydHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpwdXQo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICB1
bnNpZ25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCAh
PSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4
U2V0dGVyKGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAotICAgIH1cCi0g
ICAgQmFzZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
O1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwKLXtcCi0gICAg
bV9pbXBsLT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAotXAotdm9pZCBK
UyMjbmFtZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17XAotICAgIEpT
IyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxs
KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wK
LSAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTtc
Ci0gICAgcmV0dXJuO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcCi17XAotICAgIEpTIyNu
YW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3Qp
O1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGg7
ICsraSlcCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
aSkpO1wKLSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpTIyNuYW1lIyNBcnJheTo6Z2V0
QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17XAotICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpcywgaW5mbygpKTtcCi0gICAgdHlwZSByZXN1bHQgPSBtX2ltcGwt
Pml0ZW0oaW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJlc3VsdCkpXAotICAg
ICAgICByZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVzdWx0KTtcCi19XAot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMjI25hbWUjI0Fy
cmF5KEV4ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9J
bnQzMihjYWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT52bSgpLCBj
YWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4g
YnVmZmVyID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAgaWYgKCFidWZmZXIp
IFwKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVJhbmdlRXJy
b3IoY2FsbEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9z
aXRpdmUgaW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIyNuYW1l
IyNBcnJheTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGJ1ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShVaW50OCwgdWludDhf
dCk7Ci1UWVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWlu
dDE2LCB1aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90KTsKLVRZUEVEX0FS
UkFZKEludDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZfdCk7Ci1UWVBFRF9B
UlJBWShJbnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBmbG9hdCk7Ci1UWVBF
RF9BUlJBWShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksMTAgKzI1OSwxMCBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcCBcCiAgICAgcHJvZmlsZXIv
UHJvZmlsZU5vZGUuY3BwIFwKICAgICBwcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAgXAotICAg
IHJ1bnRpbWUvQXJyYXlCdWZmZXIuY3BwIFwKLSAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5j
cHAgXAogICAgIHJ1bnRpbWUvQXJnTGlzdC5jcHAgXAogICAgIHJ1bnRpbWUvQXJndW1lbnRzLmNw
cCBcCisgICAgcnVudGltZS9BcnJheUJ1ZmZlci5jcHAgXAorICAgIHJ1bnRpbWUvQXJyYXlCdWZm
ZXJWaWV3LmNwcCBcCiAgICAgcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9y
LmNwcCBcCkBAIC0yNzcsMTMgKzI3NywxNCBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0Nv
bXBpbGF0aW9uUmVzdWx0LmNwcCBcCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcCBcCiAgICAg
cnVudGltZS9Db25zdHJ1Y3REYXRhLmNwcCBcCisgICAgcnVudGltZS9EYXRhVmlldy5jcHAgXAog
ICAgIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9EYXRlQ29udmVy
c2lvbi5jcHAgXAogICAgIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcCBcCiAgICAgcnVudGltZS9E
YXRlUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9EdW1wQ29udGV4dC5jcHAgXAotICAgIHJ1
bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvRXJyb3IuY3BwIFwKKyAg
ICBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL0Vycm9ySW5zdGFu
Y2UuY3BwIFwKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmNwcCBcCkBAIC0yOTMsMzcgKzI5NCw0NCBAQCBTT1VSQ0VTICs9IFwK
ICAgICBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9HQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwIFwKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAgXAotICAgIHJ1
bnRpbWUvT3B0aW9ucy5jcHAgXAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogICAgIHJ1
bnRpbWUvSW5kZXhpbmdUeXBlLmNwcCBcCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcCBcCiAgICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBcCiAgICAgcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcCBcCi0gICAgcnVudGltZS9KU0FjdGl2YXRpb24uY3Bw
IFwKICAgICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcCBcCisgICAgcnVudGltZS9KU0Fj
dGl2YXRpb24uY3BwIFwKICAgICBydW50aW1lL0pTQXJyYXkuY3BwIFwKKyAgICBydW50aW1lL0pT
QXJyYXlCdWZmZXIuY3BwIFwKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5j
cHAgXAorICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwIFwKKyAgICBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAgXAorICAgIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNDZWxsLmNw
cCBcCisgICAgcnVudGltZS9KU0RhdGFWaWV3LmNwcCBcCisgICAgcnVudGltZS9KU0RhdGFWaWV3
UHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9KU0RhdGVNYXRoLmNwcCBcCiAgICAgcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcCBcCi0gICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKLSAg
ICBydW50aW1lL1ZNLmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogICAg
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKLSAgICBydW50aW1lL0pTUHJv
eHkuY3BwIFwKICAgICBydW50aW1lL0pTTG9jay5jcHAgXAorICAgIHJ1bnRpbWUvSlNOYW1lU2Nv
cGUuY3BwIFwKICAgICBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwIFwKLSAgICBydW50aW1lL0pT
T2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCisgICAgcnVudGltZS9K
U09iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAot
ICAgIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAotICAgIHJ1bnRpbWUv
SlNXaXRoU2NvcGUuY3BwIFwKLSAgICBydW50aW1lL0pTTmFtZVNjb3BlLmNwcCBcCisgICAgcnVu
dGltZS9KU1Byb3h5LmNwcCBcCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcCBcCisgICAgcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZy5j
cHAgXAogICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIFwKICAgICBydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwIFwKLSAgICBydW50aW1lL0pTQ0pTVmFsdWUuY3BwIFwKKyAgICBy
dW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgXAorICAgIHJ1bnRpbWUvSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5jcHAgXAorICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAgXAog
ICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAorICAgIHJ1bnRpbWUvSlNXaXRoU2Nv
cGUuY3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAgXAogICAgIHJ1bnRpbWUvTG9va3VwLmNwcCBcCkBAIC0zNDAsMTkg
KzM0OCwyMSBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNw
cCBcCiAgICAgcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL09wZXJh
dGlvbnMuY3BwIFwKKyAgICBydW50aW1lL09wdGlvbnMuY3BwIFwKICAgICBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwIFwK
ICAgICBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJs
ZS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCBcCi0gICAgcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhwLmNwcCBcCisgICAgcnVudGlt
ZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBc
CisgICAgcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmNwcCBcCi0gICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCi0g
ICAgcnVudGltZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvU2FtcGxpbmdDb3VudGVy
LmNwcCBcCisgICAgcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAogICAg
IHJ1bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBcCiAgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVl
TWFwLmNwcCBcCiAgICAgcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXApAQCAtMzYw
LDEwICszNzAsMTMgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9TdHJpbmdPYmplY3QuY3Bw
IFwKICAgICBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvU3RyaW5n
UmVjdXJzaW9uQ2hlY2tlci5jcHAgXAotICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwIFwK
ICAgICBydW50aW1lL1N0cnVjdHVyZS5jcHAgXAorICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4u
Y3BwIFwKICAgICBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcCBcCiAgICAgcnVudGltZS9T
eW1ib2xUYWJsZS5jcHAgXAorICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwK
KyAgICBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcCBcCisgICAgcnVudGltZS9WTS5jcHAgXAog
ICAgIHJ1bnRpbWUvV2F0Y2hkb2cuY3BwIFwKICAgICBydW50aW1lL1dhdGNoZG9nTm9uZS5jcHAg
XAogICAgIHRvb2xzL0NvZGVQcm9maWxlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAko
cmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5n
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5j
bHVkZSAiSlNDVHlwZWRBcnJheVN0dWJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIKQEAgLTIzOCwxNiArMjM3LDYg
QEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxpbmdGbGFn
cyIsIGZ1bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAgICAKLSAg
ICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJheSIsIGNvbnN0cnVj
dEpTVWludDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IlVpbnQ4Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRBcnJheSwgMSk7Ci0g
ICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFycmF5IiwgY29uc3Ry
dWN0SlNVaW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2
bSwgIlVpbnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7Ci0gICAgICAgIGFk
ZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0cnVjdEpTSW50OEFy
cmF5LCAxKTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MTZBcnJh
eSIsIGNvbnN0cnVjdEpTSW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVG
dW5jdGlvbih2bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJyYXksIDEpOwotICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJyYXkiLCBjb25zdHJ1
Y3RKU0Zsb2F0MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2
bSwgIkZsb2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAxKTsKLQogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmlu
ZyhnbG9iYWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyLmNwcCIg
Lz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmlldy5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmdMaXN0LmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50cy5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZpZXcuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheVByb3Rv
dHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFu
Q29uc3RydWN0b3IuY3BwIiAvPg0KQEAgLTQyNyw2ICs0MjcsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbXBsZXRpb24uY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0YS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0b3IuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZlcnNpb24uY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmNwcCIg
Lz4NCkBAIC00NDYsMTIgKzQ0NywxOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRpb24uY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNwcCIgLz4N
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXkuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlci5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0FycmF5QnVmZmVyVmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0JvdW5kRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNDZWxsLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTRGF0YVZpZXcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNEYXRhVmlld1Byb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0RhdGVNYXRoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTRnVuY3Rpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNHbG9iYWxPYmplY3QuY3BwIiAvPg0KQEAgLTQ1OSw4ICs0NjYsOCBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOb3RBbk9iamVjdC5jcHAiIC8+DQotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09OT2JqZWN0LmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Njb3BlLmNwcCIgLz4NCkBAIC00NjgsNiArNDc1
LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmcuY3BwIiAv
Pg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdKb2luZXIuY3Bw
IiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVk
QXJyYXlDb25zdHJ1Y3RvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXaXRoU2NvcGUuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFwcGVyT2JqZWN0LmNwcCIgLz4NCkBAIC00OTks
NiArNTA5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwT2Jq
ZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFBy
b3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTYW1w
bGluZ0NvdW50ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU21hbGxTdHJpbmdzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIiAvPg0KQEAg
LTUxMCw2ICs1MjEsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1
Y3R1cmVDaGFpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTeW1ib2xUYWJsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxXYXRjaGRvZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxXYXRjaGRvZ05vbmUuY3BwIiAvPg0KQEAgLTUyNyw2ICs1NDAsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXERhdGVQcm90b3R5cGUubHV0LmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEVycm9yUHJvdG90eXBlLmx1dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNHbG9iYWxPYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEpTT05PYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXExleGVyLmx1dC5oIiAvPg0KQEAgLTc3MywxMCArNzg3LDEwIEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXQuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rl
cy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXIu
aCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmll
dy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlzdC5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJWaWV3LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0cnVjdG9yLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnZlbnRpb25zLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheVByb3RvdHlwZS5o
IiAvPg0KQEAgLTc5OCw2ICs4MTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxDb25zdHJ1Y3REYXRhLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxEYXRhVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmgiIC8+DQpAQCAtODE1LDYgKzgzMCw4IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uQ29uc3RydWN0b3IuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJZGVudGlmaWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPg0KQEAgLTgyNywyNCArODQ0LDQyIEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24u
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3JhcHBlci5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
QXJyYXlCdWZmZXJWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0NKU1ZhbHVlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0NKU1ZhbHVlSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0RhdGFWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0RhdGFWaWV3UHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0RhdGVNYXRoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTRmxvYXQzMkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0Zsb2F0NjRBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNGdW5jdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQxNkFycmF5LmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0ludDMyQXJyYXkuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50OEFycmF5LmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU05vdEFuT2JqZWN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU09iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNPTk9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTUHJveHkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTU2NvcGUuaCIgLz4NCkBAIC04NTUsNiArODkwLDEzIEBACiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCIgLz4NCiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQxNkFycmF5LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQzMkFycmF5LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJyYXkuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDhDbGFtcGVkQXJyYXkuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3Qu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2l0aFNjb3BlLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dyYXBwZXJPYmplY3Qu
aCIgLz4NCkBAIC04OTcsNiArOTM5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcUmVnRXhwUHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxSZWplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XFNhbXBsaW5nQ291bnRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIgLz4NCkBAIC05MTEs
NyArOTU0LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU3ltYm9sVGFibGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XFRyYWNpbmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxUeXBlZEFycmF5QWRhcHRvcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFR5cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFR5cGVkQXJyYXlzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcVWludDE2V2l0aEZyYWN0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZH
T1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3
ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3QjZCNTNG
MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2
REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZp
ZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3QjZCNUFC
MDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8q
IEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OworCQkwRjJC
NjZFMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
ICovOyB9OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZCNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTYx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFNzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsg
fTsKKwkJMEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmll
d1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjgxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJh
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkI2NkY5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3Bw
ICovOyB9OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZDRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkMx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZGRDE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFy
cmF5cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07CisJCTBG
MkI2NkZGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQyMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNV
aW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJC
NjcwMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8q
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0
b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2QjVBQjAw
QTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAv
KiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
REMxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY3
MEIxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUx
QzVENEYwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgw
MENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJCTBGNDY4MEQ0MTRCQkQy
NDkwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcy
IC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVy
blZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEw
MDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBGNEI5NERDMTdCOUYwNzUw
MEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0Mx
RkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0Mx
RkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQ
b2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0
NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMzQ5LDcgKzQwMCw2
IEBACiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBB
MzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDQjE2MjM3
RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQg
LyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNw
cCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
Y3BwICovOyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI0
LDggKzg3NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZB
cnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdB
OEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQg
LyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3QURCNUYz
MDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIElu
dGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThB
RjJGMTdBREI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3
NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQwMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4
Q2xhbXBlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3QURCNUYz
MDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJCTBGMjM1QkVBMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcvREZHT1NS
RXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1
MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGgg
PSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21p
bmdSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkFB
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBBN0FFM0Yg
LyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0
YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIxN0I2QjVB
QjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
NjZCNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkJBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVm
ZmVyVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3QjZCNUFC
MDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmll
dy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNGbG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNG
bG9hdDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzIxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkND
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNGMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJh
eXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTVHlwZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDIx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VWludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDYxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNG
IC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRv
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFkYXB0b3Jz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUz
RiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FF
M0YgLyogVHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlw
ZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBo
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMx
RjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlv
blNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NCw2ICsxMzUyLDcgQEAK
IAkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhvc3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJy
YXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUFGMTYxM0MxRkIw
MENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFj
dFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBGRUEwQTJFMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUu
Y3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3
QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEp1bXBQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUZD
OUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsg
cGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4
OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3QjVCNDE3
QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRB
cnJheVN0dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJy
YXlTdHVicy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhE
MDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2
RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAu
Y3BwOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQg
LyogSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIx
NzQgLyogSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQx
NkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEludDMyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FE
QjVGMzAwNUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQ4QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhBcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVWludDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdB
OEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBq
c2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywK
IAkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAq
LywKLQkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmgg
Ki8sCiAJCQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2VzLm1ha2Ug
Ki8sCiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0
b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKQEAgLTI1
NTYsNiArMjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJs
b2Nrcy5oICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMu
aCAqLywKKwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWQuaCAqLywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8q
IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEsOCBAQAogCQkJCTBGREIy
Q0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovLAogCQkJCUJDQTYy
REZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlCQzhGM0ND
RjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAorCQkJCTBGMkI2NkIwMTdC
NkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAw
QTdBRTNGIC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3MTM1RTAwMkM3RTgyIC8q
IERhdGVDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3MTM1RTAwMkM3RTgyIC8q
IERhdGVDb25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlQ29udmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBAQAogCQkJCUY2OTJBODVE
MDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAogCQkJCUMyRDU4QzMz
MTU5MTJGRUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCURERjdB
QkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkwRjJC
NjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJ
MEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAq
LywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCiAJ
CQkJOTMzQTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3BwICovLApAQCAtMjky
MCw3ICszMDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJh
eS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8s
CiAJCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAotCQkJCUE3
QThBRjJFMTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJ
CQkJQTc4ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovLAogCQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmggKi8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rp
b24uY3BwICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTREQTgxOEUwRDk5RkQyMDAw
QjBBNEZCIC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIw
OCAvKiBKU0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNB
cnJheS5oICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmNwcCAqLywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5o
ICovLAorCQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0
MkJCQjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0
MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5
RDFFRjAwODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3ICszMDQ4LDMyIEBACiAJ
CQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAogCQkJCTE0
QUJCMzZFMDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCiAJCQkJODY1QTMwRjAx
MzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QkQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJFMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJOTc4OEZDMjIxNDcxQUQw
QzAwNjhDRTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4
Q0UyRCAvKiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8q
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2
IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRmxvYXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVu
Y3Rpb24uY3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9u
LmggKi8sCiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25JbmxpbmVz
LmggKi8sCisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJ
CQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxp
bmVzLmggKi8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovLAogCQkJCTE0REUw
RDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8sCiAJCQkJQThFODk0
MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJCQkJQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlC
Qzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywK
KwkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8sCisJCQkJ
MEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2
NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCTY1RUE0Qzk5MDky
QUY5RTIwMDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0QzlBMDkyQUY5RTIwMDkz
RDgwMCAvKiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRBMDAyRTM1ODcgLyogSlNO
YW1lU2NvcGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJCQkJMEY5MTlEMDkxNTdF
RTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBB
MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0
NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBGMkI2NkNDMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCTBGMkI2NkNE
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkw
RjJCNjZDRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgKi8s
CisJCQkJMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMu
aCAqLywKKwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAg
Ki8sCisJCQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywK
IAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAorCQkJCTBG
MkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2
RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQlCQzIyQTM5QTBFMTZF
MTQ4MDBBRjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMTRGMjUyNTYwRDA4
REQ4RDAwNEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJCQkxNDQyNTY1RjE1RURF
OThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1MSw2ICszMTg2LDggQEAK
IAkJCQkwRkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCiAJCQkJMEY3NzAw
OTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8sCiAJCQkJMEY3NzAw
OEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAorCQkJCTBGMkI2NkQ2
MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJ
CQkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi8sCiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAg
Ki8sCiAJCQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAog
CQkJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAq
LywKQEAgLTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENEMjkzMzEwMEI1QjRGRiAv
KiBTeW1ib2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAvKiBUcmFj
aW5nLmQgKi8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLywK
LQkJCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLywKLQkJ
CQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLywK
KwkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8s
CisJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNw
cCAqLywKKwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCAqLywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGlu
ZXMuaCAqLywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAq
LywKKwkJCQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICov
LAorCQkJCTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAog
CQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2
NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlB
N0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1MzgsMTIg
KzM2ODAsMTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5
cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyog
QXJyYXlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0
OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZERjE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFDMTdC
NkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZEM0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFu
dFBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBB
U1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQg
LyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Njcz
OUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDgxNkUxQzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0
ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2
NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1LDYgKzM3
MDAsNyBAQAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyogQ2FsbElk
ZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUw
MEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICszNzEyLDcg
QEAKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggaW4gSGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJCQkJMEZEQjJDRUExNzQ4
OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFE
MkZDMTRGMDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyQzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIy
MDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3
OTlFQTJFMDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQ
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8q
IERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyog
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGN0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJCQlBN0Q4OUNGODE3QTBC
OENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5
Q0ZBMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2
QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZBMTFFNDAw
OTYzMDEyIC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYgKzM4MDks
NyBAQAogCQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAw
MTcwQzE5IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3
QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4
OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIy
QUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1
QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQjE1
MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
NjZBRDE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVy
YXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyog
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg0
LDYgKzM4MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUz
MiAvKiBERkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURG
NzQ0IC8qIERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCRTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEz
MjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM2
OTMsNiArMzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVT
dHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVD
QTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVy
aWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAw
MEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZl
SklULmggaW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBACiAJCQkJMEYyMUMyN0Mx
NEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0
IC8qIEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAw
NUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQzkxNzNE
QTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
Mzc0Niw2ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9y
bWF0dGVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUwMDlERjc0
NCAvKiBGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjQx
NzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExK
SVRGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRB
NSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1Miw2IEBACiAJCQkJ
QTdBOEFGM0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlD
MDUwMDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5
RDc3QzBFRDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
MzgxMyw2ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVF
OTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgz
NUUxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RUY2ODM1RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2
RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVF
MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2
NzA2MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlND
VGVzdFJ1bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxNCw3IEBACiAJ
CQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNPYmplY3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1
NyAvKiBKU09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2ICs0MDI2
LDcgQEAKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0YWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUsNyBAQAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAwMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkz
MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAu
aCBpbiBIZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJCQlBN0U1QUIzODE3OTlF
NEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxMzkxMzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJF
MzEzQTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1cC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50
ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAv
KiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0MDg5LDcg
QEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcw
MjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAogCQkJCUMyMTEyMkUzMTVE
RDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmpl
Y3QubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyog
TWVtb3J5U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1
QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIgLyogTmFt
ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4RTkyMjIg
LyogTmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkI2NzA5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVj
dG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5v
ZGVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3IEBACiAJCQkJMEYzNEIx
NEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGlj
UHV0QnlJZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQw
MiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU1MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAogCQkJCTE0NzRDMzNCMTZB
QTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMz
MkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYw
NDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2
QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYw
QUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdF
eHAuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdF
eHBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5NCw3IEBA
CiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291
cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEy
RUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICov
LApAQCAtNDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyog
U3RhdGljUHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFC
NTBERTAwOTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3Ry
aW5nQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2ODBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAogCQkJCUMyRkUxOEE0MTZC
QUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzIwQkE5MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDEx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyog
U3RydWN0dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkw
MEZFMjZGQSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAt
NDA1Nyw5ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5r
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkg
LyogVGh1bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcw
MzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlC
YXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlw
ZWRBcnJheURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFk
ZXJzICovLApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZF
N0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4
QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NEI5NERDMTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAv
KiBEYXRlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMw
MDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAy
RkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkI2NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdn
ZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3
Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTQ1MTQsNiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Ny
aXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkx
NEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAv
KiBERkdEZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1
MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJE
OSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlD
RkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRB
cnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAw
MTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2
QTZGNzEwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1
QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTQ2MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENB
MDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1
NTEwN0VDMEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkI2NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZE
RTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
ODc0QUUzMTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0
OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1
MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3
MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2
OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRh
Vmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyog
SlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4NzMsNyBA
QAogCQkJCUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBK
U1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTYsNyBA
QAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3Nl
bWJsZXJBUk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEy
QjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
QjY2RUQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2Vk
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyArNDk0NywyMSBAQAog
CQkJCTE0NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdo
aXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAw
MTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEy
MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAx
NTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZE
NEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0
MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5
NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQw
MkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCNjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJj
ZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0
OTk0LDcgQEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAw
QkU3N0E0IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQy
NTE1ODUzQ0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1
NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5k
ZXhpbmdUeXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFz
c0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJldHVybiBp
c1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGlu
ZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05
OCwyMyArOTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAog
aW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9y
YWdlVHlwZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBlSW50ODoK
ICAgICAgICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoK
KyAgICBjYXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAg
Y2FzZSBUeXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVy
biBKSVRJbnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlw
ZVVpbnQ4OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJy
YXlVaW50OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICByZXR1
cm4gSklUVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAg
IGNhc2UgVHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNh
c2UgVHlwZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVy
biBKSVRVaW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2Ug
VHlwZUZsb2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBU
eXBlZEFycmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4g
SklURmxvYXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIs
NiArMTIyLDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAg
ICB9CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5
TW9kZShKSVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEpJVEludDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50
MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6
CisgICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6
CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5Ogor
ICAgICAgICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgp
OworICAgICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRB
cnJheU1vZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkg
KzI2NiwyNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAg
aWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAg
IHJldHVybiBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYgKGNsYXNzSW5mby0+dHlwZWRBcnJh
eVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAoY2xhc3NJ
bmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50
ODoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVk
QXJyYXlJbnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50MTZBcnJheTsKLSAgICAgICAg
Y2FzZSBUeXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7
Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNV
aW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJy
YXlVaW50MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OwotICAgICAgICBj
YXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5
OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgcmV0dXJuIFNw
ZWNGbG9hdDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAg
ICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlT
dG9yYWdlVHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBTcGVjSW50
OEFycmF5OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJy
YXk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBTcGVjSW50MzJBcnJheTsK
KyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OworICAg
IGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRB
cnJheTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBTcGVjVWludDE2QXJy
YXk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5
OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5
OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQ2NEFycmF5
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAoY2xh
c3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8oKSkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmco
QXJyYQogICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJheTo6
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQXJyYXk6OkludDhB
cnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgQXJyYXk6OkludDE2QXJy
YXk6CisgICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJh
eToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBl
ZEFycmF5OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEFycmF5
OjpVaW50MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CisgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgQXJy
YXk6OkZsb2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOworICAgIGNhc2Ug
QXJyYXk6OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5OworICAgIH0KK30KKwogdm9pZCBB
cnJheU1vZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQo
dHlwZSgpLCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCksIGNvbnZlcnNpb24oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE1NDA4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFyKiBhcnJheUNsYXNzVG9TdHJpbmco
QXJyYXk6OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJyYXk6OlNw
ZWN1bGF0aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmF5OjpD
b252ZXJzaW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJheTo6VHlw
ZSk7CisKIGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAgICAgQXJyYXlNb2RlKCkKQEAgLTM4
MCw2ICszODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHlwZSgpID09IEFycmF5OjpT
dHJpbmc7CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVkQXJyYXlUeXBlKHR5cGUoKSk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcnJheU1vZGUmIG90aGVyKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2NywzNyArMjY2
NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJn
dW1lbnRzKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6Oklu
dDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWdu
ZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJ
bnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwg
U2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShtX2ppdC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJf
dCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVp
bnQ4X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRv
cigpLCBub2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWlu
dDMyQXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5m
bG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlw
ZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckZsb2F0VHlwZWRB
cnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMjg3Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAg
ICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5
RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGlu
dDE2X3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
UHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwg
YmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWdu
ZWRUeXBlZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQ
dXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1f
aml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFy
cmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3By
KCksIG5vZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwg
bm9kZSwgdHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MSwzNyArMjU4MSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgQXJy
YXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5v
ZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5p
bnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFy
cmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlw
ZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52
bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9q
aXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBV
bnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2Rl
LCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9y
KCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlE
ZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBl
ZEFycmF5VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShub2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
Mjg3Miw0NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvcklu
dFR5cGVkQXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
SW50MTZBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHku
Z3ByKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFt
cGVkQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBz
aXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
LCBub2RlLCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6
Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCkt
PnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9k
ZSwgc2l6ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAg
ICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCks
IGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5
cGUgPSBhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0
eXBlKSkKKyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KIAogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Mywz
MiArNTgzLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQogICAg
IH0KIH0KICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6
dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2gg
KGFycmF5TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAg
IHJldHVybiAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MTZBcnJheURl
c2NyaXB0b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWlu
dDhBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICByZXR1cm4g
Jm1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJy
YXk6OlVpbnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICByZXR1
cm4gJm1faml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0
aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wR1BSLCBBcnJh
eU1vZGUgYXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUpCiB7CiAgICAgc3dpdGNoIChhcnJh
eU1vZGUuYXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
ICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJh
eURlc2NyaXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6OmluZm8oKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6
Ci0gICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5
OgotICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6
OkZsb2F0MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4
cGVjdGVkQ2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgZXhwZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsK
QEAgLTI2MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5
dGUoSklUCiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBu
b2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3Mp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9k
ZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkp
OworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGls
ZDMoKSk7CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWdu
ZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkK
ICAgICAgICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3Vs
dFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAg
ICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2ln
bmVkKHR5cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c1R3byksIHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQx
NihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzOSwxMiArMjYwNSwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWdu
ZWRuZXNzID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkg
PCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVu
dFNpemUgPT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNT
RVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAo
bm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxh
dGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVS
ZWNvdmVyeTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCks
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5
cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGlu
ZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUg
dHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3Nyw4ICsy
NjQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051
bWJlcigpOwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5
cGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAg
ICAgICAgICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2NjEsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5n
cHIoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7
Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAg
ICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1w
ZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0g
MSk7CiAgICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2Ny
YXRjaFJlZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNo
KTsKQEAgLTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNl
OiB7Ci0gICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0Ns
YW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkg
PT0gMSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRo
aXMsIHZhbHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0y
NzI0LDcgKzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJ
CiAgICAgICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAg
ICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0
LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJy
YW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIs
IGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0OSw5
ICsyNzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAg
IEFTU0VSVCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dp
dGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAg
ICBjYXNlIDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
T25lKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBl
bGVtZW50U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRU
eXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJU
KGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgo
KSkpKTsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAg
ICAgICBtX2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAg
ICAgICAgIG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsK
QEAgLTI4MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkZsCiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJv
cGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlz
RmxvYXQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9q
aXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5NywxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNl
LCBub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBt
X3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAg
IG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAg
fQogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFs
dWVGUFIsIHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2
YWx1ZUZQUiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDksNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhp
cyk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNv
bnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0
b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZh
bHVlKCkpLCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9y
YWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2Rl
LT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0MTI2LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5
TW9kZSgpKTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE5MSwxNiAr
NDE2NSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAg
ICAgIGNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRW
aWV3KG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgQVNTRVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRH
UFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAg
IH0KKyAgICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9u
Tm9DaGVjayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTczLDEw
ICsxOTczLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVt
ZW50U2l6ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFs
Rm9ySW50VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlT
aWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0
QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5
cGUpOworICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5l
d0Z1bmN0aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHBy
ZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIx
MTgsOCArMjExOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwog
ICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0
ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0
ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXko
Tm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlz
aW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBD
b3B5VG9rZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlUb2tl
biwKKyAgICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1NDA4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitj
bGFzcyBEZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdD
Rm9yQVdoaWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisg
ICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVm
ZXJyYWxEZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAg
eworICAgICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNv
bWluZ1JlZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3Vu
dGVkX2gKKworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKKworLy8g
QSBDLWhlYXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwgcmVmZXJl
bmNlIGNvdW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJvbSB0aGUgaGVhcCwg
d2hpY2ggYXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qga25vd3MgaXRzIGlu
Y29taW5nIHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZlIHRoZSBpbnZhcmlh
bnQgdGhhdCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8gdGhlIEdDCisvLyBo
ZWFwLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWQg
OiBwdWJsaWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgorICAgIEdDSW5jb21p
bmdSZWZDb3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDApCisgICAgeworICAg
IH0KKyAgICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsKKyAgICAgICAgaWYg
KGhhc1ZlY3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7
CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsKKyAgICB9CisgICAg
CisgICAgSlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgaWYgKGhhc1Np
bmdsZXRvbigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAgICAgIHJl
dHVybiBzaW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxs
cygpLT5hdChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2VuZXJhbGx5IG5vdCBh
IGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRoaXMKKyAgICAvLyBy
ZXR1cm5zIHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIEdD
J3MgbGlzdC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjphZGRSZWZlcmVu
Y2UoKSBpbnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKik7Cisg
ICAgCisgICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHdlIHdpc2ggdG8g
a2VlcCB0aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxzZSBpZiB3ZSBkb24n
dC4gVGhpcyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlmIGl0IGRvZXMgc28s
IHRoaXMgcmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2FudAorICAgIC8vIHRv
IHVzZSB0aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGZhbHNlIHVu
bGVzcworICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlzdC4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBmaWx0ZXJJbmNvbWlu
Z1JlZmVyZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyB1aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0KKyAgICAKKyAgICBi
b29sIGhhc1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5jb2RlZFBvaW50ZXIg
JiBzaW5nbGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWluZygpIGNvbnN0IHsg
cmV0dXJuICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2luZ2xldG9uKCkgY29u
c3QgeyByZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZDZWxscygpOyB9Cisg
ICAgCisgICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGhhc1NpbmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPiht
X2VuY29kZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQorICAgIAorICAgIFZl
Y3RvcjxKU0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaGFzVmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxWZWN0
b3I8SlNDZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gU2lu
Z2xldG9uIGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAvLyBTaW5nbGV0b24g
ZmxhZyBub3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBjZWxscy4KKyAg
ICB1aW50cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
c19oCisKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIkhlYXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5j
b21pbmdSZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNlbGwpCit7
CisgICAgaWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIg
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICAg
ICAgdGhpcy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRv
bigpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChIZWFw
OjpoZWFwKGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOworICAg
IAorICAgIGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4qIHZl
Y3RvciA9IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoc2lu
Z2xldG9uKCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9lbmNv
ZGVkUG9pbnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAgIEFT
U0VSVChoYXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1
bmN0aW9uVHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29taW5n
UmVmZXJlbmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAgIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJlbmNlcy5cbiIpOworICAgIAorICAg
IGlmICghaGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIXRoaXMtPmlzRGVmZXJy
ZWQoKSk7CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3VudCgpKTsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFzIG5vIGluY29taW5nLlxuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHRoaXMtPmlzRGVm
ZXJyZWQoKSk7CisgICAgCisgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgIGlmIChm
aWx0ZXJGdW5jdGlvbihzaW5nbGV0b24oKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIFNpbmdsZXRvbiBwYXNzZWQuXG4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmluZyBzaW5nbGV0b24uXG4iKTsK
KyAgICAgICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5j
b21pbmcoKSk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2coIiAgIEhhcyAiLCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSwgIiBlbnRyaWVzLlxuIik7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2
ZWN0b3JPZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVM
YXN0KCk7CisgICAgfQorICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+PSAy
KSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgU3RpbGwg
aGFzICIsIHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpLCAiIGVudHJpZXMuXG4iKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBS
ZW1vdmluZy5cbiIpOworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgICAgICBt
X2VuY29kZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsK
KyAgICAgICAgdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgU2hy
aW5raW5nIHRvIHNpbmdsZXRvbi5cbiIpOworICAgIEpTQ2VsbCogc2luZ2xldG9uID0gdmVjdG9y
T2ZDZWxscygpLT5hdCgwKTsKKyAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIG1fZW5j
b2RlZFBvaW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzaW5nbGV0b24pIHwgc2luZ2xl
dG9uRmxhZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0X2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCisvLyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZD
b3VudGVkLCBtdXN0IHN1cHBvcnQgYSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9k
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsK
K3B1YmxpYzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5n
UmVmQ291bnRlZFNldCgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZl
IG9iamVjdCBpcyBuZXcgdG8gdGhpcyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxs
KiwgVCopOworICAgIAorICAgIHZvaWQgc3dlZXAoKTsKKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBi
b29sIHJlbW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2Vs
bCopOworICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3Vu
dGVkU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNs
dWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQ8VD46OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5z
aXplKCk7IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5j
ZXMocmVtb3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkK
K3sKKyAgICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpIHsKKyAgICAg
ICAgQVNTRVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+
bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBvYmplY3Qt
PmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAgIEFTU0VSVChvYmplY3QtPmlzRGVmZXJyZWQo
KSk7CisgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21p
bmdSZWZDb3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBtX3ZlY3Rvcltp
XTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygp
OworICAgICAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NFUlQo
b2JqZWN0LT5udW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpKTsKKyAgICAgICAgaWYgKCFvYmpl
Y3QtPmZpbHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtX2J5dGVzIC09IHNpemU7CisgICAgICAgIG1fdmVjdG9yW2ktLV0g
PSBtX3ZlY3Rvci5sYXN0KCk7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
PFQ+OjpyZW1vdmVBbGwoSlNDZWxsKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVE
ZWFkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2VsbCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5o
IgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTM1OCw2ICszNTksMTQgQEAgdm9pZCBIZWFw
OjpqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1fZGZnQ29kZUJsb2Nrcy5qZXR0
aXNvbihjb2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNl
bGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1fYXJyYXlCdWZmZXJzLmFkZFJl
ZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVm
ZXIoKTsKKyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1NpemVFc3RpbWF0ZUluQnl0ZXMo
KSk7CisgICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290
VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0
b3IgZW5kID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02MjEsMTQgKzYzMCwxOSBAQCBz
aXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLm9iamVj
dENvdW50KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUoKQoreworICAgIHJldHVybiBt
X2V4dHJhTWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7Cit9CisKIHNpemVfdCBI
ZWFwOjpzaXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3Jh
Z2VTcGFjZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7CisgICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2Uuc2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFTaXplKCk7CiB9CiAK
IHNpemVfdCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2Fw
YWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgcmV0dXJuIG1fb2JqZWN0
U3BhY2UuY2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYVNpemUo
KTsKIH0KIAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkKQEAgLTcw
Nyw2ICs3MjEsMTIgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwog
ICAgIGRhdGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2VuZGlmCiAg
ICAgCisgICAgZG91YmxlIGJlZm9yZSA9IDA7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsK
KyAgICAgICAgZGF0YUxvZygiW0dDIiwgc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCA/ICIgKGVhZ2Vy
IHN3ZWVwKSIgOiAiIiwgIjogIik7CisgICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsK
KyAgICB9CisgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2Ug
Q29sbGVjdGlvbiIpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgp
OwpAQCAtNzQ1LDYgKzc2NSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dl
ZXBUb2dnCiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAgCisg
ICAgeworICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAgbV9h
cnJheUJ1ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tTbmFw
c2hvdC5yZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAtODE1
LDYgKzg0MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAK
ICAgICBpZiAoT3B0aW9uczo6c2hvd09iamVjdFN0YXRpc3RpY3MoKSkKICAgICAgICAgSGVhcFN0
YXRpc3RpY3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOworICAgIAorICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKSB7CisgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsK
KyAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywgIiwgY3VycmVudEhlYXBTaXpl
IC8gMTAyNCwgIiBrYl1cbiIpOworICAgIH0KIAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJ
TkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29sbGVjdGlvbi5cbiIpOwpAQCAt
OTI0LDEyICs5NTQsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAg
ICBtX2RlZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBt
X2RlZmVycmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwog
ICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBI
ZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkJsb2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIK
ICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIK
ICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVm
UHRyPENvZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEg
bWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgb2JqZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAgICAg
ICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBt
X2ppdFN0dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2Uo
SlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9y
QVdoaWxlOwogICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAg
ICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1
YlJvdXRpbmU7CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJs
b2NrQWxsb2NhdG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBp
bmNyZW1lbnREZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVk
KCk7CiAKICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9j
YXRvcjsKICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVk
U3BhY2UgbV9zdG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFy
cmF5QnVmZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlV
c2FnZTsKIAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWs8VD46Ogog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojp3YXMoVCogb3RoZXIp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxUKj4obV9pbXBsLT5qc1ZhbHVlKCkuYXNDZWxs
KCkpID09IG90aGVyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9pbXBsLT5qc1ZhbHVl
KCkuYXNDZWxsKCkpID09IG90aGVyOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Ym9vbCBXZWFrPFQ+OjpvcGVyYXRvciEoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAgICAg
IHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheVByb3RvdHlwZVRhYmxlOyB9
CiAgICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShD
YWxsRnJhbWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmJvb2xlYW5Qcm90
b3R5cGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRhVmlld1Rh
YmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0YVZp
ZXdUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlVGFibGU7IH0K
ICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlQ29uc3RydWN0
b3JUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlw
ZVRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZXJy
b3JQcm90b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0
IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
OwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250
aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3Qg
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBU
eXBlZEFycmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJy
YXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExp
c3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlw
ZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlw
ZWRBcnJheVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAs
IGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAgICAg
IC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50
LWNoZWNrZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KICAgICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSA9IENvbnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBK
dW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVu
dFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcpOwotICAgICAg
ICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBl
bGVtZW50U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7Cisg
ICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCiAgICAg
ICAgIGVudW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDksMTMgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJy
YXlTdG9yYWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRJbnQ4QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9y
KCksIDEsIFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDE2QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigp
LCAyLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQz
MkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwg
NCwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEs
IFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURl
c2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBKSVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJy
YXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRU
eXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9h
dDMyQXJyYXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZs
b2F0NjRBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3Jp
cHRvcigpLCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJy
YXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IHR5cGUpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwpAQCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbChCeVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUsIG1fdm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1
bmNhdGVSb3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25l
ZFR5cGVkQXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVEludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0
QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3Jp
cHRvcigpLCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+
dWludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJv
dW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAx
LCBVbnNpZ25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRB
cnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJy
YXlEZXNjcmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCBtX3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5
LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMy
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KSwgNCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsK
KyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwor
ICAgICAgICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJh
eVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywxMCBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dl
bmVyaWMpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2ln
bmVkbmVzcyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5
VHlwZSB0eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgLy8gVGhl
IGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMgdG8gdXNlIHRoZSBjbGFzc0luZm8u
IFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNsb2JiZXJpbmcgdGhlIHJlZ2lzdGVy
IHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2UsIGFuZCBwcm9wZXJ0eS4KIApAQCAt
MTY4OSwxOSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlH
ZXRCCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9
IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6
OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZv
KSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7CisgICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JU
eXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0
aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsK
KyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBp
ZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQo
dHlwZSkpCiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHks
IFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxv
YWQ4KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBT
aWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAg
ICBsb2FkMTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3Vs
dFBheWxvYWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGJh
c2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwpAQCAtMTcxNCw3ICsxNjcx
LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIH0KICAg
ICAKICAgICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRTaXplID09IDQgJiYgc2lnbmVkbmVz
cyA9PSBVbnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAodHlwZSA9PSBUeXBlVWludDMyKSB7
CiAgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJl
c3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIAogICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKQEAgLTE3NDAsOCArMTY5Nywx
MCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgcmV0dXJu
IHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlH
ZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQo
aXNGbG9hdCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CkBAIC0xNzU4
LDExICsxNzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UK
ICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsK
LSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFk
ZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUo
dHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
KSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
ZlZlY3RvcigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAg
IHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGxvYWRG
bG9hdChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOwogICAg
ICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTE3ODksOCAr
MTc0OCwxMCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAg
cmV0dXJuIHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVk
QXJyYXlSb3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRB
cnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5
cGUpKTsKKyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTgwOCw4ICsxNzY5LDggQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFz
ZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFz
c0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVh
cmx5U2NyYXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRo
aXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAg
Ly8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIo
QWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNoKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVj
dG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91
bmRpbmcpIHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5cGVkQXJyYXkpOwor
ICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5
cGUpID09IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVkKHR5cGUpKTsKICAgICAgICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVk
SW1tMzIoMHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFu
LCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIHhvcjMyKGVhcmx5
U2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyArMTc5Nyw3IEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAgICAgaW5Cb3VuZHMubGluayh0aGlz
KTsKICAgICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIHN0b3JlOChlYXJseVNj
cmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
SW50VHlwZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7Cisg
ICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0x
ODcyLDggKzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3Ry
dWN0dXJlOjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2Ns
YXNzSW5mbykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBw
cm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAg
IGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3Jh
dGNoLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0lu
Zm9Gb3JUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRP
Zkxlbmd0aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4OTgsOSArMTg2MSw5IEBAIEpJ
VDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAKICAgICAvLyBXZSB3
b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0
aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJl
cmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNl
dCksIGxhdGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgc3dpdGNo
IChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDQ6CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVnVDApOwog
ICAgICAgICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAg
QEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTQgKzI2LDEz
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKIAotI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcu
aCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5QnVmZmVyOjp0cmFu
c2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPEFycmF5QnVm
ZmVyPiBrZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0MSw5IEBAIGJvb2wgQXJyYXlCdWZm
ZXI6OnRyYW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBmb3IgKEFycmF5
QnVmZmVyVmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0VmlldykgewotICAg
ICAgICBpZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmlld3NBcmVOZXV0
ZXJhYmxlID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxlID0gIW1fcGluQ291
bnQ7CiAKLSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlmIChpc05ldXRlcmFi
bGUpCiAgICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAgICBlbHNlIHsKICAg
ICAgICAgbV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs1MSwxMyBAQCBib29s
IEFycmF5QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFycmF5
QnVmZmVyVmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3KGN1
cnJlbnQpOwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQtPmlz
TmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAgIG5l
dXRlcmVkVmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJP
ZkluY29taW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJl
bmNlQXQoaSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigp
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmll
dyhBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOwot
ICAgIHZpZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0
VmlldzsKLSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZW
aWV3ID0gdmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZm
ZXI6OnJlbW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0aGlz
ID09IHZpZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAgICAg
dmlldy0+bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAgaWYg
KHZpZXctPm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcg
PSB2aWV3LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAgICAg
ICBtX2ZpcnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9
IHZpZXctPm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24g
MTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCiAj
ZGVmaW5lIEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKK2Ns
YXNzIEpTQXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAtNDUsNyArNDcsNyBA
QCBwdWJsaWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMoKTsK
LQorICAgIAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25l
ZCBzaXplSW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApAQCAtODYsMTIgKzg4
LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKLWNsYXNz
IEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKK2NsYXNzIEFy
cmF5QnVmZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3Rh
dGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsK
ICAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2
b2lkKiBzb3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBPbmx5IGZvciB1c2Ug
YnkgVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAgICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVk
IG51bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAtOTksMTQgKzEwMiwx
NiBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qg
dm9pZCogZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29u
c3Q7CisgICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25z
dDsKIAogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4s
IGludCBlbmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGlj
ZShpbnQgYmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGluZSB2b2lkIHBpbigpOworICAgIGlu
bGluZSB2b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7
Ci0gICAgdm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgYm9vbCBpc05l
dXRlcmVkKCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CiAKICAgICB+QXJyYXlCdWZm
ZXIoKSB7IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdW5zaWdu
ZWQgY2xhbXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRpYyBpbmxpbmUgaW50IGNs
YW1wVmFsdWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisgICAgdW5zaWduZWQgbV9w
aW5Db3VudDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlC
dWZmZXJWaWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdlYWs8SlNBcnJheUJ1ZmZl
cj4gbV93cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4LCBp
bnQgbGVmdCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NywxMiBAQCBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1
ZmZlcihjb250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZl
cjo6Y3JlYXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQor
eworICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2FzdDx2b2lkKj4oZGF0
YSksIGJ5dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoY29udGVudHMpOworfQorCiBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVy
biBjcmVhdGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50
czo6RG9udEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3IEBAIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFy
cmF5QnVmZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZpZXcoMCkKKyAgICA6
IG1fcGluQ291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKIH0K
QEAgLTE5NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBj
b25zdAogICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9CiAKK3NpemVfdCBB
cnJheUJ1ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c2l6ZW9mKEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZUxlbmd0aCgpKTsK
K30KKwogUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdp
biwgaW50IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVn
aW4pLCBjbGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsyMzcsMjMgQEAgdW5zaWduZWQgQXJy
YXlCdWZmZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4
LCAwLCBjdXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJheUJ1ZmZlcjo6cGluKCkKK3sKKyAg
ICBtX3BpbkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OnVucGluKCkKK3sKKyAgICBt
X3BpbkNvdW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUo
dW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZm
ZXJDb250ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1ZmZlckNvbnRl
bnRzJiByZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0
aGUgdG90YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2Mg
ZnVuY3Rpb24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50cywKLSAgICAvLyBhbmQgd2lsbCBm
YWlsIGlmIHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEK
LSAgICAvLyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/Cisg
ICAgLy8gRG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KICAg
ICBpZiAobnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxl
bWVudHMgKiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVt
ZW50cyAhPSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVs
ZW1lbnRzICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAgICAgfHwgdG90YWxTaXplID4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkg
ewogICAgICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlC
dWZmZXJDb250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogdXNpbmcgSlNDOjpBcnJheUJ1ZmZl
cjsKLXVzaW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsKIAogI2VuZGlmIC8vIEFycmF5QnVm
ZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOCAr
MzAsMzYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZm
ZXJWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCkKLSAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAgICwgbV9pc05ldXRlcmFibGUo
dHJ1ZSkKLSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fcHJldlZpZXcoMCkKLSAgICAs
IG1fbmV4dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQor
ICAgICAgICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJh
YmxlKHRydWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFkZHJl
c3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBt
X2J5dGVPZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAgICBtX2J1ZmZlci0+
YWRkVmlldyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkK
IHsKLSAgICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMp
OworICAgIGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOwog
fQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3
OjpzZXROZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9i
eXRlT2Zmc2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1dGVyYWJsZSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxhZzsKKyAgICAKKyAgICBpZiAo
IW1fYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZsYWcpCisgICAgICAg
IG1fYnVmZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAgICAgbV9idWZmZXItPnBpbigpOwog
fQogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAogCiAjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTQXJy
YXlCdWZmZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBFeGVjU3RhdGU7CisK
IGNsYXNzIEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyVmll
dz4gewogcHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAg
ICAgICAgVHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBl
SW50MTYsCi0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAg
VHlwZVVpbnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAot
ICAgICAgICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25z
dCA9IDA7CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFtX2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAgIH0KKyAgICAKICAg
ICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAgIHsKKyAgICAgICAg
aWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4g
bV9idWZmZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAogICAgIHsK
KyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICByZXR1cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0
KCkgY29uc3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9CiAKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNldE5ldXRl
cmFibGUoYm9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAgIGJvb2wgaXNOZXV0
ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJvdGVjdGVkOgotICAg
IFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJh
eUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNl
dFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNp
Z25lZCBhcnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCiAg
ICAgLy8gSGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5
QnVmZmVyIGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisgICAg
c3RhdGljIGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWdu
ZWQgbnVtRWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6
ZW9mKFQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0ZU9mZnNl
dCA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVM
ZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFp
bmluZ0VsZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNldCkgLyBzaXpl
b2YoVCk7CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ5dGVMZW5ndGgg
LSBieXRlT2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gcmVt
YWluaW5nRWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFw
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJh
eUJ1ZmZlclZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29sIHNl
dFJhbmdlSW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxp
bmUgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisgICAgICAgIGludCBzdGFydCwgaW50
IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNp
Z25lZCogbGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgZWxl
bWVudHMgZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQgb2Zmc2V0IGlzIGlu
IG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZpZXcuCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1F
bGVtZW50cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGFycmF5Qnl0
ZU9mZnNldCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1lbnRzKQorICAgIHN0
YXRpYyB2b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoCisgICAgICAgIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAor
ICAgICAgICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMp
CiAgICAgewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5
dGVPZmZzZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkg
ewpAQCAtMTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRzID0g
c3RkOjptaW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0gICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRoaXMg
aXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0
ZSBvZmZzZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIApAQCAtMTMwLDggKzE0MSw2IEBA
IHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAg
IFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3By
ZXZWaWV3OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wgQXJy
YXlCdWZmZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onplcm9S
YW5nZUltcGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmll
dzo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQg
YXJyYXlTaXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBBcnJh
eUJ1ZmZlclZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCgKKyAgICBpbnQgc3RhcnQsIGlu
dCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxl
bmd0aCkKIHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCArPSBhcnJheVNpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNp
b24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBIYXNoRW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFibGU7
CiAKIHN0cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVu
Y3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdhc3Rl
TWVtb3J5IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1ZmZlclZp
ZXcqKTsKKyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07CiAKICNk
ZWZpbmUgQ1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0Niw4IEBA
IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVjdFZpcnR1
YWwsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAg
JkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZDbGFzc05h
bWU6OnNsb3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0VHlw
ZWRBcnJheUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdl
VHlwZQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDggQEAKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCiAjZGVmaW5lIEpTQ19D
T01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8o
QXJyYXkpIFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAorICAgIG1hY3JvKEJZVEVTX1BFUl9F
TEVNRU5UKSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAgIG1hY3JvKERhdGUpIFwKICAgICBt
YWNybyhFcnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAg
bWFjcm8oYXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikg
XAorICAgIG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAg
bWFjcm8oYnl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8o
Ynl0ZWNvZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAgICAgbWFjcm8ocHJvcGVydHlJc0Vu
dW1lcmFibGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKICAgICBtYWNybyhzZXQpIFwKKyAg
ICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNv
ZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3JvKHN1YmFycmF5KSBcCiAgICAgbWFj
cm8odGVzdCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwpIFwKICAgICBtYWNybyh0b0ZpeGVk
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YVZpZXc6OkRh
dGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5
dGVPZmZzZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKworUGFzc1Jl
ZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcqIERhdGFWaWV3Ojp3cmFwKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
SlNEYXRhVmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJy
YXlTdHJ1Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKKyAgICAg
ICAgYnl0ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisK
KyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IERhdGFWaWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgRGF0
YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4s
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5
dGVMZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OworICAgIH0KKwor
ICAgIHZpcnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxP
YmplY3QqKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0KHVuc2ln
bmVkIG9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgewor
ICAgICAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQp
ID4gYnl0ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3Rh
dHVzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAgICAgICAgKnJlaW50
ZXJwcmV0X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzKSArIG9m
ZnNldCksCisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwg
Ym9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAo
c3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0
aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzdGF0dXMgPSB0cnVlOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KG9mZnNldCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkpOworICAgICAgICAqcmVpbnRlcnBy
ZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zmc2V0
KSA9CisgICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxlRW5k
aWFuKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRhVmlld19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAx
NTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgpAQCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxvYXQzMkFycmF5X2gKICNkZWZpbmUg
RmxvYXQzMkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJh
eSA6IHB1YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewotcHVibGljOgotICAgIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwot
ICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShjb25zdCBm
bG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVm
UHRyPEZsb2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUg
dXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERv
Ci0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQg
d2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9h
dDMyQXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVz
aW5nIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQg
aW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFy
cmF5QmFzZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBU
eXBlZEFycmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsdWUpOwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3Vi
YXJyYXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJy
YXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZp
ZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMy
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAg
IC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBj
bGFzcyBUeXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJh
eT4gRmxvYXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBU
eXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShjb25zdCBmbG9h
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
ZmxvYXQ+OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+
IEZsb2F0MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9h
dDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQzMkFycmF5KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwg
bGVuZ3RoKQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5Ojpz
dWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBs
ZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJ
bXBsPEZsb2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwor
I2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQzMkFycmF5OwogCiAj
ZW5kaWYgLy8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDk4ICsxMCwyNSBA
QAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZpbmUgRmxvYXQ2NEFycmF5X2gKIAot
I2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1YmxpYyBUeXBlZEFy
cmF5QmFzZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMg
a25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0
dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcg
Zmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJh
c2U8ZG91YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxkb3VibGU+
OjptX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlwZWRBcnJheUJhc2U8
ZG91YmxlPjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOwotICAg
IH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXkoaW50IHN0
YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIAotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZs
b2F0NjRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRB
cnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNvbnN0IGRvdWJsZSog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91
YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8RmxvYXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4g
RmxvYXQ2NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9h
dDY0QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2NEFycmF5KFBhc3NS
ZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6
c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwg
bGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5Ojpz
dWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5
SW1wbDxGbG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
KyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0NjRBcnJheTsKIAog
I2VuZGlmIC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNk
ZWZpbmUgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVi
bGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5l
cmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQg
bGVuZ3RoKTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KGJhc2VBZGRyZXNz
KCkpOyB9CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldEltcGwo
YXJyYXksIG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogZGF0
YSwgc2l6ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihkYXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5nZSh1bnNpZ25lZCBvZmZz
ZXQsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gemVyb1JhbmdlSW1wbChv
ZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksIGxlbmd0aCAqIHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgemVyb0ZpbGwo
KSB7IHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVu
Z3RoKCkgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgdHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5n
dGgoKSk7CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgo
KSk7CisgICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMt
Pmxlbmd0aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAg
ICYmIG9mZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93
CisgICAgICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkg
Y29uc3Q7CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGlu
dCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlw
ZSBnZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFs
dWU7CisgICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJh
eVZpZXdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
UGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9m
KHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNv
bnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7Cisg
ICAgUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7
CisgICAgbWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj4gPiBHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1
ZmZlcjsKKyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQ
dHI8R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVm
ZmVyLCAwLCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1
YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QK
K3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRM
ZW5ndGgoc3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZzZXQsICZsZW5ndGgpOworICAg
IGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVP
ZmZzZXQoKSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwg
b2Zmc2V0LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNBcnJh
eUJ1ZmZlclZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6d3JhcCgKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIEFkYXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xv
YmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVWYWx1ZSksIHRoaXMp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQnV0
dGVyZmx5OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpA
QCAtNjQsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyBy
ZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3Ro
KHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0K
ICAgICAKKyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJy
YXkuYnVmZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVy
KSB7IHUudHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5k
ZXhpbmdIZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpA
QCAtMTE3LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGlj
TGVuZ3RoOyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5
IHR5cGUsIGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVi
bGljbHkgdmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJf
dCB2ZWN0b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3Rv
cmFnZS4gVGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5k
IHRoZSB0eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5
OwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDhBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dDhBcnJheS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2LDkgQEAKICNpZm5kZWYgSW50OEFy
cmF5X2gKICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFz
cyBJbnQ4QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBj
cmVhdGUoY29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJl
IGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8g
SmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNz
UmVmUHRyPEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVn
cmFsVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8
SW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVm
UHRyPEludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAg
IHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
VHlwZUludDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4QXJyYXkoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0KLSAgICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBm
cmllbmQgY2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50
OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQ4X3QqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhf
dD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPElu
dDhBcnJheT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlC
YXNlPGludDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5PihsZW5ndGgpOwotfQot
Ci1JbnQ4QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFz
c1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAot
ewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRy
PEludDhBcnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBK
U0M6OkludDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1NDA4NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAs
MTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2
LDc3ICsyNiw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAogI2RlZmluZSBJbnQxNkFycmF5X2gK
IAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDogcHVibGljIEludGVn
cmFsVHlwZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IGludDE2X3QqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQx
NkFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4g
aXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBu
b3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZp
bGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNy
ZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJy
YXlCYXNlPGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxp
bnQxNl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBz
dWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlw
ZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MTY7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFr
ZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5
cGVkQXJyYXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQx
NkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+Ojpj
cmVhdGU8SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZB
cnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBl
ZEFycmF5QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVh
dGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJh
eUJhc2U8aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJheT4obGVuZ3RoKTsK
LX0KLQotSW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFs
VHlwZWRBcnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19
Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1Q
YXNzUmVmUHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2QXJyYXk+KHN0YXJ0
LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5o
IgogCiB1c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQxNkFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAkocmV2aXNp
b24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJbnQzMkFycmF5X2gKICNkZWZpbmUg
SW50MzJBcnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPElu
dDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBl
bnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSBy
ZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAg
IHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVk
KHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7
Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBpbmxp
bmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAg
IGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVu
ZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5l
IEludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1
cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19OwotCi1Q
YXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5Pihs
ZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShj
b25zdCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZmZXIs
IGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJB
cnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4obGVu
Z3RoKTsKLX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IElu
dGVncmFsVHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsK
LX0KLQotUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0K
LVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBp
bnQgZW5kKSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4oc3Rh
cnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlz
LmgiCiAKIHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2VuZGlmIC8vIEludDMyQXJyYXlfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpT
QXJyYXlCdWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19pbmZv
LCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJheUJ1
ZmZlcjo6SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
KyAgICAsIG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVm
ZmVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9CisKK0pTQXJy
YXlCdWZmZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAg
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1
ZmZlciogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJh
eUJ1ZmZlcj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwg
YnVmZmVyKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAg
ICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93
blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOwor
ICAgIAorICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5pbXBs
KCktPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
KQoreworICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZl
cio+KG9iamVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Io
CisgICAgICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSks
IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZl
cjo6cHV0KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIq
PihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9k
ZSgpLCAiQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJv
cGVydHkuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpT
QXJyYXlCdWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJheUJ1
ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0
byBkZWZpbmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJh
eUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAg
ICAKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBh
cnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgIAorICAgIEJh
c2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwg
bW9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAorCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1Ymxp
YzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZlciogY3JlYXRlKFZN
JiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAorICAgIEFycmF5
QnVmZmVyKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVl
IHByb3RvdHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSk7CisgICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9Owor
CitpbmxpbmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4o
dmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHdyYXBwZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U0FycmF5QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsKKyAgICAiRnVu
Y3Rpb24iLCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKQoreworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIpOworICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK0pTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvciogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUqIHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKQorICAg
ICAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0
cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBs
ZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAgICAgICBsZW5ndGgg
PSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRh
dGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRvIHNheQorICAgICAg
ICAvLyAibmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGFsbG9j
YXRpbmcgYW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdpdGggYSB6ZXJvIGxlbmd0aC4KKyAg
ICAgICAgbGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAgaWYgKCFidWZmZXIp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVy
KiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIGNv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVy
KTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0NvbnN0
cnVjdFR5cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAorICAg
IEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1cm4g
Q29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxE
YXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBD
YWxsVHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gK
KworI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIElu
dGVybmFsRnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgREVDTEFSRV9JTkZP
OworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGlj
IENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7
CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJDb25zdHJ1
Y3Rvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVy
UHJvdG90eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
bHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRv
cnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkp
OworICAgIAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpT
QXJyYXlCdWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UmVjZWl2ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIuIikpOworICAgIAorICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25l
IGFyZ3VtZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJf
dCBlbmQ7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVu
ZCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+
Ynl0ZUxlbmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3QnVmZmVyID0g
dGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKKyAgICBpZiAoIW5ld0J1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCk7Cisg
ICAgCisgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyUHJv
dG90eXBlOjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyUHJvdG90eXBlKQor
fTsKKworSlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorewor
fQorCit2b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAg
ICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZl
clByb3RvRnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUqIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJv
dG90eXBlID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZl
clByb3RvdHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUodm0s
IHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1
ZmZlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKyNkZWZpbmUgSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKwor
cHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogY3JlYXRlKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisgICAgREVDTEFSRV9J
TkZPOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpT
R2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8gPSB7
CisgICAgIkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitKU0FycmF5QnVmZmVyVmlldzo6Q29u
c3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLAor
ICAgIEluaXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDApCit7CisgICAgaWYgKGxlbmd0
aCA8PSBmYXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4K
KyAgICAgICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3Ro
LCBlbGVtZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uo
MCwgc2l6ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9k
ZSA9IEZhc3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYg
KG1vZGUgPT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzaXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgICAgICBhc1dv
cmRzW2ldID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
ICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBl
ZCBhcnJheSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBpZiAobGVuZ3RoID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAoIXRyeUZhc3RDYWxs
b2MobGVuZ3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5ndGgg
KiBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2Fz
dDxzaXplX3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0Fy
cmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgK
KyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBhcnJheUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgLCBtX3ZlY3RvcihzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0KQorICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJ
bmRleGluZ0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJh
eUJ1ZmZlcihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6
OmNyZWF0ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitKU0Fy
cmF5QnVmZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250
ZXh0JiBjb250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4
dC5idXR0ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBt
X2xlbmd0aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQor
eworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3aXRjaCAobV9tb2RlKSB7Cisg
ICAgY2FzZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3ZlcnNp
emVUeXBlZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAg
ICAgdm0uaGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVy
KCktPmFycmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
blByb3BlcnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9i
amVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5
dGVPZmZzZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAg
IHNsb3Quc2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRy
b2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlw
ZWRBcnJheUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSwKKyAgICAgICAgICAgIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZp
ZXc6OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1
ZmZlclZpZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0
cmljdE1vZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFycmF5
IHByb3BlcnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9v
bCBKU0FycmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBK
U0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+
KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Ynl0ZUxlbmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmJ5dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3cs
ICJBdHRlbXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7
CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpT
QXJyYXlCdWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgK
KyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zm
c2V0CisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNB
cnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxlbmd0
aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94
LgorICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAgICAg
YXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAgYXJy
YXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBCYXNl
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1v
ZGUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwp
Cit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0Fy
cmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0g
T3ZlcnNpemVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVk
QXJyYXkpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5
KQorICAgICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mg
c2VydmVzIHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBv
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVt
cGxhdGUgcGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29y
ZS12aXNpYmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2Rl
IHVzZXMgd2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVm
ZmVyCisvLyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmll
dy4KKy8vCisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1
c3QgYSBtYXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBo
YXZpbmcgYXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVj
dCB0byB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9m
CisvLyBzZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBv
ZiBvYmV5aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQg
bm93LgorLy8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28g
bXVjaCBjcmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJs
ZS4KKworLy8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5n
IG9uIGhvdyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFu
eXRoaW5nIHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhl
IERPTS1zcGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1v
ZGUgeworICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBw
b2ludHMgdG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQg
TSA9IEZhc3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVu
dGlyZWx5IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAg
CisgICAgLy8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3
YXN0ZSB0b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0
byBhIHNsb3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2lu
dHMgdG8gYSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQg
TSA9IE92ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJl
bHkgYnkKKyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQg
YSBmaW5hbGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAor
ICAgIC8vIEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidz
IEluZGV4aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5j
ZSB0byB0aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFy
cmF5IHZpZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAv
LyB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVs
VHlwZWRBcnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAg
ICBXYXN0ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJy
YXlCdWZmZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8v
IEFycmF5QnVmZmVyIGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24g
YW5kIHdhc3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhl
IEJ1dHRlcmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFs
d2F5cyB2aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNs
YXNzJ3MKKy8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhp
c3QgLSB3ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJW
aWV3IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0
U2l6ZUxpbWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJf
dCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChs
ZW5ndGggKiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAg
ICAgICAgJiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKTsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAg
ICAgICAgZW51bSBJbml0aWFsaXphdGlvbk1vZGUgeyBaZXJvRmlsbCwgRG9udEluaXRpYWxpemUg
fTsKKyAgICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0cnVjdGlvbkNvbnRl
eHQoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXpl
LCBJbml0aWFsaXphdGlvbk1vZGUgPSBaZXJvRmlsbCk7CisgICAgICAgIAorICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgICAgICAgICAgVk0mLCBTdHJ1
Y3R1cmUqLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAg
ICAgICB2b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgICAgICB1
aW50MzJfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICBUeXBl
ZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgIEJ1dHRl
cmZseSogYnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAg
dm9pZCogbV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBl
ZEFycmF5TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAg
fTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENv
bnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwt
b24gbmF0aXZlIGJ1ZmZlci4gQWxzbyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAKKyAg
ICAvLyBpZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoKTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2b2lk
KiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQo
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisg
ICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mVmVjdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBt
X3ZlY3Rvcik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0aCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U0FycmF5QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lk
IGZpbmFsaXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRl
c0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdm9pZCog
bV92ZWN0b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJheU1vZGUgbV9t
b2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVy
Vmlld19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBK
U0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3Lmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNl
c3NhcnkoKQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAg
ICBtZXRob2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOworfQorCitpbmxp
bmUgQXJyYXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dE
b3duQW5kV2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+
aW5kZXhpbmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJu
IG1ldGhvZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9p
ZCBKU0FycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09IFdh
c3RlZnVsVHlwZWRBcnJheSk7CisgICAgbV9sZW5ndGggPSAwOworICAgIG1fdmVjdG9yID0gMDsK
K30KKworaW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkKK3sK
KyAgICBpZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAgICAgICBBU1NFUlQo
bV9tb2RlID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IGRlbHRhID0K
KyAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAx
NTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJK
U0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgpAQCAtMjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRX
YXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQ2VsbDo6Z2V0
VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE1NDA4
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTTG9j
ay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UeXBl
VHJhaXRzLmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5
VmlzaXRvcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OwogY2xh
c3MgSlNEZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE0OSw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgU3Ry
dWN0dXJlKiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFs
aWRhdGVkR2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAgICBzdGF0aWMgY29uc3QgVHlwZWRB
cnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZWRBcnJheU5vbmU7CisgICAgc3Rh
dGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IE5vdFR5cGVk
QXJyYXk7CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CkBAIC0x
NjcsNiArMTY4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJW
aWV3Kik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
dy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0RhdGFWaWV3LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRl
ICJEYXRhVmlldy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXc6OnNfaW5m
byA9IHsKKyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmlldyhWTSYgdm0sIENv
bnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQorewor
fQorCitKU0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVm
ZmVyLAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7Cisg
ICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFB
cnJheUJ1ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNl
dCwgYnl0ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAgICAgICAgICAgZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2Yg
cmFuZ2Ugb2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVj
dHVyZSwgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExB
VEZPUk0oKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpzZXQoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERhdGFW
aWV3PiBKU0RhdGFWaWV3Ojp0eXBlZEltcGwoKQoreworICAgIHJldHVybiBEYXRhVmlldzo6Y3Jl
YXRlKGJ1ZmZlcigpLCBieXRlT2Zmc2V0KCksIGxlbmd0aCgpKTsKK30KKworYm9vbCBKU0RhdGFW
aWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0
KTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVu
Z3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5n
dGgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFW
aWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAg
ICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3Ro
KSwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBK
U0RhdGFWaWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQor
eworICAgIEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVj
dCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQorCitTdHJ1Y3R1cmUq
IEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
RGF0YVZpZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUgIkRhdGFWaWV3Lmgi
CisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTRGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZWxlbWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXcoVk0m
LCBDb25zdHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0
YVZpZXcqIGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFjdHVh
bGx5IHdvcms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8gcGxhY2F0ZSBzb21l
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAgICBzdGF0aWMgSlNE
YXRhVmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBK
U09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBQ
YXNzUmVmUHRyPERhdGFWaWV3PiB0eXBlZEltcGwoKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURhdGFWaWV3OworCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9v
bCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25B
bmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsK
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0Rh
dGFWaWV3X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUu
aCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1
ZGUgIkxvb2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBlZEFy
cmF5QWRhcHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0gewor
ICAgICJEYXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0
YVZpZXdUYWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5cGUp
Cit9OworCisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBk
YXRhVmlld1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dl
dEludDggICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50OCAg
ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVt
fEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9G
dW5jR2V0SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVp
bnQxNiAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAgRG9u
dEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAg
Z2V0VWludDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBkYXRh
Vmlld1Byb3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAorICBnZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0ICAg
ICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAgICAg
IGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0
VWludDE2ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMyICAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNTZXRVaW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0Rmxv
YXQzMiAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorQGVu
ZAorKi8KKworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQor
CitKU0RhdGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBwcm90
b3R5cGUgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3UHJv
dG90eXBlPih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3RydWN0
dXJlKTsKKyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJv
dG90eXBlOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJv
cGVydHlTbG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6
OmRhdGFWaWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0
KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJv
dG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25E
ZXNjcmlwdG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1Rh
YmxlKGV4ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAg
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+CitFbmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0Rh
dGFWaWV3KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9k
IG11c3QgYmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5k
aWFuID0gZmFsc2U7CisgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSk7CisgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVu
dENvdW50KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVuZ3RoKCk7CisgICAg
aWYgKGVsZW1lbnRTaXplID4gYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCAt
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIp
KTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0
X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRh
Vmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5
dGVzKHZhbHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRv
SlNWYWx1ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2Rl
ZEpTVmFsdWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0
YVZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7Cisg
ICAgaWYgKCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEg
RGF0YVZpZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
TmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikp
OworICAgIAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJ
bnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4g
PSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRv
Qm9vbGVhbihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgoKTsKKyAgICBpZiAo
ZWxlbWVudFNpemUgPiBieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoIC0gc2l6
ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOwor
ICAgIAorICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4p
KQorICAgICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgKnJlaW50ZXJw
cmV0X2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihk
YXRhVmlldy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQx
NihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8
SW50MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQor
CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dl
dFVpbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDMyQWRh
cHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRh
dGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldERhdGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJ
bnQ4KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQ4QWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRh
PEludDE2QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0
VWludDE2KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MTZBZGFw
dG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
YVZpZXdQcm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBz
ZXREYXRhPFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9h
dDY0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDY0QWRhcHRv
cj4oZXhlYyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjaW5jbHVkZSAiSlNEYXRhVmll
d1Byb3RvdHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNEYXRhVmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3
UHJvdG90eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3Qgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6
CisgICAgSlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwor
ICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSlNGbG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJheV9o
CisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJh
eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0
QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0NjRBcnJh
eV9oCisjZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1
ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU19FWFBPUlRf
UFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDhBcnJheUNsYXNzSW5mbygpOworSlNfRVhQ
T1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7CitK
U19FWFBPUlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDMyQXJyYXlDbGFzc0luZm8o
KTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0VWludDhBcnJheUNsYXNz
SW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50OENsYW1w
ZWRBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBn
ZXRVaW50MTZBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJ
bmZvKiBnZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3Qg
Q2xhc3NJbmZvKiBnZXRGbG9hdDMyQXJyYXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRF
IGNvbnN0IENsYXNzSW5mbyogZ2V0RmxvYXQ2NEFycmF5Q2xhc3NJbmZvKCk7CisKKy8vIEEgdHlw
ZWQgYXJyYXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmpl
Y3QgYXMgc2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIg
byA9IG5ldyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUg
ZmllbGRzOgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAg
ICAgQnV0dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUq
IFYKKy8vICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRo
ZXNlIGZpZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBG
SVhNRTogTWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1
bnVzZWQgYnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IK
Ky8vIG9uZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUg
dHlwZWQgYXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdl
ZCBjb3BpZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3Nl
IHRoaW5ncyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9y
CisvLyBzaW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0
aGUgcG9pbnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZp
ZXcuIEwgaXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3
J3MgdHlwZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVk
IGJ5IGFuIEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93
IGl0J3MgY29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZh
Y2U7IEkgdXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsK
Ky8vICAgICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZp
ZXdUeXBlOworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBz
dGF0aWMgaW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05h
dGl2ZShKU1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8g
ICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBK
U0FycmF5QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmll
dyBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0
eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoK
KyAgICBzdGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRl
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjx0eXBlbmFtZSBB
ZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiBjcmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPHR5cGVu
YW1lIEFkYXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSk7IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9s
ZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25z
dCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1f
dmVjdG9yKTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3Io
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUqPihtX3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQg
dG8gbWF0Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3Vw
cG9ydHMgLSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRl
eFF1aWNrbHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7
CisgICAgfQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgewor
ICAgICAgICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRW
ZWN0b3IoKVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91
YmxlKHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUo
Z2V0SW5kZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFs
dWUgZ2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRh
cHRvcjo6dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwg
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwg
bV9sZW5ndGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFw
dG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVp
Y2tseSh1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhR
dWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0K
KyAgICAKKyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGksIEpTVmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5
cGUgdmFsdWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VRdWlja2x5KHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNl
dCA8PSBtX2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3Ro
CisgICAgICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsg
bGVuZ3RoID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5
LCBleGNlcHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8g
YXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVSYW5nZShFeGVjU3RhdGUq
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBv
biBlcnJvci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAgYm9vbCBzZXRX
aXRoU3BlY2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1
bCwgYW5kIGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAgLy8gdGhlbiBp
dCB3aWxsIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChFeGVjU3RhdGUq
LCBKU09iamVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAg
ICBQYXNzUmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0eXBlZEltcGwoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoYnVmZmVyKCksIGJ5
dGVPZmZzZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5ldmVyIGFjY2Vzc2VkIGRpcmVjdGx5
LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24gc29tZSBjb21waWxlcnMuCisgICAg
CisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyogaW5mbygpCisgICAgeworICAgICAgICBzd2l0
Y2ggKEFkYXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAg
ICAgICAgcmV0dXJuIGdldEludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICAgICAgICAgIHJldHVybiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7CisgICAg
ICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldEludDMyQXJyYXlDbGFz
c0luZm8oKTsKKyAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICByZXR1cm4gZ2V0
VWludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0VWludDhDbGFtcGVkQXJyYXlDbGFzc0luZm8oKTsKKyAgICAg
ICAgY2FzZSBUeXBlVWludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldFVpbnQxNkFycmF5Q2xh
c3NJbmZvKCk7CisgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBn
ZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAg
ICAgICAgICAgcmV0dXJuIGdldEZsb2F0MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0NjRBcnJheUNsYXNzSW5m
bygpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBB
ZGFwdG9yOjp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCBU
eXBlZEFycmF5Q2xhc3NJbmZvczsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworCisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFs
bG9jYXRlcyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhl
IEMgaGVhcCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2Nh
dGVzIGluIHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1v
cnkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgoraW5saW5lIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRv
cjo6Vmlld1R5cGU+IHRvTmF0aXZlVHlwZWRWaWV3KEpTVmFsdWUgdmFsdWUpCit7CisgICAgdHlw
ZW5hbWUgQWRhcHRvcjo6SlNWaWV3VHlwZSogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8dHlwZW5h
bWUgQWRhcHRvcjo6SlNWaWV3VHlwZSo+KHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGlj
OgorICAgIHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmplY3Qq
LCBTdHJ1Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwor
ICAgIAorICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
ZWxsKiwgQ29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShK
U0NlbGwqLCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPFZpZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlw
ZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBu
YW1lKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5CWVRF
U19QRVJfRUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVtZW50U2l6ZSksIERvbnRFbnVt
IHwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0Ns
YXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2Jq
ZWN0KiBwcm90b3R5cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
cmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0
dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAg
ICAgIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT50
eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBlZEFycmF5U3Rv
cmFnZVR5cGUpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAg
ICAgIGlmIChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiRGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50
LiIpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9u
IGRvZXNuJ3Qgc2F5IHNvLCBpdCdzIGNvcnJlY3QgdG8gc2F5CisgICAgICAgIC8vICJuZXcgSW50
OEFycmF5KCkiLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgb2YgemVy
bworICAgICAgICAvLyBsZW5ndGguCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmll
d0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKSk7CisgICAgfQorICAgIAorICAgIGlm
IChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGV4ZWMtPmFyZ3VtZW50KDApKSkgeworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQz
MihleGVjKSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKSB7
CisgICAgICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgJSBWaWV3Q2xh
c3M6OmVsZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBi
eXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOworICAg
ICAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAvIFZpZXdD
bGFzczo6ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgb2Zmc2V0LCBs
ZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3Jh
Z2VUeXBlID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFycmF5QnVmZmVyIGZvciB0aGUgZmly
c3QgYXJndW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBldmVyeXRoaW5nIGJ1dCBEYXRhVmll
dywgd2UgYWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9mOgorICAgIC8vIC0gQW5vdGhlciBh
cnJheS4gVGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2YgdGhhdCBhcnJheS4KKyAgICAvLyAt
IEFuIGludGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJheSBvZiB0aGF0IGxlbmd0
aCBhbmQgemVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAgICBpZiAoSlNPYmplY3QqIG9iamVj
dCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0g
Vmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMs
IG9iamVjdCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50KDApLmlzSW50MzIoKSkKKyAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCku
YXNJbnQzMigpOworICAgIGVsc2UgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc051bWJlcigpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
SW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQuIikpOworICAgIGVsc2UgeworICAgICAgICBs
ZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpOwor
ICAgICAgICBpZiAobGVuZ3RoICE9IGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpCisgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
SW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQgKGZyYWN0aW9uYWwgbGVuZ3RocyBub3QgYWxs
b3dlZCkuIikpOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5n
dGggaXMgbmVnYXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNz
OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPFZpZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9
IGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2Fs
bFR5cGUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47
CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19o
CisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiRXJyb3Iu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygK
KyAgICBWTSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZt
LCBjb250ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVjLT52
bSgpLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsK
KyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAg
ICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhl
Yy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0o
KSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0
IGNvbnRleHQoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRv
bnRJbml0aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBy
ZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihl
eGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmll
dzo6dmVyaWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zm
c2V0LCBsZW5ndGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAgICAgICBleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5n
ZSBvZiBidWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rp
b25Db250ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZz
ZXQsIGxlbmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1w
bCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigpOwor
ICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGlt
cGwtPmJ5dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAg
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NSZWZQdHI8dHlwZW5h
bWUgQWRhcHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxP
YmplY3QtPnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2YWxpZGF0ZVJh
bmdlKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUg
b3V0IG9mIGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNT
dGF0ZSogZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBn
ZXR0aW5nIHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmlu
Zy4gV2VsbCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJl
CisgICAgLy8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFy
cmF5LiBCdXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBz
aWRlLWVmZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAor
ICAgIC8vIGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNl
ZWluZyBsZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBz
ZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3Ro
ZXItPmxlbmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0
LCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLT5s
ZW5ndGgoKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVk
bHkuIikpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCAr
IGksIG90aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjaSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3Rv
cmFnZVR5cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBm
YXN0IGNhc2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgor
ICAgICAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5n
dGgsIG90aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRlUmFu
Z2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBl
ZFZlY3RvcigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMs
IGpzQ2FzdDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNl
IFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganND
YXN0PEpTSW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5
cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTSW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVV
aW50ODoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpT
VWludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50
OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2Fz
dDxKU1VpbnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNh
c2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywg
anNDYXN0PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2Fz
ZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNl
IFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBq
c0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywg
anNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAo
IXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdo
dCBub3csIHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCAr
IGksIG9iamVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVt
YmVyKHRoaXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRl
TGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0
ZUxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFBy
b3BlcnR5TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHko
aW5kZXgpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlj
a2x5KGluZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAg
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLAorICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJl
cih0aGlzT2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0
SW5kZXhRdWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8g
RmlyZWZveCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhl
IGxlbmd0aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxs
IGRvIHRoZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVy
dHlOYW1lOjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhl
YywgaW5kZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93
KQoreworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1h
dGNoaW5nIEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0
dGVtcHRzIHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGll
cyBvbiB0eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMu
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisg
ICAgICAgIHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbklu
ZGV4KQorICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGlu
ZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAK
KyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxl
dGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAg
ICB8fCBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFY
X0FSUkFZX0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5nZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIXRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4g
TUFYX0FSUkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRo
cm93KTsKKyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgICAgICAg
ICAgdGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUp
LCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0
aGlzT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAv
LyBZZXMsIHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcg
aWYgeW91IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgorICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseShleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jv
b2wgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlO
YW1lKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAg
ICAgcmV0dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAgICAgICAg
ICAgY2VsbCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpOworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KG9iamVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmpl
Y3QtPm1fbGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0
cmluZzo6bnVtYmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewor
ICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhp
c09iamVjdCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3Is
IHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCog
Y2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9y
Q29weVRva2VuCisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVj
dC0+bV92ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1f
dmVjdG9yOworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3Bh
Y2UodGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9s
ZFZlY3RvciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1f
dmVjdG9yID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0
aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tp
bmdTdG9yZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1
c2Ugd2Ugd2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAg
IC8vIGRvbid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25s
eSBhbGxvY2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5l
Y2Vzc2FyeSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdl
IGhhdmUgZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24g
dG8gdGhlICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFu
c2ZlciBhIGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwg
dGVtcG9yYXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0
bHksIGluIHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJy
YXkpIGJ1dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNl
cnRhaW5seSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBm
YXN0IHR5cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwg
b2YgdGhlbSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNh
c2UsIHlvdXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxp
emVzIHdoYXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dl
ciBhIEdDIHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhh
ZCogZG9uZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5Lgor
ICAgIEhlYXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JB
V2hpbGUgZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJ
bmRleGluZ0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNp
emUoKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5
CisgICAgICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJ
bmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVt
b3J5IGlmIGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkg
PQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5t
X3ZlY3RvciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3Qt
Pm1fYnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAg
ICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5t
X21vZGUpIHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVu
Z3RoKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVk
QXJyYXk6CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAi
c3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJp
Z2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFs
bG9jYXRlZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBB
cnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVj
dC0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgV2Fz
dGVmdWxUeXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5k
ZXhpbmdIZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICB0aGlzT2Jq
ZWN0LT5tX3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9
IFdhc3RlZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwg
YnVmZmVyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46Omdl
dFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAg
ICBFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIERF
Q0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFcnJv
ci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0Ns
YXNzKiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFs
dWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQg
YXJyYXkgdmlldyIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4
cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpKTsKKyAgICAKKyAgICBKU09iamVjdCogc291
cmNlQXJyYXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwor
ICAgIGlmICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0
IikpOworICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50
MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIG9mZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXkt
PmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVj
LCBzb3VyY2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
U3ViYXJyYXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyog
dGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkp
OworICAgIGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5
IHZpZXciKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3Rl
ZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IAorICAgIGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikg
eworICAgICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2Jq
ZWN0LT5sZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRlciBh
c3NlcnQgdGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhpc0xl
bmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdhdGl2
ZSBpbmRpY2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAgICAg
YmVnaW4gPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KHRoaXNMZW5ndGggKyBiZWdpbiksIDAp
OworICAgIGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxp
bnQ+KHRoaXNMZW5ndGggKyBlbmQpLCAwKTsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNl
cyB0byB0aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7Cisg
ICAgQVNTRVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNf
Y2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRv
IGJlZ2luLgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VS
VChlbmQgPj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YXJyYXlCdWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0
aGlzTGVuZ3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlT
dHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIFZp
ZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMsIHN0cnVj
dHVyZSwgYXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSArIG9m
ZnNldCAqIFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCk7CisgICAgCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+
OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZp
ZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5zZXQsIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250
RW51bSwgMik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zdWJh
cnJheSwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8Vmlld0NsYXNzPiwg
RG9udEVudW0sIDIpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+QllURVNf
UEVSX0VMRU1FTlQsIGpzTnVtYmVyKFZpZXdDbGFzczo6ZWxlbWVudFNpemUpLCBEb250RW51bSB8
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBl
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBl
LT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5
cGU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDg3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09i
amVjdC5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUg
IkpTT05PYmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
cy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVnYWN5UHJvZmlsZXIu
aCIKICNpbmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRl
cihleGVjLT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCks
IGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJl
Y3RBY2Nlc3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBw
cm90b0FjY2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90
eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0o
KSwgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJQcm90
b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0
ZShleGVjLCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhl
Yy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFy
cmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0ludDhBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50OEFycmF5UHJvdG90
eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUu
Z2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlw
ZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhl
YywgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQz
MkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0
KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywg
dGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0lu
ZGV4KFR5cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpT
VWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4Q2xh
bXBlZEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVV
aW50MTYpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXlQcm90
b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBK
U1VpbnQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVGbG9hdDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJh
eVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMs
IHRoaXMsIEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNE
YXRhVmlld1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0YVZpZXdQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSkpKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0
aGlzLCBKU0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9h
cnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlSW50OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDE2KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXk6OmNy
ZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZUludDE2KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQzMildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQzMkFycmF5Ojpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlVWludDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJheTo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChU
eXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgo
VHlwZVVpbnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50
OENsYW1wZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIHRoaXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlz
LCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSkpOwor
ICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3RydWN0dXJlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCkp
KTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5zdHJ1Y3R1cmUuc2V0
KGV4ZWMtPnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+
dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBl
LmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0uc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlU3RydWN0dXJl
KGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnBy
b3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcp
XS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVj
dHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3
KV0ucHJvdG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0
aGlzLCBqc051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
anNOdWxsKCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVz
ZXQoSlNWYWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmplY3Q6OmNyZWF0ZShleGVj
LCB0aGlzLCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5NYXRoLCBNYXRoT2Jq
ZWN0OjpjcmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKKyAgICAK
KyAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29uc3RydWN0b3IgPSBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7CisgICAgRml4ZWRBcnJh
eTxJbnRlcm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiB0eXBlZEFy
cmF5Q29uc3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
SW50OCldID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50OEFycmF5
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9u
UHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90
eXBlLmdldCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0lu
ZGV4KFR5cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBK
U0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUlu
dDE2KV0ucHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25z
dHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUodGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVj
LT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJyYXkiKTsKKyAgICB0
eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBKU1VpbnQ4QXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50OEFy
cmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OENsYW1w
ZWQpXSA9IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWlu
dDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRo
aXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlw
ZVVpbnQ4Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xhbXBlZEFycmF5Iik7Cisg
ICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYpXSA9IEpTVWludDE2
QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6
Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0
KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSwg
IlVpbnQxNkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVV
aW50MzIpXSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDMy
QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMild
LnByb3RvdHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVj
dG9yc1t0b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGUodGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4
ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlz
W3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDMyQXJyYXkiKTsK
KyAgICB0eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXSA9IEpTRmxv
YXQ2NEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVj
dG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5n
ZXQoKSwgIkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRl
eChUeXBlRGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpT
RGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFW
aWV3KV0ucHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAKKyAgICBtX2FycmF5QnVm
ZmVyUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERv
bnRFbnVtKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJbmRleCA9IE5VTUJF
Ul9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7CisgICAgICAgIG1f
dHlwZWRBcnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAg
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhl
YywgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMpKSwg
dHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAg
fQogCiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4sIGpzTmFOKCksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTU0MCw2ICs1OTYsMTQgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKKyAgICAKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclByb3RvdHlwZSk7CisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgaS0tOykg
eworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBlZEFycmF5c1tpXS5w
cm90b3R5cGUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBlZEFy
cmF5c1tpXS5zdHJ1Y3R1cmUpOworICAgIH0KIH0KIAogSlNWYWx1ZSBKU0dsb2JhbE9iamVjdDo6
dG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpT
Q2xhc3NSZWYuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5
cGUuaCIKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBA
IC0xNjYsNiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3JlZ0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmlu
Z09iamVjdFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFs
RnVuY3Rpb25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQ
cm90b3R5cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJh
eURhdGEgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3RvdHlwZTsKKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07CisgICAgCisgICAg
Rml4ZWRBcnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiBt
X3R5cGVkQXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQb2ludGVyc1tTcGVj
aWFsOjpUYWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFu
ZCBKSVQuCiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVn
RXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVz
QXJyYXlTdHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJl
KiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ09iamVjdFN0
cnVjdHVyZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGFycmF5
QnVmZmVyUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5n
ZXQoKTsgfQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgU3RydWN0dXJl
KiB0eXBlZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0
KCk7CisgICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVjaWFsOjpQb2ludGVy
IHBvaW50ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ludDhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNJbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50OEFycmF5
X2gKKyNkZWZpbmUgSlNJbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgor
CisjZW5kaWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNJbnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpT
VHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBKU0ludDMyQXJyYXlfaAorI2RlZmluZSBKU0ludDMyQXJyYXlf
aAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29u
c3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5
Q29uc3RydWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZp
bmUgTUFLRV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpT
IyN0eXBlIyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZSMjQ29u
c3RydWN0b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlw
ZSMjQ29uc3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8o
SW50MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWlu
dDE2QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQz
MkFycmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRhVmll
dyk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0
cnVjdG9ycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzX2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1ZGUg
IkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5PiBK
U0ludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0ludDMy
QXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcjxKU1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWlu
dDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4g
SlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5
PiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5o
IgorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBN
QUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5
cGUjI1Byb3RvdHlwZTo6c19pbmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGUjI1By
b3RvdHlwZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBl
IyNQcm90b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50
MTZBcnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJy
YXkpOworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2
QXJyYXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFy
cmF5KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5
cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
ZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisjZGVmaW5lIEpTVHlwZWRBcnJheVByb3Rv
dHlwZXNfaAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIK
KyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50OEFycmF5PiBKU0ludDhBcnJh
eVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJ
bnQxNkFycmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5UHJvdG90eXBlOwor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpT
VWludDhBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGU8SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTsK
K3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MTZBcnJheT4g
SlNVaW50MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQz
MkFycmF5UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZTxKU0Zsb2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU7CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5
cGVkQXJyYXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRl
ICJHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBj
b25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7IFwKKyAgICAgICAgI3R5
cGUgIkFycmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBcCisgICAg
ICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5KSBcCisgICAgfTsgXAorICAg
IGNvbnN0IENsYXNzSW5mbyogZ2V0IyN0eXBlIyNBcnJheUNsYXNzSW5mbygpIHsgcmV0dXJuICZK
UyMjdHlwZSMjQXJyYXk6OnNfaW5mbzsgfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0VfU19J
TkZPKEludDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsKK01B
S0VfU19JTkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9TX0lO
Rk8oVWludDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2NCk7
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgSlNUeXBlZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAi
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBl
ZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5Owor
dHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJh
eTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4
QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0
b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OEFy
cmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhB
cnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFt
cGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OENsYW1wZWRBcnJheV9o
CisKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xhbXBl
ZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVWludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDE2QXJy
YXlfaAorI2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMu
aCIKKworI2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgSlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25zX2gK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTQw
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdl
OwogICAgIHYoYm9vbCwgb2JqZWN0c0FyZUltbW9ydGFsLCBmYWxzZSkgXAogICAgIHYoYm9vbCwg
c2hvd09iamVjdFN0YXRpc3RpY3MsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgbG9nR0Ms
IGZhbHNlKSBcCiAgICAgdih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCkgXAogICAgIHYoYm9v
bCwgcmVjb3JkR0NQYXVzZVRpbWVzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRp
c3RpY3NBdEV4aXQsIGZhbHNlKSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcnJh
eUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigp
IHsgfQorCitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5
QnVmZmVyKiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2
ZS0+bV93cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAgIEpT
QXJyYXlCdWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhl
Yy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBuYXRpdmUpOwor
ICAgIG5hdGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJheUJ1ZmZlcj4ocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFy
cmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZWZhdWx0IGNv
bnRyb2xsZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisvLyBh
cnJheSBidWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29yZS4gVGhpcyBp
c24ndCB3aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1c2VzIHdoZW4g
cnVubmluZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgorLy8KKy8vIC0g
SWYgdGhlIEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZmZXIgc3RheXMg
YWxpdmUuCisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBhIEpTQXJyYXlC
dWZmZXIgYWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgaXQgZGlk
bid0IGRpZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xhc3MgU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVi
bGljOgorICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+U2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZm
ZXIqIHRvSlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDEzICsyMzAsMTEgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAg
cmV0dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAg
fHwgaXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUo
KSk7Ci0gICAgfQorICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29u
c3Q7CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2RlZmlu
ZSBTdHJ1Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
IApAQCAtMTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpn
ZXRDb25jCiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVl
SWdub3JlZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIo
Y29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGll
cyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICgh
aXNUeXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZm
ZXJWaWV3Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGlu
ZSBib29sIFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlB
ZGFwdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRB
cnJheUFkYXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBl
bmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFy
ZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBW
aWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlw
ZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVl
QXJnOworCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVl
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05h
dGl2ZSh2YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9O
YXRpdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2
YWx1ZS5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIo
ZXhlYykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTwKKyAgICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUg
SlNWaWV3VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3Qg
RmxvYXRUeXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAg
dHlwZWRlZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcg
SlNWaWV3VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0g
dHlwZVZhbHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKFFOYU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0IElu
dDhBZGFwdG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7Citz
dHJ1Y3QgVWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3Qg
VWludDE2QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFw
dG9yOworc3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiBjbGFzcyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5
VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8VWludDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVy
aWNUeXBlZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVk
ZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJy
YXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQx
NkFycmF5OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpT
SW50MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9y
PiBKU1VpbnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xh
bXBlZEFkYXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFy
cmF5OworCitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGlu
dDhfdCwgSW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQx
NkFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXks
IEpTSW50MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50
ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXks
IFR5cGVJbnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJh
eUFkYXB0b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsg
fTsKK3N0cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50
MTZfdCwgVWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVj
dCBVaW50MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWlu
dDMyQXJyYXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMy
QWRhcHRvciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNG
bG9hdDMyQXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBG
bG9hdFR5cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJh
eSwgVHlwZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAg
IHR5cGVkZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmll
d1R5cGU7CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAg
c3RhdGljIGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7
CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4g
MjU1OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4g
Y2xhbXAodmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFz
TnVtYmVyKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAg
ICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJs
ZSB0b0RvdWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGRvdWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVp
bnQ4X3QgY2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDAp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAg
ICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bHVlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVk
QXJyYXlBZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlD
b250cm9sbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxlcjo6
VHlwZWRBcnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRB
cnJheUNvbnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29u
dHJvbGxlcl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsK
K2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9i
amVjdDsKKworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxU
eXBlZEFycmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5
cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+VHlw
ZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRv
SlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0
b3JfaAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBl
ZEFycmF5VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0g
ICAgVHlwZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5
VWludDgsCi0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2
LAotICAgIFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlw
ZWRBcnJheUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAg
VHlwZWRBcnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAg
ICwgbV9zdG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7
Ci0gICAgfQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvLCBzaXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAg
OiBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3Jh
Z2VPZmZzZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsK
LSAgICB9Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9z
dG9yYWdlT2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlw
ZWRBcnJheVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRU
eXBlZEFycmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91
bmRpbmcsCi0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5SW5saW5lc19oCisjZGVmaW5lIFR5cGVk
QXJyYXlJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5o
IgorI2luY2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
SW5saW5lcy5oIgorCisjZW5kaWYgLy8gVHlwZWRBcnJheUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVkZSAiSlNEYXRh
Vmlldy5oIgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpTSW50OEFycmF5
OjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBKU1VpbnQ4QXJy
YXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBK
U1VpbnQ4Q2xhbXBlZEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAg
IHJldHVybiBKU0ludDE2QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
ICAgIHJldHVybiBKU1VpbnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MzI6Cisg
ICAgICAgIHJldHVybiBKU0ludDMyQXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6
CisgICAgICAgIHJldHVybiBKU1VpbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlRmxv
YXQzMjoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBU
eXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5OjppbmZvKCk7CisgICAg
Y2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3OjppbmZvKCk7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVkQXJy
YXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5
cGVJbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAg
IG91dC5wcmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVV
aW50ODoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDhD
bGFtcGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAg
IG91dC5wcmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91dC5w
cmludCgiVHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURhdGFW
aWV3OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5
VHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK3N0cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRBcnJheVR5cGUgeworICAgIE5vdFR5
cGVkQXJyYXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5cGVVaW50OENs
YW1wZWQsCisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlwZUludDMyLAor
ICAgIFR5cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0NjQsCisgICAg
VHlwZURhdGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUyBU
eXBlRGF0YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30KKwor
aW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZp
ZXc6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6
CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAg
ICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6
CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVp
bnQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNl
IFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlw
ZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJ
bnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAg
ICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50
MzI6CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zs
b2F0KFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBU
eXBlSW50MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
K3sKKyAgICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5
cGVkQXJyYXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4g
SW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJ
bnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJ
bnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBV
aW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRh
cHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxV
aW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBA
CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBA
CiAjaWZuZGVmIFVpbnQ4QXJyYXlfaAogI2RlZmluZSBVaW50OEFycmF5X2gKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJh
eUJhc2U8dWludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBh
c3NSZWZQdHI8VWludDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlh
bGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0
OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0
KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQg
c3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgaW5saW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3Rv
ciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNl
PHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90
Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJh
eT4gVWludDhBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhB
cnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhB
cnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1
aW50OF90Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsK
LX0KLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxp
emVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhf
dD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDhB
cnJheTo6VWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1
aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxV
aW50OEFycmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhB
cnJheT4gVWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewot
ICAgIHJldHVybiBzdWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6
VWludDhBcnJheTsKIAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9u
IDE1NDA4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjUgQEAKICAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCiAjaWZuZGVm
IFVpbnQ4Q2xhbXBlZEFycmF5X2gKICNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAogCi0jaW5j
bHVkZSAiVWludDhBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBVaW50OEFycmF5
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlz
IGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJl
dHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5n
IGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gSXQncyBvbmx5
IG5lZWRlZCB0byBwb3RlbnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBhcnJheQotICAg
IC8vIHdhcyBjcmVhdGVkIHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRp
b24gcGF0aHMKLSAgICAvLyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgIGlubGluZSB2
b2lkIHplcm9GaWxsKCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0
OwotICAgIGlubGluZSB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsKLQot
ICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3Rh
cnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJh
cnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBn
ZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5k
IGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVk
QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4
Q2xhbXBlZEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENs
YW1wZWRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVu
Z3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0
aWFsaXplZDxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBVaW50OENsYW1w
ZWRBcnJheTo6emVyb0ZpbGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7Ci19Ci0K
LXZvaWQgVWludDhDbGFtcGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVl
KQotewotICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChzdGQ6OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVlID0gMDsKLSAg
ICBlbHNlIGlmICh2YWx1ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0gICAgZGF0YSgp
W2luZGV4XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19Ci0KLVVpbnQ4
Q2xhbXBlZEFycmF5OjpVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogVWludDhBcnJh
eShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4Q2xhbXBl
ZEFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAi
VHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsKIAogI2VuZGlm
IC8vIFVpbnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAog
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAog
I2lmbmRlZiBVaW50MTZBcnJheV9oCiAjZGVmaW5lIFVpbnQxNkFycmF5X2gKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlPHVpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMg
a25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0
dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcg
Zmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFz
ZTx1aW50MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQx
Nl90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtl
IGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlw
ZWRBcnJheUJhc2U8dWludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWlu
dDE2QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD46OmNyZWF0ZTxVaW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVp
bnQxNkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQx
NkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJy
YXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3Rh
cnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXlJbXBsPFVpbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MTZBcnJheTsKIAog
I2VuZGlmIC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAog
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAog
I2lmbmRlZiBVaW50MzJBcnJheV9oCiAjZGVmaW5lIFVpbnQzMkFycmF5X2gKIAotI2luY2x1ZGUg
IkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFy
cmF5QnVmZmVyOwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlPHVpbnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVu
c2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMg
a25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0
dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcg
Zmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGVV
bmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFz
ZTx1aW50MzJfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQz
Ml90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtl
IGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlw
ZWRBcnJheUJhc2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWlu
dDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNz
UmVmUHRyPFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQzMl90KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD46OmNyZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8VWludDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZl
cj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVp
bnQzMkFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBy
ZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQz
MkFycmF5PihsZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCi0gICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJy
YXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3Rh
cnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6
OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJy
YXlJbXBsPFVpbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlND
CisjaW5jbHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MzJBcnJheTsKIAog
I2VuZGlmIC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFy
c2VyQXJlbmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9i
amVjdC5oIgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU291cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtODcsNiArODgsNyBAQCBleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGFycmF5Q29uc3RydWN0b3JUCiBleHRlcm4gY29uc3QgSGFzaFRhYmxl
IGFycmF5UHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xlYW5Qcm90
b3R5cGVUYWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0ZXJuIGNv
bnN0IEhhc2hUYWJsZSBkYXRhVmlld1RhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRl
VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwogZXh0
ZXJuIGNvbnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMTQ1LDYgKzE0Nyw3
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGFycmF5
Q29uc3RydWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNvbnN0cnVjdG9y
VGFibGUpKQogICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlND
OjphcnJheVByb3RvdHlwZVRhYmxlKSkKICAgICAsIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShmYXN0
TmV3PEhhc2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAgICwgZGF0YVZp
ZXdUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRhVmlld1RhYmxlKSkKICAgICAsIGRh
dGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQogICAgICwgZGF0ZUNv
bnN0cnVjdG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFi
bGUpKQogICAgICwgZXJyb3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpl
cnJvclByb3RvdHlwZVRhYmxlKSkKQEAgLTI1OCw2ICsyNjEsMTAgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAg
ZGZnU3RhdGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgor
ICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2Vy
dGluZyB0aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlz
LgorICAgIG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtMjg5LDYgKzI5Niw3IEBAIFZN
Ojp+Vk0oKQogICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYXJy
YXlDb25zdHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGJvb2xlYW5Qcm90b3R5cGVU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRhVmlld1RhYmxlLT5kZWxldGVUYWJsZSgpOwog
ICAgIGRhdGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKICAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwpA
QCAtMzA2LDYgKzMxNCw3IEBAIFZNOjp+Vk0oKQogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxI
YXNoVGFibGUqPihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwogICAgIGZhc3REZWxldGUo
Y29uc3RfY2FzdDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0YVZpZXdUYWJsZSkpOwogICAgIGZhc3RE
ZWxldGUoY29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKICAgICBmYXN0RGVsZXRl
KGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0
RGVsZXRlKGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAj
aW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0
b3IuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldhdGNo
ZG9nLmgiCiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRl
ckFsbG9jYXRvci5oPgpAQCAtNjksMTMgKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgQ29kZUNhY2hlOwogICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogICAgIGNsYXNzIEV4
ZWNTdGF0ZTsKLSAgICBjbGFzcyBGbG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgRmxvYXQ2NEFycmF5
OwogICAgIGNsYXNzIEhhbmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKLSAg
ICBjbGFzcyBJbnQ4QXJyYXk7Ci0gICAgY2xhc3MgSW50MTZBcnJheTsKLSAgICBjbGFzcyBJbnQz
MkFycmF5OwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIGNsYXNzIEpTT2JqZWN0OwpAQCAtOTMsMTAgKzg4LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgot
ICAgIGNsYXNzIFVpbnQ4QXJyYXk7Ci0gICAgY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Ci0gICAg
Y2xhc3MgVWludDE2QXJyYXk7Ci0gICAgY2xhc3MgVWludDMyQXJyYXk7CiAgICAgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMjMwLDYgKzIyMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJs
ZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwogICAgICAg
ICBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVU
YWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsKICAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMzkwLDYgKzM4
Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJs
ZWRQcm9maWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRl
Y29kZVByb2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlw
ZWRBcnJheUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwog
ICAgICAgICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApAQCAtNDI4
LDU1ICs0MjEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXZlRW5vdWdoTmV3
U3RyaW5nc1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cyA+IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQogICAgICAgICB2b2lkIHJl
c2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxhc3RI
YXNoQ29ucyA9IDA7IH0KIAotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0eXBl
LCBjYXBpdGFsaXplZFR5cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlEZXNj
cmlwdG9yKGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAgICAgIEFTU0VSVCgh
bV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlwZSMjQXJyYXlE
ZXNjcmlwdG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0gICAg
ICAgICAgICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsgXAotICAgICAg
ICAgICAgQVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0g
ICAgICAgIH0gXAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgdHlwZSMjQXJy
YXlEZXNjcmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5t
X2NsYXNzSW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9Ci0KLSAgICAg
ICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0gICAgICAgIHJlZ2lz
dGVyVHlwZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKHVpbnQ4LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0
aW9uKHVpbnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFy
cmF5RnVuY3Rpb24odWludDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlG
dW5jdGlvbih1aW50MzIsIFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0
aW9uKGZsb2F0MzIsIEZsb2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlv
bihmbG9hdDY0LCBGbG9hdDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgot
ICAgICAgICAKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlE
ZXNjcmlwdG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9uZToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDE2
QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAg
ICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4QXJy
YXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5
VWludDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlwdG9yKCk7
Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgICAgIHJl
dHVybiAmZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFy
cmF5RmxvYXQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURlc2NyaXB0
b3IoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAg
ICAgIGJvb2wgY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSBjb25zdAogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9j
aygpIHx8IGV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CkBAIC01MTAsMTYgKzQ1
NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0
eTsKICAgICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgICAgIFJlZkNv
dW50ZWRBcnJheTxTdGFja0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwotCi0gICAgICAgIFR5cGVk
QXJyYXlEZXNjcmlwdG9yIG1faW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJh
eURlc2NyaXB0b3IgbV9pbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURl
c2NyaXB0b3IgbV9pbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV91aW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0
b3IgbV91aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNj
cmlwdG9yIG1fdWludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3Jp
cHRvciBtX3VpbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0
b3IgbV9mbG9hdDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRv
ciBtX2Zsb2F0NjRBcnJheURlc2NyaXB0b3I7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19WQUxJ
REFUSU9OKQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJl
d3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAg
ICAgICAtIEFkZGVkIHRoZSBub3Rpb24gb2YgYSByZWZlcmVuY2UgY291bnRlZCBvYmplY3QgdGhh
dCBjYW4gYmUgbWFya2VkIERlZmVycmVkLAorICAgICAgICAgIHdoaWNoIGlzIGxpa2UgYSBzcGVj
aWFsLXB1cnBvc2UgdXByZWYuCisgICAgICAgIAorICAgICAgICAtIEFkZGVkIGEgY29tbW9uIGJ5
dGUgZmxpcHBlci4KKworICAgICAgICBBdXRvbWFrZSB3b3JrIGNvdXJ0ZXN5IG9mIFphbiBEb2Jl
cnNlayA8emRvYmVyc2VrQGlnYWxpYS5jb20+LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlZmVy
cmFibGVSZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNv
dW50ZWRCYXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRl
ZEJhc2U6OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNl
Ojppc0RlZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpE
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZEJhc2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFi
bGVSZWZDb3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZl
cnJhYmxlUmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291
bnRlZDo6c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVk
OjpEZWZlcnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3Vu
dGVkOjp+RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMuaDog
QWRkZWQuCisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToKKyAg
ICAgICAgKFdURjo6ZmxpcEJ5dGVzKToKKyAgICAgICAgKFdURjo6ZmxpcEJ5dGVzSWZMaXR0bGVF
bmRpYW4pOgorCiAyMDEzLTA4LTE0ICBKdWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VhdUBuZHMu
Y29tPgogCiAgICAgICAgIERGR19KSVQgaW1wbGVtZW50YXRpb24gZm9yIHNoNCBhcmNoaXRlY3R1
cmUuCkluZGV4OiBTb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3Vy
Y2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAgd3RmX3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3Bw
IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAogICAgIFNvdXJjZS9XVEYv
d3RmL0RlY29kZXIuaCBcCisgICAgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCBcCiAgICAgU291cmNlL1dURi93dGYvRGVxdWUuaCBcCiAgICAgU291cmNlL1dURi93dGYvRGlz
YWxsb3dDVHlwZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApA
QCAtNTIsNiArNTMsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvRmls
ZVByaW50U3RyZWFtLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRmlsZVByaW50U3RyZWFtLmgg
XAogICAgIFNvdXJjZS9XVEYvd3RmL0ZpeGVkQXJyYXkuaCBcCisgICAgU291cmNlL1dURi93dGYv
RmxpcEJ5dGVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBcCiAgICAgU291cmNl
L1dURi93dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRnVu
Y3Rpb25EaXNwYXRjaGVyLmggXApJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShy
ZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxEYXRlTWF0aC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxE
ZWNpbWFsTnVtYmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERlY29k
ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVmZXJyYWJsZVJlZkNv
dW50ZWQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVxdWUuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGlzYWxsb3dDVHlwZS5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEb3VibHlMaW5rZWRMaXN0LmgiIC8+DQpAQCAt
MTY0LDYgKzE2NSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmVhdHVyZURl
ZmluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmlsZVByaW50U3Ry
ZWFtLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZpeGVkQXJyYXkuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmxpcEJ5dGVzLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZvcndhcmQuaCIgLz4NCiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlx3dGZcRnVuY3Rpb25EaXNwYXRjaGVyLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXEZ1bmN0aW9uYWwuaCIgLz4NCkluZGV4OiBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDggQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQx
NzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICov
OyB9OworCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0
MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OworCQkwRjJC
NjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxp
cEJ5dGVzLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1
OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5MTE3MkUw
MEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUgLyogQ29t
cGlsYXRpb25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNw
cCAqLzsgfTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNG
MTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOEYx
NzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02MzAsNiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1h
bE51bWJlci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxO
dW1iZXIuaCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5oICov
LAorCQkJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJCUE4
QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJQThBNDcy
ODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0OCw2ICs2
NTMsNyBAQAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0u
Y3BwICovLAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0u
aCAqLywKIAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICovLAor
CQkJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJCQlBOEE0
NzJBNjE1MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3MTUxQTgy
NUEwMDQxMjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5ODAwMTQx
REE0IC8qIEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3IEBACiAJ
CQkJQThBNDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJheVB0ci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFi
bGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVCMDA0MTIz
RkYgLyogT3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVCMDA0MTIz
RkYgLyogT3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4MjVC
MDA0MTIzRkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTcsNiAr
MTA2NCw3IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQ
b3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTcx
N0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQ
cmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTgsNiArMTgsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBEYXRhTG9nLmgKICAg
ICBEZWNpbWFsTnVtYmVyLmgKICAgICBEZWNvZGVyLmgKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oCiAgICAgRGVxdWUuaAogICAgIERpc2FsbG93Q1R5cGUuaAogICAgIERvdWJseUxpbmtlZExp
c3QuaApAQCAtMjgsNiArMjksNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBGZWF0dXJlRGVmaW5l
cy5oCiAgICAgRmlsZVByaW50U3RyZWFtLmgKICAgICBGaXhlZEFycmF5LmgKKyAgICBGbGlwQnl0
ZXMuaAogICAgIEZvcndhcmQuaAogICAgIEZ1bmN0aW9uRGlzcGF0Y2hlci5oCiAgICAgRnVuY3Rp
b25hbC5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJy
YWJsZVJlZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3Mg
cmVmZXJlbmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBp
ZiB0aGF0IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBq
dXN0IGJlaW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0
IGlmIGl0IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVs
IGVpdGhlciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRk
aXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2Ug
eworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbnQgPSAyOworICAgIAorcHVibGljOgorICAg
IHZvaWQgcmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50
OworICAgIH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZD
b3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbElu
Y3JlbWVudDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9Cisg
ICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAg
OiBtX3JlZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5E
ZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBk
ZXJlZkJhc2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7
CisgICAgICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBib29sIHNldElzRGVm
ZXJyZWRCYXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAg
ICAgICAgIG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAg
ICAgICAgcmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5z
aWduZWQgbV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZl
cnJhYmxlUmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBp
ZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMp
OworICAgIH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICghc2V0SXNEZWZlcnJlZEJhc2UodmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJl
ZkNvdW50ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOworCisj
ZW5kaWYgLy8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9G
bGlwQnl0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBib29sIG5lZWRU
b0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQVShC
SUdfRU5ESUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVybiAh
bGl0dGxlRW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBmbGlwQnl0ZXModWlu
dDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYpIDw8IDgpCisgICAg
ICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MzJfdCBmbGlw
Qnl0ZXModWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMGZm
KSA8PCAyNCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwgOCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAw
MDAwMCkgPj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVzKHVpbnQ2NF90IHZh
bHVlKQoreworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAwMGZmbGx1KSA8PCA1
NikKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1KSA8PCA0MCkKKyAg
ICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAyNCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAgICAgICB8ICgodmFs
dWUgJiAweDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4
MDAwMGZmMDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAw
MDAwMDAwMDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDAwMDAw
MDAwMGxsdSkgPj4gNTYpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxp
cEJ5dGVzKFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMSkKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDIpIHsKKyAgICAgICAgdW5p
b24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQxNl90IHdvcmQ7
CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1Lndv
cmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAg
fQorICAgIGlmIChzaXplb2YodmFsdWUpID09IDQpIHsKKyAgICAgICAgdW5pb24geworICAgICAg
ICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7CisgICAgICAgIH0g
dTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0
ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIGlmIChz
aXplb2YodmFsdWUpID09IDgpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBvcmln
aW5hbDsKKyAgICAgICAgICAgIHVpbnQ2NF90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAg
dS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsK
KyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2lubGluZSBUIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5k
aWFuKQoreworICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRp
YW4pKQorICAgICAgICByZXR1cm4gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBCeXRlc0lm
TGl0dGxlRW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7Cit1c2luZyBXVEY6OmZsaXBCeXRl
c0lmTGl0dGxlRW5kaWFuOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTc5IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFR5cGVkIGFycmF5
cyBhcmUgbm93IGltcGxlbWVudGVkIGluIEphdmFTY3JpcHRDb3JlLCBhbmQgV2ViQ29yZSBpcyBt
ZXJlbHkgYQorICAgICAgICBjbGllbnQgb2YgdGhlbS4gVGhlcmUgaXMgb25seSBvbmUgbGF5ZXJp
bmcgdmlvbGF0aW9uOiBXZWJDb3JlIGluc3RhbGxzIGEKKyAgICAgICAgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyIG9uIFZNLCB3aGljaCBtYWtlcyB0aGUKKyAgICAgICAgQXJyYXlCdWZmZXI8
LT5KU0FycmF5QnVmZmVyIHJlbGF0aW9uc2hpcCByZXNlbWJsZSBET00gd3JhcHBlcnMuIEJ5IGRl
ZmF1bHQsCisgICAgICAgIEpTQyBtYWtlcyB0aGUgb3duZXJzaGlwIGdvIG9uZSB3YXk7IHRoZSBK
U0FycmF5QnVmZmVyIGtlZXBzIHRoZSBBcnJheUJ1ZmZlcgorICAgICAgICBhbGl2ZSBidXQgaWYg
QXJyYXlCdWZmZXIgaXMga2VwdCBhbGl2ZSBmcm9tIG5hdGl2ZSBjb2RlIHRoZW4gdGhlCisgICAg
ICAgIEpTQXJyYXlCeWZmZXIgbWF5IGRpZS4gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyIHdp
bGwga2VlcCB0aGUKKyAgICAgICAgSlNBcnJheUJ1ZmZlciBhbGl2ZSBpZiB0aGUgQXJyYXlCdWZm
ZXIgaXMgaW4gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2Ug
bm9uLUpTRE9NV3JhcHBlcnMgYmVoYXZlIGxpa2UgRE9NIHdyYXBwZXJzLCBhIGJ1bmNoIG9mIGNv
ZGUgaXMKKyAgICAgICAgY2hhbmdlZCB0byBtYWtlIG1vc3QgcmVmZXJlbmNlcyB0byB3cmFwcGVy
cyByZWZlciB0byBKU09iamVjdCogcmF0aGVyIHRoYW4KKyAgICAgICAgSlNET01XcmFwcGVyKi4K
KyAgICAgICAgCisgICAgICAgIEFycmF5IGJ1ZmZlciB2aWV3cyBhcmUgbm93IHRyYW5zaWVudDsg
dGhlIEpTIGFycmF5IGJ1ZmZlciB2aWV3IHdyYXBwZXJzCisgICAgICAgIGRvbid0IG93biB0aGVt
IG9yIGtlZXAgdGhlbSBhbGl2ZS4gVGhpcyByZXF1aXJlZCBhIGJ1bmNoIG9mIGNoYW5nZXMgdG8g
bWFrZQorICAgICAgICBiaW5kaW5ncyBjb2RlIHVzZSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB0
byBob2xkIG9udG8gdGhlaXIgdmlld3MuCisgICAgICAgIAorICAgICAgICBBbHNvIHRoZXJlIGlz
IGEgYnVuY2ggb2YgbmV3IGNvZGUgdG8gbWFrZSBKU0MtcHJvdmlkZWQgYXJyYXkgYnVmZmVycyBh
bmQKKyAgICAgICAgdmlld3Mgb2JleSB0aGUgdG9KUy90bzxDbGFzc05hbWU+IGlkaW9tIGZvciB3
cmFwcGluZyBhbmQgdW53cmFwcGluZy4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoZSBE
YXRhVmlldyBBUEkgaXMgbm93IGNvbXBsZXRlbHkgZGlmZmVyZW50OiB0aGUgSlNEYXRhVmlldwor
ICAgICAgICBwcm92aWRlcyB0aGUgc2FtZSB1c2VyLXZpc2libGUgSlMgQVBJIGJ1dCB1c2luZyBp
dHMgb3duIGludGVybmFsIG1hZ2ljOyB0aGUKKyAgICAgICAgQysrIGNvZGUgdGhhdCB1c2VzIERh
dGFWaWV3IG5vdyB1c2VzIGEgcmF0aGVyIGRpZmZlcmVudCBBUEkgdGhhdCBpcyBub3QKKyAgICAg
ICAgYXdhcmUgb2YgdXN1YWwgRE9NIHNlbWFudGljcywgc2luY2UgaXQncyBpbiBKU0MgYW5kIG5v
dCBXZWJDb3JlLiBJdCdzCisgICAgICAgIGVxdWFsbHkgdXNlZnVsIGZvciBhbGwgb2YgV2ViQ29y
ZSdzIHB1cnBvc2VzLCBidXQgc29tZSBjb2RlIGhhZCB0byBjaGFuZ2UKKyAgICAgICAgdG8gYWRh
cHQgdGhlIG5ldyBjb252ZW50aW9ucy4KKyAgICAgICAgCisgICAgICAgIFNvbWUgdGVzdHMgaGF2
ZSBiZWVuIGNoYW5nZWQgb3IgcmViYXNlZCBkdWUgdG8gY2hhbmdlcyBpbiBiZWhhdmlvciwgdGhh
dAorICAgICAgICBicmluZyB1cyBpbnRvIGNvbmZvcm1hbmNlIHdpdGggd2hlcmUgdGhlIHN0YW5k
YXJkcyBhcmUgZ29pbmcgYW5kIGFsbG93IHVzIHRvCisgICAgICAgIG1hdGNoIEZpcmVmb3ggYmVo
YXZpb3IuCisKKyAgICAgICAgQXV0b21ha2Ugd29yayBhbmQgc29tZSBhZGRpdGlvbmFsIEdUSyBj
aGFuZ2VzIGNvdXJ0ZXN5IG9mCisgICAgICAgIFphbiBEb2JlcnNlayA8emRvYmVyc2VrQGlnYWxp
YS5jb20+LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3
Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvSlNEYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0pTVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAq
IEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXIuaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVzZUpTQy5j
bWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q1NTVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlw
dG86OmdldFJhbmRvbVZhbHVlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5n
Lmg6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcHBlckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lQ2FjaGVkV3JhcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9BcnJheUJ1ZmZl
clZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9JbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1VpbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50OENs
YW1wZWRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQxNkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OnRvVWludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDMyQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9EYXRhVmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6Omxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
SlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJl
cXVlc3Q6OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVy
QXJyYXlCdWZmZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
Lmg6CisgICAgICAgIChXZWJDb3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp3cmFwcGVyT3duZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEZv
ckFsbFBhcmVudHMpOgorICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOgorICAgICAgICAoU2tpcElu
Y2x1ZGVIZWFkZXIpOgorICAgICAgICAoSXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChJc1dy
YXBwZXJUeXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRl
cik6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAoSlNW
YWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9y
SGVscGVyTWV0aG9kcyk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBmaWxl
YXBpL1dlYktpdEJsb2JCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5p
ZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICog
aHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0Zsb2F0MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQ2
NEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5Lmlk
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9VaW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
VWludDhBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhDbGFt
cGVkQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBwYWdlL0NyeXB0by5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRyYWN0
S2V5VVJJS2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKiB0ZXN0aW5nL01v
Y2tDRE0uY3BwOgorCiAyMDEzLTA4LTE0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgVXBkYXRlIGJpbmRpbmcgdGVzdCByZXN1bHRzLiAgRm9sbG93IHVwIGZpeCBmb3Ig
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTY2ND4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk5LDMxICs0OTksMTkgQEAgc2V0KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAg
aHRtbC9WYWxpZGl0eVN0YXRlLmlkbAogICAgIGh0bWwvVm9pZENhbGxiYWNrLmlkbAogCi0gICAg
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsCi0gICAgaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJW
aWV3LmlkbAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbAogICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsCiAg
ICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAogICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsCi0gICAgaHRtbC9jYW52YXMvRGF0YVZpZXcu
aWRsCiAgICAgaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwKICAgICBodG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5pZGwKICAgICBodG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
aWRsCi0gICAgaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL0Zs
b2F0NjRBcnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAotICAgIGh0bWwv
Y2FudmFzL0ludDMyQXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvSW50OEFycmF5LmlkbAogICAg
IGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsCiAgICAgaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmlkbAogICAgIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aWRsCiAgICAgaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsCiAgICAgaHRtbC9j
YW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MTZBcnJh
eS5pZGwKLSAgICBodG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwKLSAgICBodG1sL2NhbnZhcy9V
aW50OEFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1
ZmZlci5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmlkbApA
QCAtMTQ5OSw3ICsxNDg3LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAotICAgIGh0
bWwvY2FudmFzL0RhdGFWaWV3LmNwcAogICAgIGh0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmNw
cAogICAgIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKICAgICBo
dG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsMzEgKzM4MiwxOSBAQCBCSU5E
SU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL1RpbWVSYW5nZXMuaWRsIFwKICAgICAk
KFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0ZS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9W
b2lkQ2FsbGJhY2suaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0FycmF5QnVmZmVy
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAgICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9EYXRhVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRsIFwKICAgICAk
KFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXAot
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0ludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDMy
QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwgXAog
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5pZGwgXAogICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5pZGwgXAogICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwgXAotICAgICQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFz
L1VpbnQzMkFycmF5LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OEFycmF5
LmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApJbmRleDogU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLnByaQkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUv
RGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTQgKzMwMSw3IEBAIElE
TF9CSU5ESU5HUyArPSBcCiAgICAgJCRQV0QvZmlsZWFwaS9GaWxlTGlzdC5pZGwgXAogICAgICQk
UFdEL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwgXAogICAgICQkUFdEL2ZpbGVhcGkvRmlsZVJlYWRl
clN5bmMuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsIFwK
LSAgICAkJFBXRC9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwgXAotICAgICQkUFdEL2h0bWwv
Y2FudmFzL0RhdGFWaWV3LmlkbCBcCi0gICAgJCRQV0QvaHRtbC9jYW52YXMvSW50OEFycmF5Lmlk
bCBcCi0gICAgJCRQV0QvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0gICAgJCRQV0Qv
aHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQ2Fu
dmFzR3JhZGllbnQuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbCBc
CiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwgXAogICAgICQkUFdEL2h0
bWwvY2FudmFzL0NhbnZhc1Byb3h5LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGwgXApAQCAtMzM4LDE0ICszMzEsOSBAQCBJRExfQklORElOR1Mg
Kz0gXAogICAgICQkUFdEL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgXAog
ICAgICQkUFdEL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAgICAgJCRQV0QvaHRtbC9j
YW52YXMvV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaWRsIFwKLSAgICAkJFBXRC9odG1sL2Nh
bnZhcy9JbnQxNkFycmF5LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJl
LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRsIFwK
ICAgICAkJFBXRC9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmlkbCBcCi0g
ICAgJCRQV0QvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwgXAotICAgICQkUFdEL2h0bWwvY2Fu
dmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbCBcCi0gICAgJCRQV0QvaHRtbC9jYW52YXMvVWludDMy
QXJyYXkuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwgXAogICAg
ICQkUFdEL2h0bWwvRE9NRm9ybURhdGEuaWRsIFwKICAgICAkJFBXRC9odG1sL0RPTVNldHRhYmxl
VG9rZW5MaXN0LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9ET01Ub2tlbkxpc3QuaWRsIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMw
LDYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
QWJzdHJhY3RXb3JrZXIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQWJzdHJhY3RX
b3JrZXIuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyLmNwcCBcCi0J
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyLmggXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQXJyYXlCdWZmZXJWaWV3LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBdHRyLmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0F0dHIuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0F1ZGlvQnVmZmVyLmNwcCBcCkBAIC0xNTYsOCArMTUyLDYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVRyYW5zZmVy
SXRlbS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVRyYW5zZmVySXRlbUxpc3Qu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVRyYW5zZmVySXRlbUxpc3QuaCBc
Ci0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0RhdGFWaWV3LmNwcCBcCi0JRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0RhdGFWaWV3LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
RGVsYXlOb2RlLmNwcCBcCkBAIC0yODgsMTAgKzI4Miw2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNl
cyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZpbGVXcml0ZXJDYWxsYmFjay5oIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmlsZVdyaXRlclN5bmMuY3BwIFwKIAlEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTRmlsZVdyaXRlclN5bmMuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0Zsb2F0MzJBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGbG9h
dDMyQXJyYXkuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zsb2F0NjRBcnJheS5jcHAg
XAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGbG9hdDY0QXJyYXkuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0ZvY3VzRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTRm9jdXNFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udExvYWRlci5j
cHAgXApAQCAtNDg5LDEyICs0NzksNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbmplY3RlZFNjcmlwdEhvc3QuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgXAogCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBcCi0JRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0ludDE2QXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW50
MTZBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW50MzJBcnJheS5jcHAgXAot
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbnQzMkFycmF5LmggXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbnQ4QXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW50
OEFycmF5LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNTY3JpcHRQcm9jZXNzb3JOb2Rl
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwIFwKQEAg
LTc1OSwxNCArNzQzLDYgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTVHJlZVdhbGtlci5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
VUlFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVSUV2ZW50LmggXAotCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50MTZBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNVaW50MTZBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWlu
dDMyQXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDMyQXJyYXkuaCBc
Ci0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQ4QXJyYXkuY3BwIFwKLQlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTVWludDhBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
VWludDhDbGFtcGVkQXJyYXkuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDhD
bGFtcGVkQXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1ZhbGlkaXR5U3RhdGUu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVmFsaWRpdHlTdGF0ZS5oIFwKIAlEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTVm9pZENhbGxiYWNrLmNwcCBcCkBAIC0xNTQzLDMxICsxNTE5
LDE5IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvaHRtbC9UaW1lUmFuZ2Vz
LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL1ZhbGlkaXR5U3RhdGUuaWRsIFwKIAkkKFdlYkNvcmUp
L2h0bWwvVm9pZENhbGxiYWNrLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9BcnJheUJ1
ZmZlci5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbCBc
CiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5pZGwgXAogCSQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvQ2FudmFzUHJveHkuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsIFwK
IAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0RPTVBhdGguaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwv
Y2FudmFzL0VYVERyYXdCdWZmZXJzLmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zs
b2F0MzJBcnJheS5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5Lmlk
bCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbCBcCi0JJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9J
bnQ4QXJyYXkuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZh
dGl2ZXMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5pZGwgXAogCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaWRsIFwKIAkkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuaWRsIFwKLQkkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50
MzJBcnJheS5pZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDhBcnJheS5pZGwgXAot
CSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsIFwKIAkkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuaWRsIFwKQEAgLTIzMzQsOSArMjI5OCw3IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggXAotCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAgXApAQCAtMjM4OCw3ICsy
MzUwLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1NoZWxsLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
V3JhcHBlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1
c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZl
bnRDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU9yaWVu
dGF0aW9uRXZlbnRDdXN0b20uY3BwIFwKQEAgLTI1NDEsNiArMjUwMiw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEu
aCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdERl
YnVnU2VydmVyLmNwcCBcCkBAIC0zMzE5LDggKzMyODIsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBc
CiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9EYXRhVmlldy5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RPTVBhdGguaCBcCiAJU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNp
b24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNiBAQCBTT1VSQ0VTICs9IFwKICAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBl
cldvcmxkLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwIFwKICAgICAgYmlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBcCi0gICAgIGJpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJDdXN0b20uY3BwIFwKICAgICAgYmluZGluZ3MvanMvSlNBdWRpb0J1ZmZlckN1c3RvbS5jcHAg
XAogICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwIFwKICAgICAgYmluZGluZ3MvanMv
SlNCbG9iQ3VzdG9tLmNwcCBcCkBAIC0xMTQsNyArMTEzLDYgQEAgU09VUkNFUyArPSBcCiAgICAg
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuY3BwIFwKICAgICAgYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcCBc
Ci0gICAgIGJpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwIFwKICAgICAgYmluZGluZ3Mv
anMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9KU0Rl
dmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwIFwKICAgICAgYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAgXApAQCAtMjAwLDYgKzE5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgICBi
aW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIFwKKyAg
ICAgYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBcCiAgICAgIGJy
aWRnZS9JZGVudGlmaWVyUmVwLmNwcCBcCiAgICAgIGJyaWRnZS9OUF9qc29iamVjdC5jcHAgXAog
ICAgICBicmlkZ2UvYy9DUnVudGltZU9iamVjdC5jcHAgXApAQCAtNzE5LDcgKzcxOCw2IEBAIFNP
VVJDRVMgKz0gXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5jcHAgXAotICAgIGh0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBc
CiAgICAgaHRtbC9mb3Jtcy9GaWxlSWNvbkxvYWRlci5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0Jh
Y2tncm91bmRIVE1MSW5wdXRTdHJlYW0uY3BwIFwKICAgICBodG1sL3BhcnNlci9CYWNrZ3JvdW5k
SFRNTFBhcnNlci5jcHAgXApAQCAtMTM0Nyw3ICsxMzQ1LDYgQEAgSEVBREVSUyArPSBcCiAgICAg
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmggXAogICAgIGJpbmRpbmdzL2pzL0RPTU9iamVjdEhh
c2hUYWJsZU1hcC5oIFwKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaCBcCi0gICAg
YmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBcCiAgICAgYmluZGluZ3MvanMv
SlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmggXAogICAgIGJpbmRpbmdzL2pzL0pTQ2FsbGJh
Y2tEYXRhLmggXAogICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggXApA
QCAtMTc4NCw3ICsxNzgxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaCBcCi0gICAgaHRtbC9jYW52
YXMvRGF0YVZpZXcuaCBcCiAgICAgaHRtbC9jYW52YXMvRE9NUGF0aC5oIFwKICAgICBodG1sL0Ns
YXNzTGlzdC5oIFwKICAgICBodG1sL0RPTUZvcm1EYXRhLmggXApJbmRleDogU291cmNlL1dlYkNv
cmUvVXNlSlNDLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFr
ZQkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdzL2pzL0Rp
Y3Rpb25hcnkuY3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcAotICAgIGJpbmRp
bmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNBdWRpb0J1
ZmZlckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCiAgICAgYmlu
ZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ0RBVEFTZWN0aW9u
Q3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0b20uY3BwCiAgICAgYmlu
ZGluZ3MvanMvSlNDU1NGb250RmFjZVJ1bGVDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlND
U1NJbXBvcnRSdWxlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQ1NTTWVkaWFSdWxlQ3Vz
dG9tLmNwcApAQCAtMTUwLDYgKzE0OCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAogICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKyAgICBi
aW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCiAKICAgICBicmlkZ2Uv
SWRlbnRpZmllclJlcC5jcHAKICAgICBicmlkZ2UvTlBfanNvYmplY3QuY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNiBAQCBfX1pON1dlYkNvcmUx
MmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQCiBfX1pON1dlYkNvcmUxMmRlbGV0ZUNvb2tpZUVS
S05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfNEtVUkxFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRhYmFzZUV2
Ci1fX1pON1dlYkNvcmUxMnRvVWludDhBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3Jl
MTNBWE9iamVjdENhY2hlMTByb290T2JqZWN0RXYKIF9fWk43V2ViQ29yZTEzQVhPYmplY3RDYWNo
ZTE4cm9vdE9iamVjdEZvckZyYW1lRVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0
Q2FjaGUyMWdBY2Nlc3NpYmlsaXR5RW5hYmxlZEUKQEAgLTI4OCw3ICsyODcsNiBAQCBfX1pON1dl
YkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTCiBfX1pON1dlYkNvcmUxM2RpcmVjdG9y
eU5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxM2xpc3REaXJlY3RvcnlFUktOM1dU
RjZTdHJpbmdFUzNfCiBfX1pON1dlYkNvcmUxM3BvaW50ZXJDdXJzb3JFdgotX19aTjdXZWJDb3Jl
MTN0b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1l
bnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2lu
ZG93RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVD
bGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCkBAIC05MDcsNyArOTA1LDYgQEAgX19a
TjdXZWJDb3JlNFBhdGhDMUV2CiBfX1pON1dlYkNvcmU0UGF0aEQxRXYKIF9fWk43V2ViQ29yZTRj
b3JlRVAyME5TVVJMUHJvdGVjdGlvblNwYWNlCiBfX1pON1dlYkNvcmU0Y29yZUVQMjhOU1VSTEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCi1fX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOUzBfMTFBcnJheUJ1ZmZlckUKIF9fWk43V2ViQ29y
ZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEwQ2xp
ZW50UmVjdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01H
bG9iYWxPYmplY3RFUE5TXzEzRE9NU3RyaW5nTGlzdEUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pT
QzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzE0Q2xpZW50UmVjdExpc3RF
CkBAIC0yNzQzLDcgKzI3NDAsNiBAQCBfX1pON1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1lbnQxNnJl
dHVyblRvCiBfX1pOSzdXZWJDb3JlMTZIVE1MTWVkaWFFbGVtZW50MTJpc0Z1bGxzY3JlZW5Fdgog
X19aTjdXZWJDb3JlMTBUaW1lUmFuZ2VzM2FkZEVkZAogX19aTjdXZWJDb3JlMTJ0b1RpbWVSYW5n
ZXNFTjNKU0M3SlNWYWx1ZUUKLV9fWk43V2ViQ29yZTE0dG9GbG9hdDMyQXJyYXlFTjNKU0M3SlNW
YWx1ZUUKIF9fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9i
YWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0UKIF9fWk5LN1dlYkNvcmUxMFRpbWVSYW5nZXM3bmVh
cmVzdEVkCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvRGF0YVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9EYXRhVmlld19oCisjZGVmaW5lIFdlYkNv
cmVfRldEX0RhdGFWaWV3X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
QXJyYXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlcl9oCisj
ZGVmaW5lIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQXJyYXlCdWZmZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZu
ZGVmIFdlYkNvcmVfRldEX0pTQXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
SlNBcnJheUJ1ZmZlclZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNEYXRhVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gKKyNk
ZWZpbmUgV2ViQ29yZV9GV0RfSlNEYXRhVmlld19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNEYXRhVmlldy5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNU
eXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVfRldEX0pTVHlwZWRBcnJheXNfaAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTVHlwZWRBcnJheXMuaD4KKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUv
VHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlDb250cm9s
bGVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlDb250cm9sbGVyLmg+CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5SW5saW5lc3Nf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5SW5saW5lc3NfaAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5cGVkQXJyYXlz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9UeXBlZEFycmF5c19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlz
X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgorI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlz
ZXIuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9SZWFsdGltZUFuYWx5c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwxMiBAQAog
I2RlZmluZSBSZWFsdGltZUFuYWx5c2VyX2gKIAogI2luY2x1ZGUgIkF1ZGlvQXJyYXkuaCIKKyNp
bmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNz
IEZsb2F0MzJBcnJheTsKLWNsYXNzIFVpbnQ4QXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQXVkaW9CdXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3
NDMxLDYgKzE3NDMxLDIwIEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYmluZGluZ3NcanNcV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCI+CisgICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
RGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXb3JrZXJTY3Jp
cHRDb250cm9sbGVyLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIs
OCBAQAogCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1
MzQyNTEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi87IH07
CiAJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQzQ1MzQyNjEw
Q0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovOyB9OwogCQkwRjA5
MDg3RjE0NDRGREIyMDAwMjg5MTcgLyogU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzE0MTUxNDIxODlGQzAwREIzM0JB
IC8qIFNjcm9sbGJhclRoZW1lLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDgxN0I5NjhBMTAwRkY4NEI5
IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYwOTlEMDkxN0I5NjhBMTAw
RkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8q
IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5k
ZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
ICovOyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNE
MTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovOyB9OwogCQkwRjEzMTY0
MDE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRjE2RUQwQ0RFMDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi87IH07CkBAIC04MzAsMTEgKzgzMiw2IEBA
CiAJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1ODQxQzEy
Nzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovOyB9OwogCQkyRTk0
RjQzQjExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDM5MTE5MjA3REEwMEI3Rjc1RCAv
KiBKU0ZpbGVSZWFkZXIuY3BwICovOyB9OwogCQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyog
SlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07Ci0J
CTJFOTdDQ0VBMTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYg
LyogRGF0YVZpZXcuY3BwICovOyB9OwotCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0
YVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
OTdDQ0U4MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oICovOyB9OwotCQkyRTk3Q0NGNzEy
OTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4RkYgLyog
SlNEYXRhVmlld0N1c3RvbS5jcHAgKi87IH07Ci0JCTJFOTdDRTZGMTI5M0FENkIwMEM1QzhGRiAv
KiBKU0RhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3LmNwcCAqLzsgfTsK
LQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDRTZFMTI5M0FENkIwMEM1QzhG
RiAvKiBKU0RhdGFWaWV3LmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRM
b2FkZXJDbGllbnQuaCAqLzsgfTsKIAkJMkVCNEJDRDIxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JS
ZXNvdXJjZUhhbmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRUI0QkNEMDEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNw
cCAqLzsgfTsKIAkJMkVCNEJDRDMxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCNEJD
RDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5oICovOyB9OwpAQCAtMTI5
MCw4ICsxMjg3LDYgQEAKIAkJNDlCMzc2MEQxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjM3NjBC
MTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi87IH07CiAJCTQ5QzdCOTkzMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
QnVmZmVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07Ci0JCTQ5QzdC
OTk1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNJbnQ4QXJyYXkuY3BwICovOyB9OwotCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJ
bnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovOyB9OwogCQk0OUM3
Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg0MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5ODEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TEZyYW1lYnVmZmVyLmggKi87IH07CiAJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwICovOyB9
OwpAQCAtMTM1MiwyMiArMTM0Nyw2IEBACiAJCTQ5RUNFQjZFMTQ5OTc5MEQwMENERDNBNCAvKiBG
aWx0ZXJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUNFQjY0MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUVDRUI2RjE0
OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyog
RmlsdGVyT3BlcmF0aW9ucy5jcHAgKi87IH07CiAJCTQ5RUNFQjcwMTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTQ5RUVD
RjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUYyMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0FycmF5QnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmggKi87IH07
Ci0JCTQ5RUVDRjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0
MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwMzEwNTA3MEM0
MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJB
cnJheS5oICovOyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0Yw
NTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNJ
bnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi87IH07Ci0JCTQ5
RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY5MTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0ludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
VWludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLzsgfTsK
LQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RUZDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MEIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBK
U1VpbnQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjBDMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1Vp
bnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLzsgfTsK
LQkJNDlFRUNGMEQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZGMTA1MDcwQzQwMDA5
OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZl
clZpZXcuY3BwICovOyB9OwotCQk0OUVFQ0YxQzEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5RUVEMTQyMTA1MTk2
OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQzMTA1MTk2
OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CkBAIC0xODMxLDggKzE4MTAs
NiBAQAogCQk2RTY3RDJBOTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTY3RDJBODEyODBFOEJE
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi87IH07CiAJCTZFODRFOUUwMTc2NjhCRUUwMDgx
NUI2OCAvKiBSYXN0ZXJTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RTg0RTlERTE3NjY4QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuY3Bw
ICovOyB9OwogCQk2RTg0RTlFMTE3NjY4QkYxMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODRFOURGMTc2NjhC
QUQwMDgxNUI2OCAvKiBSYXN0ZXJTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTZFQkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0
NjRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovOyB9Owot
CQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFFMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovOyB9OwogCQk2RUJGMEU0ODEyQTg5MjYxMDBEQjE3
MDkgLyogT0VTVGV4dHVyZUZsb2F0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxv
YXQuY3BwICovOyB9OwogCQk2RUJGMEU0OTEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZs
b2F0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJG
MEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmggKi87IH07CiAJCTZFQkYw
RTU0MTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU1MjEyQTg5Mjk4MDBEQjE3MDkg
LyogV2ViR0xFeHRlbnNpb24uY3BwICovOyB9OwpAQCAtMjU5Myw3ICsyNTcwLDYgQEAKIAkJODVG
RjMxNUIwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRG
MzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKIAkJODYxQzJFQTQxM0ZCNEZERDAwMDYy
QUJCIC8qIERvY3VtZW50TG9hZFRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NjFDMkVBMzEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRM
b2FkVGltaW5nLmNwcCAqLzsgfTsKIAkJODYxQzJFQTYxM0ZCNEZGRjAwMDYyQUJCIC8qIFJlc291
cmNlTG9hZFRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NjFDMkVBNTEzRkI0RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNw
cCAqLzsgfTsKLQkJODYyNDNEMDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3
SGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCAqLzsg
fTsKIAkJODY1MTJFREUxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1p
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1
MTJFREIxNTRBMkFFRTAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwICov
OyB9OwogCQk4NjUxMkVERjE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRp
bWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1
MTJFREMxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaCAqLzsg
fTsKIAkJODZCQTc2NkUxNjY0MjdBODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZCQTc2NkQxNjY0
MjdBODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVlc3QuY3BwICovOyB9OwpAQCAtMjcwNyw4ICsy
NjgzLDYgQEAKIAkJOTAwMTc3NDExMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZh
dGl2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkw
MDE3NzNFMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07
CiAJCTkwMDE3ODgwMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc4
N0UxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi87IH07
CiAJCTkwMDE3ODgxMTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3ODdG
MTJFMDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLzsgfTsKLQkJ
OTEwODlEMzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkxMDg5RDMwMTRDMzM1Q0Qw
MDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi87IH07Ci0JCTkxMDg5RDMzMTRDMzM2
MDUwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBK
U1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsK
IAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4
ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTQ2NTksNyArNDYzMyw2IEBACiAJCUJDMjc0QjJGMTQwRUJFQjIwMEVBREZBNiAv
KiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUuaCAqLzsgfTsKIAkJQkMyNzRCMzExNDBFQkVEODAwRUFERkE2IC8qIENT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmNwcCAqLzsgfTsKIAkJQkMyNzVCNzkxMUM1RDFDMzAwQzkyMDZDIC8qIEpT
V2ViS2l0UG9pbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0
b20uY3BwICovOyB9OwotCQlCQzI3NUNCMzExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZl
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgKi87
IH07CiAJCUJDMjk5MzVEMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI5OTM1QzE3QTFE
RDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwICovOyB9OwogCQlCQzJDQkY0RTE0MEYx
QUJEMDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyQ0JGNEIxNDBGMUE2NTAwMzg3OUJFIC8qIEpT
V2ViR0xDb250ZXh0RXZlbnQuaCAqLzsgfTsKIAkJQkMyQ0JGN0IxNDBGMUQ1ODAwMzg3OUJFIC8q
IEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMyQ0JGN0ExNDBGMUQ1ODAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0
RXZlbnQuY3BwICovOyB9OwpAQCAtNjQ4NCw2ICs2NDU3LDggQEAKIAkJMEMzRjFGNTkxMEM4ODcx
MjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xVbmlmb3Jt
TG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1MzQyNTEwQ0RC
QkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3IC8qIEpTV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjA5
OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMDk5RDA3MTdCOTY4
QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5k
ZXJTZWxlY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNlbGVjdGlvbkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2M0Qx
NkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzLmg7IHBhdGggPSBjYS9QbGF0Zm9ybUNB
RmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RF
MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnNNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgcGF0aCA9IGNhL21h
Yy9QbGF0Zm9ybUNBRmlsdGVyc01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTcxNDAsMTIgKzcxMTUsNiBAQAogCQkyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJl
YWRlckxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxl
UmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5NEY0MzkxMTkyMDdEQTAwQjdG
NzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0ZpbGVSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTk0
RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRmlsZVJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRTk3Q0NFNzEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRGF0YVZpZXcuY3BwOyBwYXRoID0gY2FudmFzL0Rh
dGFWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NDRTgxMjkzOUNC
ODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERhdGFWaWV3Lmg7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBEYXRhVmlldy5pZGw7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NGNjEyOTNBNDNBMDBDNUM4
RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0RhdGFWaWV3Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEYXRhVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJFOTdDRTZFMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGF0YVZpZXcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3Jr
ZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQjRCQ0QwMTIxRjAzRTMw
MEVDNDg4NSAvKiBCbG9iUmVzb3VyY2VIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQmxvYlJlc291cmNlSGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkVCNEJDRDExMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc2NjAsOCArNzYyOSw2IEBACiAJCTQ5
QjM3NjBCMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFycmF5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTSW50OEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50OEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODMx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xGcmFtZWJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dl
YkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODgx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTc2NzUsNyArNzY0Miw2IEBACiAJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0
NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXZWJHTEJ1ZmZlci5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xCdWZmZXIuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xCdWZmZXIuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IFdlYkdMQnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTEJ1ZmZlci5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0
NyAvKiBJbnQ4QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEludDhBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvSW50OEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlDN0I5QUUxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJhbWVidWZmZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5QzdCOUFGMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaDsgcGF0aCA9
IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEZyYW1lYnVmZmVyLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc3MzEsMzAg
Kzc2OTcsNiBAQAogCQk0OUVDRUI2NDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbHRlck9wZXJhdGlvbi5oOyBw
YXRoID0gZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDlFQ0VCNjUxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsdGVyT3BlcmF0aW9ucy5jcHA7
IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVDRUI2NjE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0ZXJPcGVyYXRpb25zLmg7IHBh
dGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXJWaWV3LmlkbDsgcGF0aCA9IGNhbnZhcy9B
cnJheUJ1ZmZlclZpZXcuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RD
QzEwNTAzQzIzMDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IEFycmF5QnVmZmVyLmlkbDsgcGF0aCA9IGNhbnZhcy9BcnJheUJ1ZmZlci5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRENGMTA1MDNDMjMwMDA5OUZBQiAvKiBGbG9h
dDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEZsb2F0MzJBcnJheS5pZGw7IHBh
dGggPSBjYW52YXMvRmxvYXQzMkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNERDIxMDUwM0MyMzAwMDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IEludDMyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0ludDMyQXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RENTEwNTAzQzIzMDAwOTlGQUIg
LyogSW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MTZBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvSW50MTZBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50OEFycmF5LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBVaW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OEFycmF5Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFC
IC8qIFVpbnQzMkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBVaW50MzJBcnJheS5p
ZGw7IHBhdGggPSBjYW52YXMvVWludDMyQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IFVpbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50MTZB
cnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYyMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0VGMzEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zsb2F0MzJBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0Zsb2F0MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0Zsb2F0MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGNjEw
NTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSW50MzJBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5RUVDRUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQxNkFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTSW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lu
dDE2QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkExMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1VpbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDhBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQzMkFycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTVWludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50
MzJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRTEwNTA3MEM0
MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1VpbnQxNkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZl
clZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0YxQTEwNTA3MkYz
MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzRDEwNTE5
Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODI0Niw5ICs4MTg4LDYgQEAKIAkJNkU2N0QyQTgxMjgwRThCRDAwODc1OEY3IC8q
IEV4dGVuc2lvbnMzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNp
b25zM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4NEU5REUxNzY2OEJBRDAw
ODE1QjY4IC8qIFJhc3RlclNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJhc3RlclNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkU4
NEU5REYxNzY2OEJBRDAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhc3RlclNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTZFQkM1RDgwMTM4QjRDNEUwMEEwQ0Y4QSAvKiBGbG9hdDY0QXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IEZsb2F0NjRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvRmxvYXQ2NEFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVFQUQxMzhCNTBGMjAw
QTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ1MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxv
YXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT0VTVGV4dHVyZUZs
b2F0LmNwcDsgcGF0aCA9IGNhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RUJGMEU0NjEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZs
b2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9FU1RleHR1cmVGbG9hdC5o
OyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2RUJGMEU0NzEyQTg5MjYxMDBEQjE3MDkgLyogT0VTVGV4dHVyZUZsb2F0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuaWRsOyBwYXRoID0gY2FudmFz
L09FU1RleHR1cmVGbG9hdC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTg2
LDcgKzg5MjUsNiBAQAogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRF
dmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01LZXli
b2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjFDMkVBMzEzRkI0
RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZFRpbWluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBSZXNvdXJjZUxvYWRU
aW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VM
b2FkVGltaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyNDNEMDAxMUJD
MzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURCMTU0QTJBRUUwMEE5MDQyNiAvKiBQZXJmb3JtYW5j
ZVJlc291cmNlVGltaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNl
VGltaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRUREMTU0QTJBRUYw
MEE5MDQyNiAvKiBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTkxMjEsOSArOTA1OSw2IEBACiAJCTkwMDE3NzNGMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmlkbDsgcGF0aCA9IGNhbnZhcy9PRVNTdGFuZGFyZERlcml2
YXRpdmVzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAwMTc4N0UxMkUwMzcw
NzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDAxNzg3RjEyRTAzNzA3MDA2NDg0NjIgLyogSlNP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5MTA4OUQyRjE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5
IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5
MUEzOTA1ODE0QzBGNEI5MDBGNjc5MDEgLyogVWludDhDbGFtcGVkQXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVp
bnQ4Q2xhbXBlZEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAv
KiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFn
ZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTM1MCw3ICsxMTI4NSw2
IEBACiAJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjc0QjMwMTQwRUJFRDgw
MEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyNzVCNzgxMUM1RDFDMzAwQzkyMDZDIC8qIEpTV2Vi
S2l0UG9pbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJLaXRQb2ludEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJD
Mjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyog
Q29sb3JJbnB1dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29sb3JJbnB1dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY0
QjE0MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xD
b250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQwMzMsOCAr
MTM5NjcsNiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0OUVFQ0RDQzEwNTAzQzIz
MDAwOTlGQUIgLyogQXJyYXlCdWZmZXIuaWRsICovLAotCQkJCTQ5RUVDREM5MTA1MDNDMjMwMDA5
OUZBQiAvKiBBcnJheUJ1ZmZlclZpZXcuaWRsICovLAogCQkJCTZFNEU5MUE3MTBGN0ZCMzEwMEEy
Nzc5QyAvKiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8sCiAJCQkJNkU0RTkxQTgxMEY3
RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggKi8sCiAJCQkJNDk0ODRG
QjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKQEAgLTE0MDU1LDkg
KzEzOTg3LDYgQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNT
dHlsZS5oICovLAotCQkJCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAg
Ki8sCi0JCQkJMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmggKi8sCi0JCQkJ
MkU5N0NDRTkxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3LmlkbCAqLywKIAkJCQlGQjkxMzky
MDE2QUU0QjBCMDAxRkU2ODIgLyogRE9NUGF0aC5oICovLAogCQkJCUZCOTEzOTIxMTZBRTRCMEIw
MDFGRTY4MiAvKiBET01QYXRoLmlkbCAqLywKIAkJCQlBMDI0NTc0RTE2Q0VBQTI3MDAwRTU2NzEg
LyogRVhURHJhd0J1ZmZlcnMuY3BwICovLApAQCAtMTQwNjYsMTEgKzEzOTk1LDYgQEAKIAkJCQk3
NzI4Njk0QjE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNw
cCAqLywKIAkJCQk3NzI4Njk0QzE0Rjg4ODI1MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmggKi8sCiAJCQkJNzcyODY5NEQxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgKi8sCi0JCQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFC
IC8qIEZsb2F0MzJBcnJheS5pZGwgKi8sCi0JCQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8q
IEZsb2F0NjRBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIElu
dDE2QXJyYXkuaWRsICovLAotCQkJCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQzMkFy
cmF5LmlkbCAqLywKLQkJCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogSW50OEFycmF5Lmlk
bCAqLywKIAkJCQk3RTVEN0E3MzE2MUQzRjhGMDA4OTZDMzQgLyogT0VTRWxlbWVudEluZGV4VWlu
dC5jcHAgKi8sCiAJCQkJN0U1RDdBNzQxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRl
eFVpbnQuaCAqLywKIAkJCQk5MDAxNzczRDEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5jcHAgKi8sCkBAIC0xNDA4NSwxMCArMTQwMDksNiBAQAogCQkJCTc3QTE3QTZF
MTJGMjgxODIwMDRFMDJGNiAvKiBPRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAgKi8sCiAJCQkJNzdB
MTdBNkYxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmggKi8sCiAJCQkJ
NzdBMTdBNzAxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2JqZWN0LmlkbCAqLywK
LQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogVWludDE2QXJyYXkuaWRsICovLAotCQkJ
CTQ5RUVDRERCMTA1MDNDMjMwMDA5OUZBQiAvKiBVaW50MzJBcnJheS5pZGwgKi8sCi0JCQkJNDlF
RUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4QXJyYXkuaWRsICovLAotCQkJCTkxQTM5MDU4
MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1wZWRBcnJheS5pZGwgKi8sCiAJCQkJQTdEMjBG
NkIxMDdGNDM4QjAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5oICovLAogCQkJCUE3RDIwRjNC
MTA3RjM3MzgwMEE4MDM5MiAvKiBXZWJHTEFjdGl2ZUluZm8uaWRsICovLAogCQkJCTQ5QzdCOUE4
MTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5jcHAgKi8sCkBAIC0xNjY1MywxMCArMTY1
NzMsNiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAwQjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovLAotCQkJCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyLmggKi8sCi0JCQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLywKLQkJCQk0OUVFQ0YxQTEwNTA3MkYzMDAwOTlGQUIg
LyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLywKIAkJCQlCRThFRjAzRTE3MUM4RkY5MDA5QjQ4QzMg
LyogSlNBdWRpb1RyYWNrLmNwcCAqLywKIAkJCQlCRThFRjAzRjE3MUM4RkY5MDA5QjQ4QzMgLyog
SlNBdWRpb1RyYWNrLmggKi8sCiAJCQkJQkU4RUYwNDAxNzFDOEZGOTAwOUI0OEMzIC8qIEpTQXVk
aW9UcmFja0xpc3QuY3BwICovLApAQCAtMTY2NzAsOCArMTY1ODYsNiBAQAogCQkJCTQ5RUVEMTNE
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0
OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
ICovLAogCQkJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oICovLAotCQkJCTJFOTdDRTZEMTI5M0FENkIwMEM1QzhGRiAvKiBKU0RhdGFWaWV3
LmNwcCAqLywKLQkJCQkyRTk3Q0U2RTEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRhVmlldy5oICov
LAogCQkJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNwcCAqLywK
IAkJCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oICovLAogCQkJ
CUZCOTEzOTI5MTZBRTRGQzAwMDFGRTY4MiAvKiBKU0RPTVBhdGguY3BwICovLApAQCAtMTY2ODYs
MTAgKzE2NjAwLDYgQEAKIAkJCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3
QnVmZmVycy5oICovLAogCQkJCTc3Mjg2OTgxMTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAgKi8sCiAJCQkJNzcyODY5ODIxNEZEOUFEQTAwRjQ4NERD
IC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggKi8sCi0JCQkJNDlFRUNFRjQxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGNTEwNTA3
MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuaCAqLywKLQkJCQk2RUJDNUVBRDEzOEI1MEYy
MDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovLAotCQkJCTZFQkM1RUFFMTM4QjUwRjIw
MEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oICovLAogCQkJCUJDOTdFNDEwMTA5MTU0RkEwMDEw
RDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKIAkJCQlCQzk3RTQxMTEwOTE1NEZB
MDAxMEQzNjEgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5oICovLAogCQkJCTFBNEEyREVCMEExQjg1
MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmNwcCAqLywKQEAgLTE2ODQzLDEyICsx
Njc1Myw2IEBACiAJCQkJRTQ0NjE0MEYwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTSFRNTFZpZGVvRWxl
bWVudC5oICovLAogCQkJCUE3Nzk3OTI0MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5j
cHAgKi8sCiAJCQkJQTc3OTc5MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi8s
Ci0JCQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8sCi0J
CQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovLAotCQkJCTQ5
RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVD
RUY3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQk0OUM3Qjk4MjEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovLAotCQkJCTQ5QzdCOTgzMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUNEMjdGNkUyMTQ1NzY3NTgwMDc4
MjA3RCAvKiBKU01lZGlhQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJQ0QyN0Y2RTMxNDU3Njc1ODAw
NzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmggKi8sCiAJCQkJRTQ0NjE0MTAwQ0Q2ODI2OTAw
RkFEQTc1IC8qIEpTTWVkaWFFcnJvci5jcHAgKi8sCkBAIC0xNjg4MSwxNCArMTY3ODUsNiBAQAog
CQkJCUU0NDYxNDEzMENENjgyNjkwMEZBREE3NSAvKiBKU1RpbWVSYW5nZXMuaCAqLywKIAkJCQkw
Nzg0NjM0MDE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmNwcCAqLywKIAkJCQkwNzg0
NjM0MTE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmggKi8sCi0JCQkJNDlFRUNFRkUx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZGMTA1
MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkMxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRUZEMTA1MDcwQzQw
MDA5OUZBQiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDhBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTVWludDhBcnJheS5oICovLAotCQkJCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBK
U1VpbnQ4Q2xhbXBlZEFycmF5LmNwcCAqLywKLQkJCQk5MTA4OUQzMDE0QzMzNUNEMDA1QUZDNDkg
LyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTE1Qzc3MDkyMTAwRDNDQTgwMDVCQTI2
NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwICovLAogCQkJCTE1Qzc3MDkxMTAwRDNDQTgwMDVCQTI2
NyAvKiBKU1ZhbGlkaXR5U3RhdGUuaCAqLywKIAkJCQlCRThFRjA0NjE3MUM5MDE0MDA5QjQ4QzMg
LyogSlNWaWRlb1RyYWNrLmNwcCAqLywKQEAgLTE4NzkwLDYgKzE4Njg2LDggQEAKIAkJCQlBNzVF
NDk3NTEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAqLywKIAkJ
CQlBNzVFNDk3NDEwNzUyQUNCMDBDOUI4OTYgLyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggKi8s
CiAJCQkJQkM1M0Q5MTAxMTQzMTBDQzAwMEQ4MTdFIC8qIFdlYkNvcmVKU0NsaWVudERhdGEuaCAq
LywKKwkJCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmNwcCAqLywKKwkJCQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmggKi8sCiAJCQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8q
IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJCUUxQTY0M0YxMEVDMDk3MjUwMDc3
OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8sCiAJCQkJRjM0NzQyRTYxMzQzNjM1
MDAwNTMxQkMyIC8qIFdvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcCAqLywKQEAgLTE4ODQ1LDgg
KzE4NzQzLDYgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMyNzVDQjIxMUM1RTg1
QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwICovLAotCQkJCTg2MjQzRDAwMTFC
QzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oICovLAogCQkJCUJDMkVE
NkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAogCQkJCUNEREU2OTFE
MTcxREY4OTEwMEE0NEQ4OSAvKiBKU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcCAqLywKIAkJCQlGREVB
QUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3Bw
ICovLApAQCAtMTg4NzIsNyArMTg3NjgsNiBAQAogCQkJCUFENzI2RkVBMTZEOUY0MEIwMDNBNEU2
RCAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCAqLywKIAkJCQlFMUFEMTRFNzEyOTcz
Nzc0MDBBQ0E5ODkgLyogSlNDU1NTdHlsZVJ1bGVDdXN0b20uY3BwICovLAogCQkJCUJDMjBGQjdF
MEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNwcCAqLywKLQkJCQkyRTk3Q0NG
NjEyOTNBNDNBMDBDNUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgKi8sCiAJCQkJNDE2MkE0
NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwICovLAogCQkJCTMxRkIxQTZCMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2
ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQk1OTBFMUI0QTExRTRFRjcwMDA2OUY3ODQgLyogSlNEZXZp
Y2VPcmllbnRhdGlvbkV2ZW50Q3VzdG9tLmNwcCAqLywKQEAgLTIxMzM0LDcgKzIxMjI5LDYgQEAK
IAkJCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OTkxMzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zl
ckl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgxQUM1OTlBMTMxNjM2RTYwMDA5QTdFMCAvKiBE
YXRhVHJhbnNmZXJJdGVtTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NDRUIxMjkzOUNC
ODAwQzVDOEZGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTczMkIwQjEzNkEx
NjFEMDA1QzhEN0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
REI2MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0NTNFQjYzNzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjE4NDMsNiArMjE3MzcsNyBAQAogCQkJCTg5M0M0ODBGMTI0OEJEM0EwMDJCM0Q4
NiAvKiBGaWxlRW50cnlTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4MzEyMkI4QTNE
MDAxRkQxRjcgLyogRmlsZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURGMzY5RjEyMkM5
NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwOTlE
MDkxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUE4OEE5MDUxNzU1M0NENzAwMEM3NEY5IC8qIEZpbGVJY29uTG9hZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCRTEyNTFGMTJEMDAzRUYyNjkgLyogRmlsZUlu
cHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMjUyLDkgKzIyMTQ3LDYgQEAKIAkJCQkx
QzgxQkEwQTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDE4Rjg4MDUwRkY5NTdBRjAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUNBMTJCMDNGNTAwMDNBNTgzQSAvKiBKU0FuYWx5
c2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMDExMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQXJyYXlCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjFDMTA1MDcyRjMwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYyNDNEMDEx
MUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGREExNUU5RTEyQjAzRUUxMDAzQTU4M0EgLyogSlNBdWRpb0J1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkRGN0U5QzQxM0FDMjFEQjAwQTUxRUFDIC8qIEpTQXVkaW9CdWZmZXJD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjMxNSw3ICsyMjIwNyw2IEBACiAJCQkJMUFF
ODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI1OURENjk5MTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkU5N0NFNzAxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZp
ZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxNjJBNDU4MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREExNUVEMjEy
QjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRkIx
QTY2MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTIyMzg4LDggKzIyMjc5LDYgQEAKIAkJCQk4OTg3ODVCMzEyMkNBMkE3MDAzQUFCREEg
LyogSlNGaWxlU3lzdGVtQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2REE4NDRFMTIy
NEEwNzEwMDYwRDAwNiAvKiBKU0ZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg5M0M0
N0JDMTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDlFRUNGMDMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggaW4g
SGVhZGVycyAqLywKLQkJCQk2RUJDNUVCMDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjdCMTRFQUMwODYwMDkwRDc1RSAvKiBKU0Zv
Y3VzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQwOUVCREMwMTZCN0YzOEUwMENCQTNGQyAv
KiBKU0ZvbnRMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RUFDMTJCMDNFRTEwMDNB
NTgzQSAvKiBKU0dhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNDkwLDkgKzIyMzc5LDYg
QEAKIAkJCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdBMEU3NkRCMTBCRjA1OTgwMEEwMjc2RSAvKiBKU0luamVjdGVkU2NyaXB0
SG9zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc3MUYxMEMwMERCMTAwQTAyNzZFIC8qIEpT
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwNzEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
NTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDNUZBRUQyMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4NjYyOUQzMDlEQTJCNDgwMDk2MzNBNSAvKiBKU0tleWJvYXJk
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUY0NTQzMEY3QzNCNUYwMEQ3QzFGQiAvKiBK
U0xhenlFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNzQyLDEwICsyMjYyOCw2
IEBACiAJCQkJRTE3QjQ5MjExNkE5QjhGRjAwMUM4ODM5IC8qIEpTVHJhbnNpdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTc1MEQ1RDBBOTBERUUxMDAwRkYyMTUgLyogSlNUcmVlV2Fs
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODY2MjlDRjA5REEyQjQ3MDA5NjMzQTUgLyogSlNV
SUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlGQUIgLyog
SlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMEIxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjA5MTA1MDcw
QzQwMDA5OUZBQiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTkxMDg5RDMy
MTRDMzM2MDAwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBQUE0RkFEMjE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVlc3RFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTVDNzcwOTMxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU4RUYwNEIxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlk
ZW9UcmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDc0NSw3ICsyNDYyNyw2IEBACiAJCQkJOTdC
QzZBMkYxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlVGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3QkM2QTMxMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZVRyYWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkM2NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01T
dHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZG
IC8qIERhdGFWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NzMyQjBBMTM2QTE2MUQwMDVD
OEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCNTEy
NTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
NTVCM0RCNzEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yNTQwMyw5ICsyNTI4NCw2IEBACiAJCQkJMUM4MUJBMDkwRTk3MzQ4MzAwMjY2
RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE4Rjg4
MDQwRkY5NTdBRTAwODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFQzkxMkIwM0Y1MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTQ5RUVDRjAwMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjc1Q0IzMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0Fy
cmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjFCMTA1MDcyRjMw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURG
MzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
MkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkRBMTVFOUQxMkIwM0VFMTAwM0E1ODNBIC8qIEpTQXVkaW9CdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yNTQ4NSw4ICsyNTM2Myw2IEBACiAJCQkJMUFFODJGOEYwQ0FBRkE5RDAw
MjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU5REQ2OUExMTkw
MjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkU5N0NFNkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkU5N0NDRjcxMjkzQTQzQTAwQzVDOEZGIC8qIEpTRGF0YVZpZXdD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2MkE0NTcxMDExNDY0NzAwREZGM0VEIC8q
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE2
MkE0NTQxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNBIC8qIEpT
RGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU1NTgsOCArMjU0MzQsNiBAQAogCQkJ
CTg5ODc4NUY0MTIyRTFFQUMwMDNBQUJEQSAvKiBKU0ZpbGVSZWFkZXJTeW5jLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5ODc4NUIyMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0ZW1DYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4OTNDNDdCQjEyMzhBMEE5MDAyQjNEODYgLyog
SlNGaWxlV3JpdGVyQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDIxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZF
QkM1RUFGMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNkQ5RDI3QzE0RUFDMDg2MDA5MEQ3NUUgLyogSlNGb2N1c0V2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZEQTE1RUFCMTJCMDNFRTEwMDNBNTgzQSAvKiBKU0dhaW5Ob2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFODBEQTYzMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xv
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2MTgsNiArMjU0OTIsNyBAQAogCQkJCUE2
MTQ4QTc4MTJFNDFFM0IwMDQ0QTc4NCAvKiBKU0hUTUxLZXlnZW5FbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBRTJBQjIxMEExQ0U2M0IwMEI0MkIyNSAvKiBKU0hUTUxMYWJlbEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjMwQTFDRTYzQjAwQjQyQjI1IC8qIEpT
SFRNTExlZ2VuZEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYwOTlEMDgxN0I5NjhB
MTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUyQUIyNTBBMUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTElFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MEU3QjEwMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxMaW5r
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUFEMTM5QjEyOTVEOTI2MDBBQ0E5ODkg
LyogSlNIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTY3Miw5
ICsyNTU0Nyw2IEBACiAJCQkJRjMxNjM5NkUxMzI5NDg3NjAwQTY0OUNCIC8qIEpTSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMEU3NzFFMTBDMDBEQjEwMEEw
Mjc2RSAvKiBKU0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QTc0RUNCRDEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50
MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNJbnQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOTk1MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzVGQUVEMTBE
Q0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFDNUZBRUU3MERDRkRBNjgwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDQwOURBMkI0ODAwOTYzM0E1IC8q
IEpTS2V5Ym9hcmRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1OTU2LDEwICsyNTgyOCw2
IEBACiAJCQkJMUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2Vy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQwMDlEQTJCNDgwMDk2MzNBNSAv
KiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMEExMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlF
RUNGMDgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk5MTA4OUQzMzE0QzMzNjA1MDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBQUE0RkFEMzE3NUQ1Q0IzMDA3NDM4NzMgLyogSlNVSVJlcXVl
c3RFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUM3NzA5NDEwMEQzQ0E4MDA1QkEyNjcg
LyogSlNWYWxpZGl0eVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJFOEVGMDRBMTcxQzkw
MTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNpb24gMTU0
MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBKU0RP
TVdyYXBwZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogCi10eXBlZGVmIEhhc2hNYXA8dm9p
ZCosIEpTQzo6V2VhazxKU0RPTVdyYXBwZXI+ID4gRE9NT2JqZWN0V3JhcHBlck1hcDsKK3R5cGVk
ZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+ID4gRE9NT2JqZWN0V3Jh
cHBlck1hcDsKIHR5cGVkZWYgSlNDOjpXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTQzo6SlNTdHJp
bmcsIFB0ckhhc2g8U3RyaW5nSW1wbCo+ID4gSlNTdHJpbmdDYWNoZTsKIAogY2xhc3MgRE9NV3Jh
cHBlcldvcmxkIDogcHVibGljIFJlZkNvdW50ZWQ8RE9NV3JhcHBlcldvcmxkPiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJh
eUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0KLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganND
YXN0PEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLQotICAgIGlu
dCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAwKQotICAgICAg
ICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOyAvLyBOYU4vK2luZi8t
aW5mIHJldHVybnMgMCwgdGhpcyBpcyBpbnRlbmRlZCBieSBXZWJJREwKLSAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAgIGJ1ZmZlciA9
IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCksIDEpOwot
ICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIHNpemUgaXMgbm90IGEgc21hbGwg
ZW5vdWdoIHBvc2l0aXZlIGludGVnZXIuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYnVmZmVy
LmdldCgpKSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgJKHJl
dmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJWaWV3SGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBK
U0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCi0jZGVmaW5lIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVy
X2gKLQotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVy
Vmlldy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3Qu
aD4KLSNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlCYXNlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNo
YXIqIHRvb0xhcmdlU2l6ZSA9ICJTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRpdmUpLiI7
Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1ib29sIGNvcHlUeXBlZEFycmF5QnVm
ZmVyKEMqIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBzb3VyY2UsIHVuc2lnbmVkIHNvdXJjZUxl
bmd0aCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUg
c291cmNlVHlwZSA9IHNvdXJjZS0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChzb3VyY2VUeXBlICE9
IEFycmF5QnVmZmVyVmlldzo6VHlwZURhdGFWaWV3KTsKLQotICAgIGlmICh0YXJnZXQtPmdldFR5
cGUoKSA9PSBzb3VyY2VUeXBlKSB7Ci0gICAgICAgIGlmICghdGFyZ2V0LT5zZXQoc3RhdGljX2Nh
c3Q8Qyo+KHNvdXJjZSksIG9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghdGFyZ2V0LT5jaGVja0luYm91bmRE
YXRhKG9mZnNldCwgc291cmNlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c3dpdGNoIChzb3VyY2VUeXBlKSB7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQ4
OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRB
cnJheUJhc2U8c2lnbmVkIGNoYXI+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50ODoKLSAgICBjYXNlIEFycmF5
QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9m
ZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+ICo+KHNv
dXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVJbnQxNjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxl
bmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRp
Y19jYXN0PFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBzaG9ydD4gKj4oc291cmNlKS0+aXRlbShpKSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQxNjoK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJy
YXlCYXNlPHVuc2lnbmVkIHNob3J0PiAqPihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MzI6Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdl
dC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxpbnQ+ICo+
KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3Vy
Y2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShz
dGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+ICo+KHNvdXJjZSktPml0ZW0o
aSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9h
dDMyOgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kp
Ci0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlw
ZWRBcnJheUJhc2U8ZmxvYXQ+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVGbG9hdDY0OgotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQt
PnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8ZG91YmxlPiAq
Pihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgQywgdHlwZW5hbWUgVD4KLWJvb2wgc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5QXJndW1l
bnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17Ci0gICAgUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz4gYXJyYXkgPSB0b0FycmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQXJyYXlCdWZmZXJW
aWV3OjpWaWV3VHlwZSBhcnJheVR5cGUgPSBhcnJheS0+Z2V0VHlwZSgpOwotICAgIGlmIChhcnJh
eVR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAyKQotICAgICAgICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotCi0gICAgdWludDMyX3QgbGVuZ3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQo
MCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMy
KGV4ZWMpOwotCi0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oaW1wbCwgYXJy
YXkuZ2V0KCksIGxlbmd0aCwgb2Zmc2V0KSkpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiSW5kZXggaXMgb3V0IG9mIHJhbmdlLiIpKTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotSlNDOjpKU1Zh
bHVlIHNldFdlYkdMQXJyYXlIZWxwZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEMqIGltcGwpCi17
Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBKU0M6
OnRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
Ci0gICAgaWYgKHNldFdlYkdMQXJyYXlXaXRoVHlwZWRBcnJheUFyZ3VtZW50PEMsIFQ+KGV4ZWMs
IGltcGwpKQotICAgICAgICAvLyB2b2lkIHNldChpbiBXZWJHTDw+QXJyYXkgYXJyYXksIFtPcHRp
b25hbF0gaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICByZXR1cm4gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgLy8gdm9pZCBzZXQoaW4gc2VxdWVuY2U8bG9uZz4gYXJyYXksIFtPcHRpb25hbF0gaW4g
dW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgICAgICBKU0M6OkpTT2JqZWN0KiBhcnJheSA9IEpT
Qzo6YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICB1aW50MzJfdCBvZmZzZXQg
PSAwOwotICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAgICAgICAg
ICBvZmZzZXQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAgICB1aW50
MzJfdCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoIWltcGwtPmNoZWNrSW5ib3VuZERh
dGEob2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UuIikpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJyYXktPmdldChleGVjLCBpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgaW1wbC0+c2V0
KGkgKyBvZmZzZXQsIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gSlNDOjp0aHJvd1R5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcmd1bWVudCIpOwotfQotCi0v
LyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgotLy8gSWYg
dGhpcyByZXR1cm5zIDAsIGl0IHdpbGwgYWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFTY3JpcHQg
ZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4g
Y29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzb3VyY2UgPSB0b0Fy
cmF5QnVmZmVyVmlldyhleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFzb3VyY2UpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQXJyYXlCdWZmZXJWaWV3OjpWaWV3VHlwZSBzb3VyY2VUeXBl
ID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAgaWYgKHNvdXJjZVR5cGUgPT0gQXJyYXlCdWZmZXJW
aWV3OjpUeXBlRGF0YVZpZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDMyX3QgbGVu
Z3RoID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXQoZXhlYywgZXhlYy0+dm0oKS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgIFJlZlB0cjxDPiBhcnJh
eSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICBpZiAoIWFycmF5KSB7Ci0g
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIGlmICghKGNvcHlUeXBl
ZEFycmF5QnVmZmVyPEMsIFQ+KGFycmF5LmdldCgpLCBzb3VyY2UuZ2V0KCksIGxlbmd0aCwgMCkp
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29M
YXJnZVNpemUpKTsKLSAgICAgICAgcmV0dXJuIGFycmF5OwotICAgIH0KLQotICAgIHJldHVybiBh
cnJheTsKLX0KLQotLy8gVGVtcGxhdGUgZnVuY3Rpb24gdXNlZCBieSBYWFhBcnJheUNvbnN0cnVj
dG9ycy4KLS8vIElmIHRoaXMgcmV0dXJucyAwLCBpdCB3aWxsIGFscmVhZHkgaGF2ZSB0aHJvd24g
YSBKYXZhU2NyaXB0IGV4Y2VwdGlvbi4KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1Q
YXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3Vt
ZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyID0gdG9BcnJheUJ1ZmZlcihleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDEpID8gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhlYykgOiAwOwot
ICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSAwOwotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPiAyKQotICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQzMihleGVj
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNl
dCkgJSBzaXplb2YoVCkpIHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlz
IG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IC0gb2Zmc2V0KSAvIHNpemVvZihUKTsKLSAgICB9Ci0gICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6
Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpOwotICAgIGlmICghYXJyYXkpCi0gICAgICAg
IHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNpemUpKTsK
LSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5cGVuYW1lIFQ+Ci1Q
YXNzUmVmUHRyPEM+IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3RvcnM6Ci0gICAgLy8KLSAgICAvLyAg
MSkgKGluIGludCBzaXplKQotICAgIC8vICAyKSAoaW4gQXJyYXlCdWZmZXIgYnVmZmVyLCBbT3B0
aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4gdW5zaWduZWQgaW50IGxlbmd0aCkK
LSAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMgZW5kcyB1cCBiZWluZyBhIEpTICJh
cnJheS1saWtlIiBvYmplY3QKLSAgICAvLyAgICAKLSAgICAvLyBGb3IgdGhlIDAgYXJncyBjYXNl
LCBqdXN0IGNyZWF0ZSBhIHplcm8tbGVuZ3RoIHZpZXcuIFdlIGNvdWxkCi0gICAgLy8gY29uc2lk
ZXIgcmFpc2luZyBhIFN5bnRheEVycm9yIGZvciB0aGlzIGNhc2UsIGJ1dCBub3QgYWxsCi0gICAg
Ly8gSmF2YVNjcmlwdCBET00gYmluZGluZ3MgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5ldwot
ICAgIC8vIDxUeXBlPkFycmF5KCkiIGFuZCB3aGF0IG9jY3VycyB3aGVuIGEgcHJldmlvdXNseS1j
b25zdHJ1Y3RlZAotICAgIC8vIEFycmF5QnVmZmVyVmlldyBpcyByZXR1cm5lZCB0byBKYXZhU2Ny
aXB0OyBlLmcuLCBmcm9tCi0gICAgLy8gImFycmF5LnN1YnNldCgpIi4KLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIEM6OmNyZWF0ZSgwKTsKLSAgICAK
LSAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKLSAgICAgICAgLy8gSW52YWxp
ZCBmaXJzdCBhcmd1bWVudAotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgUmVmUHRyPEM+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRo
QXJyYXlCdWZmZXJBcmd1bWVudDxDLCBUPihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAg
ICAgICAgICByZXR1cm4gdmlldzsKLSAgICAKLSAgICAgICAgdmlldyA9IGNvbnN0cnVjdEFycmF5
QnVmZmVyVmlld1dpdGhUeXBlZEFycmF5QXJndW1lbnQ8QywgVD4oZXhlYyk7Ci0gICAgICAgIGlm
ICh2aWV3KQotICAgICAgICAgICAgcmV0dXJuIHZpZXc7Ci0KLSAgICAgICAgSlNDOjpKU09iamVj
dCogc3JjQXJyYXkgPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIHVpbnQz
Ml90IGxlbmd0aCA9IHNyY0FycmF5LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBSZWZQdHI8Qz4gYXJyYXkgPSBDOjpj
cmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCk7Ci0gICAgICAgIGlmICghYXJyYXkpIHsKLSAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCB0b29MYXJnZVNp
emUpKTsKLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNDOjpK
U1ZhbHVlIHYgPSBzcmNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgYXJyYXktPnNl
dChpLCB2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJyYXk7
Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgUmVmUHRyPEM+IHJlc3VsdDsKLSAgICBpZiAobGVuZ3RoID49IDApCi0gICAgICAg
IHJlc3VsdCA9IEM6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCB0b29MYXJnZVNpemUpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgSlNUeXBlLCB0eXBlbmFtZSBXZWJDb3JlVHlwZT4KLXN0YXRpYyBKU0M6OkpTVmFs
dWUgdG9KU0FycmF5QnVmZmVyVmlldyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQ29yZVR5cGUqIG9iamVjdCkKLXsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0KLSAgICBpZiAoSlNET01XcmFw
cGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVj
dCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCi0gICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeUNvc3Qob2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwotICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPEpTVHlwZT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld0hlbHBlcl9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRD
dXN0b20uY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwx
MyBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQXVkaW9CdWZmZXIu
aCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0J1ZmZlci5o
IgogI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNPZmZsaW5lQXVkaW9D
b250ZXh0LmgiCiAjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1
bnRpbWUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25l
LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
aW5kaW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lu
Y2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5jcHAiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5jcHAiCiAj
aW5jbHVkZSAiR0NDb250cm9sbGVyLmNwcCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyQ3VzdG9t
LmNwcCIKICNpbmNsdWRlICJKU0F0dHJDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQXVkaW9UcmFj
a0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNBdWRpb1RyYWNrTGlzdEN1c3RvbS5jcHAiCkBAIC03
MCw3ICs2OSw2IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uY3BwIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93U2hlbGwuY3BwIgogI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5jcHAiCi0jaW5j
bHVkZSAiSlNEYXRhVmlld0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZUN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNEZXZpY2VPcmllbnRhdGlvbkV2ZW50
Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RvY3VtZW50Q3VzdG9tLmNwcCIKQEAgLTE3MCw1ICsx
NjgsNiBAQAogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmNwcCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5jcHAiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCIKKyNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIgogI2luY2x1ZGUgIldvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwIgogI2luY2x1ZGUgIldvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2
aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDE0IEBACiAjaW5jbHVkZSAiQmxvYi5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxh
Y2Vob2xkZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0Rp
Y3Rpb25hcnkuaCIKICNpbmNsdWRlICJKU0ZpbGUuaCIKICNpbmNsdWRlICJXZWJLaXRCbG9iQnVp
bGRlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ1NTUnVsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsNyArNzMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAg
ICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBw
ZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgcnVsZSk7
CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgcnVsZSk7CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NWYWx1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghdmFsdWUtPmlzQ1NT
T01TYWZlKCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciog
d3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB2YWx1ZSk7Cisg
ICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVj
KSwgdmFsdWUpOwogCiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAko
cmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9D
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJK
U0NyeXB0by5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJWaWV3LmgiCiAKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTQxLDEyICs0MSwxMiBAQCBK
U1ZhbHVlIEpTQ3J5cHRvOjpnZXRSYW5kb21WYWx1ZXMoRXhlY1N0CiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKIAog
ICAgIEpTVmFsdWUgYnVmZmVyID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgQXJyYXlCdWZmZXJW
aWV3KiBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhidWZmZXIpOworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3
KGJ1ZmZlcik7CiAgICAgaWYgKCFhcnJheUJ1ZmZlclZpZXcpCiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwo
KS0+Z2V0UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldywgZWMpOworICAgIGltcGwoKS0+Z2V0
UmFuZG9tVmFsdWVzKGFycmF5QnVmZmVyVmlldy5nZXQoKSwgZWMpOwogCiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDE1ICszMSwyMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0V3Jh
cHBhYmxlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0
b3IuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRGF0YVZpZXcuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0xv
b2t1cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9OdWxs
UHRyLmg+CkBAIC0xMjgsNiArMTM0LDE2IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAg
IHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0
dXJlPFdyYXBwZXJDbGFzcz4oZXhlYywgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKICAgICB9CiAKKyAgICBpbmxpbmUg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQqIHdvcmxk
LCBKU0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC0+dm0oKS0+bV90eXBlZEFycmF5Q29u
dHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworICAgIH0KKyAgICAKKyAgICBpbmxpbmUg
dm9pZCogd3JhcHBlckNvbnRleHQoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciopCisgICAgeworICAgICAgICByZXR1cm4gd29ybGQ7CisgICAgfQorCiAgICAgaW5saW5l
IEpTRE9NV3JhcHBlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2
b2lkKikgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkKiwgdm9pZCosIEpTRE9NV3JhcHBlciosIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiwgdm9pZCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCosIHZvaWQqLCBKU0RPTVdyYXBwZXIq
KSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM5LDYgKzE1NSwxMyBAQCBjbGFzcyBET01TdHJpbmdM
aXN0OwogICAgICAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7CiAgICAgfQogCisgICAg
aW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQqIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCisgICAgeworICAgICAg
ICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9v
bCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFNjcmlwdFdy
YXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBpZiAo
IXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTQ3LDYgKzE3MCwxNCBAQCBjbGFzcyBET01TdHJpbmdM
aXN0OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgYm9vbCBzZXRJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5k
bGVPd25lciogd3JhcHBlck93bmVyLCB2b2lkKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYg
KCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OlBhc3NXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4o
d3JhcHBlciwgd3JhcHBlck93bmVyLCBjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCiAgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCogd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIq
IHdyYXBwZXIpCiAgICAgewogICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQpAQCAtMTU1
LDI0ICsxODYsMzIgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNET01X
cmFwcGVyKiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNsYXNz
KiBkb21PYmplY3QpCisgICAgaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpK
U0FycmF5QnVmZmVyKiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKEpTRE9NV3JhcHBlciog
d3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCkpCisgICAg
ICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHdlYWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcz4g
aW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChKU0M6OkpTT2Jq
ZWN0KiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0KSkK
ICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICByZXR1cm4gd29ybGQtPm1fd3Jh
cHBlcnMuZ2V0KGRvbU9iamVjdCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIERP
TUNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwg
RE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVyKQorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBj
YWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwg
V3JhcHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwogICAgICAgICB2b2lk
KiBjb250ZXh0ID0gd3JhcHBlckNvbnRleHQod29ybGQsIGRvbU9iamVjdCk7CiAgICAgICAgIGlm
IChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVy
LCBjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNDOjpQYXNzV2VhazxK
U0RPTVdyYXBwZXI+IHBhc3NXZWFrKHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KTsKKyAgICAgICAg
SlNDOjpQYXNzV2VhazxKU0M6OkpTT2JqZWN0PiBwYXNzV2Vhayh3cmFwcGVyLCBvd25lciwgY29u
dGV4dCk7CiAgICAgICAgIHdlYWtBZGQod29ybGQtPm1fd3JhcHBlcnMsICh2b2lkKilkb21PYmpl
Y3QsIHBhc3NXZWFrKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIERPTUNs
YXNzKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNo
ZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3Jh
cHBlckNsYXNzKiB3cmFwcGVyKQogICAgIHsKICAgICAgICAgaWYgKGNsZWFySW5saW5lQ2FjaGVk
V3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE5NSw3ICsyMzQsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogICAgIHsKICAgICAgICAg
aWYgKCFkb21PYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAg
ICAgaWYgKEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdv
cmxkKGV4ZWMpLCBkb21PYmplY3QpKQorICAgICAgICBpZiAoSlNDOjpKU09iamVjdCogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb21PYmplY3QpKQogICAg
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFdy
YXBwZXJDbGFzcz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBkb21PYmplY3QpOwogICAgIH0KQEAgLTMy
Myw2ICszNjIsMjUgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIG9iamVj
dDsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIq
IGJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisgICAgICAgIGlmIChKU0M6OkpTVmFsdWUgcmVzdWx0ID0gZ2V0RXhp
c3RpbmdXcmFwcGVyPEpTQzo6SlNBcnJheUJ1ZmZlcj4oZXhlYywgYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGJ1ZmZlci0+cmVmKCk7CisgICAgICAgIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAg
ICAgICAgY2FjaGVXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgYnVmZmVyLCB3cmFwcGVyKTsK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKKyAgICB7CisgICAgICAgIGlmICghdmll
dykKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gdmll
dy0+d3JhcChleGVjLCBnbG9iYWxPYmplY3QpOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgogICAgIGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxUPiBwdHIpCiAg
ICAgewpAQCAtMzc2LDYgKzQzNCwzMiBAQCBjbGFzcyBET01TdHJpbmdMaXN0OwogCiAgICAgSlND
OjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFBh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwogCisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHRvQXJyYXlCdWZmZXJWaWV3KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqIHdyYXBwZXIgPSBKU0M6OmpzRHlu
YW1pY0Nhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZhbHVlKTsKKyAgICAgICAgaWYgKCF3
cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiB3cmFwcGVyLT5p
bXBsKCk7CisgICAgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50OEFycmF5
PiB0b0ludDhBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQ
dHI8SlNDOjpJbnQxNkFycmF5PiB0b0ludDE2QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2YWx1ZSk7IH0K
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvSW50MzJBcnJheShKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQz
MkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6VWludDhBcnJh
eT4gdG9VaW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VaW50OENsYW1wZWRBcnJheShKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENs
YW1wZWRBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1VpbnQxNkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b05hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVWludDMyQXJyYXkoSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRv
cj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRv
RmxvYXQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5
cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1Jl
ZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9hdDY0QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZh
bHVlKTsgfQorICAgIAorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RGF0YVZpZXc+IHRvRGF0
YVZpZXcoSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0RhdGFWaWV3
KiB3cmFwcGVyID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNEYXRhVmlldyo+KHZhbHVlKTsK
KyAgICAgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxjbGFzcyBU
PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM7CiAKICAgICB0ZW1wbGF0ZTw+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSlNEYXRhVmlldy5oIgotCi0jaW5jbHVkZSAiRGF0YVZpZXcu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXdIZWxwZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWVudW0gRGF0YVZpZXdBY2Nlc3NUeXBl
IHsKLSAgICBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQzMiwKLSAgICBBY2Nlc3NEYXRhVmll
d01lbWJlckFzRmxvYXQ2NAotfTsKLQotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRGF0YVZpZXcqIG9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gd3JhcDxKU0RhdGFWaWV3PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci19Ci0K
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNEYXRhVmlld0NvbnN0cnVjdG9yOjpjb25z
dHJ1Y3RKU0RhdGFWaWV3KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnQoMCkuaXNOdWxsKCkgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotCi0gICAgUmVmUHRyPERhdGFWaWV3PiB2
aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aEFycmF5QnVmZmVyQXJndW1lbnQ8RGF0
YVZpZXcsIGNoYXI+KGV4ZWMpOwotICAgIGlmICghdmlldy5nZXQoKSkgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIH0KLQotICAgIEpTRGF0YVZpZXdDb25zdHJ1
Y3RvcioganNDb25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RhdGFWaWV3Q29uc3RydWN0b3IqPihleGVj
LT5jYWxsZWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4
ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCB2aWV3LmdldCgpKSkpOwotfQotCi1z
dGF0aWMgSlNWYWx1ZSBnZXREYXRhVmlld01lbWJlcihFeGVjU3RhdGUqIGV4ZWMsIERhdGFWaWV3
KiBpbXAsIERhdGFWaWV3QWNjZXNzVHlwZSB0eXBlKQotewotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0KLSAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPiAxICYmICh0eXBlID09IEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9h
dDMyIHx8IHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQpKSB7Ci0gICAgICAg
IGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdDsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMyOgotICAgIGNhc2Ug
QWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQ6IHsKLSAgICAgICAgZG91YmxlIHZhbHVlID0g
KHR5cGUgPT0gQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpID8gaW1wLT5nZXRGbG9hdDMy
KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpIDogaW1wLT5nZXRGbG9hdDY0KGJ5dGVPZmZz
ZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotICAgICAgICByZXN1bHQgPSBzdGQ6OmlzbmFuKHZhbHVl
KSA/IGpzTmFOKCkgOiBqc051bWJlcih2YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0gZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PERhdGFWaWV3Kj4o
aW1wbCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIpOwotfQotCi1KU1ZhbHVlIEpT
RGF0YVZpZXc6OmdldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRE
YXRhVmlld01lbWJlcihleGVjLCBzdGF0aWNfY2FzdDxEYXRhVmlldyo+KGltcGwoKSksIEFjY2Vz
c0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZp
c2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTAgQEAKICNpbmNsdWRlICJKU05vZGUu
aCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNpbmNsdWRlICJKU1RyYWNrQ3VzdG9tLmgiCi0j
aW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNWb2lkQ2FsbGJhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlv
bmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlv
bmFyeS5oCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
PGhlYXAvU3Ryb25nSW5saW5lcy5oPgogI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWlu
dDhBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBKU1Zh
bHVlIEpTRG9jdW1lbnQ6OmxvY2F0aW9uKEV4ZWNTdGF0ZSogCiAgICAgICAgIHJldHVybiBqc051
bGwoKTsKIAogICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5kb21X
aW5kb3coKS0+bG9jYXRpb24oKTsKLSAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0
Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGxvY2F0aW9uKSkKKyAgICBpZiAoSlNP
YmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgbG9j
YXRpb24pKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKIAogICAgIEpTTG9jYXRpb24qIGpzTG9j
YXRpb24gPSBKU0xvY2F0aW9uOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTTG9jYXRpb24+KGV4
ZWMsIGdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0KCksIGxvY2F0aW9uKTsKQEAgLTgzLDcg
KzgzLDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlm
ICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBl
ciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb2N1bWVu
dCk7CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3Js
ZChleGVjKSwgZG9jdW1lbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWV2ZW50KQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNo
ZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgZXZlbnQpOworICAgIEpTT2JqZWN0KiB3cmFw
cGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGV2ZW50KTsKICAgICBp
ZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAkocmV2aXNpb24g
MTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogI2luY2x1ZGUgIkpTRmlsZVJl
YWRlci5oIgogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU0FycmF5QnVmZmVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBK
U1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFjb2xsZWN0
aW9uKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBw
ZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgY29sbGVjdGlvbik7Cisg
ICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVj
KSwgY29sbGVjdGlvbik7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1l
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgSlNWYWx1ZSBKU0hUTUxUZW1wbGF0ZUVsZW1l
bnQ6OmNvbnRlbnQoRQogICAgIEhUTUxUZW1wbGF0ZUVsZW1lbnQqIGltcCA9IHN0YXRpY19jYXN0
PEhUTUxUZW1wbGF0ZUVsZW1lbnQqPihpbXBsKCkpOwogICAgIERvY3VtZW50RnJhZ21lbnQqIGNv
bnRlbnQgPSBpbXAtPmNvbnRlbnQoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBjb250ZW50KTsKKyAgICBKU09iamVj
dCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBjb250ZW50
KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRh
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJKU1VpbnQ4Q2xh
bXBlZEFycmF5LmgiCiAKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CkBAIC00MCw3ICszOSw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogICAgIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIo
Y3VycmVudFdvcmxkKGV4ZWMpLCBpbWFnZURhdGEpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0g
Z2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0YSk7CiAgICAgaWYg
KHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxOSAr
NDYsMTEgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVk
ZSAiSlNGbG9hdDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Zsb2F0NjRBcnJheS5oIgogI2luY2x1
ZGUgIkpTSFRNTEFsbENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJKU0hUTUxDb2xsZWN0aW9uLmgi
Ci0jaW5jbHVkZSAiSlNJbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNJbnQzMkFycmF5LmgiCi0j
aW5jbHVkZSAiSlNJbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJK
U05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCi0jaW5jbHVkZSAiSlNVaW50MTZB
cnJheS5oIgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJy
YXkuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2UuaCIKICNp
bmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgpAQCAtNjcsOCArNTksMTEgQEAKICNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cE9iamVjdC5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlRXZl
bnQuaCIKIAotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAt
MzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0b20uaCIKICNpbmNsdWRl
ICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMyArMzAsMTMgQEAK
ICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR1BhdGhTZWdDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYQogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBp
ZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQo
ZXhlYyksIG9iamVjdCkpCisgICAgaWYgKEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3Jh
cHBlcihjdXJyZW50V29ybGQoZXhlYyksIG9iamVjdCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVy
OwogCiAgICAgc3dpdGNoIChvYmplY3QtPnBhdGhTZWdUeXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7CisgICAgSlNPYmplY3QqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgc3R5bGVTaGVldCk7
CiAgICAgaWYgKHdyYXBwZXIpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0
MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmFja0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIAogICAgIGlmICghdHJhY2spCiAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAKLSAgICBKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgdHJhY2spOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVk
V3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIHRyYWNrKTsKICAgICBpZiAod3JhcHBlcikKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwx
NCBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0VYVERyYXdC
dWZmZXJzLmgiCiAjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNp
bmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQu
aCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0
YS5oIgotI2luY2x1ZGUgIkpTSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIkpTT0VTRWxlbWVudElu
ZGV4VWludC5oIgogI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgogI2luY2x1
ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCiAjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0
LmgiCiAjaW5jbHVkZSAiSlNPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIkpTVWlu
dDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJKU1dlYkdM
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCiAjaW5j
bHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKQEAgLTg1LDEwICs4MSw5IEBA
CiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5
cy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKICNpZiBFTkFCTEUoVklERU8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDgg
KzM4LDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgotI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUg
IkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvd0N1c3RvbS5oIgpAQCAtNTAsNiArNDgsOCBAQAogI2luY2x1ZGUgPGludGVycHJldGVyL1N0
YWNrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIApAQCAtMTI3LDkgKzEyNywxMCBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnNl
bmQoRXhlY1N0YXRlCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9ET01Gb3JtRGF0YSh2YWwp
LCBlYyk7CiAgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhKU0FycmF5QnVmZmVyOjppbmZv
KCkpKQogICAgICAgICAgICAgaW1wbCgpLT5zZW5kKHRvQXJyYXlCdWZmZXIodmFsKSwgZWMpOwot
ICAgICAgICBlbHNlIGlmICh2YWwuaW5oZXJpdHMoSlNBcnJheUJ1ZmZlclZpZXc6OmluZm8oKSkp
Ci0gICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJheUJ1ZmZlclZpZXcodmFsKSwgZWMpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhKU0FycmF5QnVmZmVy
Vmlldzo6aW5mbygpKSkgeworICAgICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdmll
dyA9IHRvQXJyYXlCdWZmZXJWaWV3KHZhbCk7CisgICAgICAgICAgICBpbXBsKCktPnNlbmQodmll
dy5nZXQoKSwgZWMpOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGltcGwoKS0+c2VuZCh2
YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBlYyk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI1ICszMiwxMyBAQAog
I2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgotI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIK
ICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2lu
Y2x1ZGUgIkpTRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1
ZGUgIkpTRmxvYXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKLSNpbmNsdWRl
ICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJK
U0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJKU05h
dmlnYXRvci5oIgotI2luY2x1ZGUgIkpTVWludDE2QXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQz
MkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OEFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50OENs
YW1wZWRBcnJheS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0VmFsdWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTYzLDEyICs1MSwxNyBA
QAogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZl
clZpZXcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRGF0YVZpZXcuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUmVnRXhwLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9SZWdFeHBPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTcyMiw0NyArMTcxNSw2IEBAIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYKICAgICBtX2Jsb2JVUkxzLnN3YXAoYmxv
YlVSTHMpOwogfQogCi1zdGF0aWMgdm9pZCBuZXV0ZXJWaWV3KEpTQ2VsbCoganNWaWV3KQotewot
ICAgIGlmICghanNWaWV3KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgc3dpdGNoIChqc1Zp
ZXctPmNsYXNzSW5mbygpLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICBjYXNlIFR5cGVk
QXJyYXlOb25lOgotICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgRGF0YVZpZXcsIGZvciBleGFt
cGxlLiBBc3N1bWUgdGhhdCB0aGVyZSBhcmUgdmlld3MgdGhhdCB0aGUKLSAgICAgICAgLy8gREZH
IGRvZXNuJ3QgY2FyZSBhYm91dC4KLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eUludDg6Ci0gICAgICAgIGpzQ2FzdDxKU0ludDhBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxl
bmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAg
ICAgICAganNDYXN0PEpTSW50MTZBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAganND
YXN0PEpTSW50MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAg
IHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAganNDYXN0PEpTVWlu
dDhBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAgIGpzQ2FzdDxKU1VpbnQ4
Q2xhbXBlZEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAganNDYXN0PEpTVWludDE2
QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBUeXBlZEFycmF5VWludDMyOgotICAgICAgICBqc0Nhc3Q8SlNVaW50MzJBcnJheSo+
KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICBqc0Nhc3Q8SlNGbG9hdDMyQXJyYXkqPihqc1Zp
ZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBl
ZEFycmF5RmxvYXQ2NDoKLSAgICAgICAganNDYXN0PEpTRmxvYXQ2NEFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiBQYXNzT3duUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRy
YW5zZmVyQXJyYXlCdWZmZXJzKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlCdWZmZXJBcnJh
eSYgYXJyYXlCdWZmZXJzLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSYgY29kZSkKIHsKQEAgLTE3
NzksMjYgKzE3MzEsMTUgQEAgUGFzc093blB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU6OkFycmF5
QgogCiAgICAgSGFzaFNldDxKU0M6OkFycmF5QnVmZmVyKj4gdmlzaXRlZDsKICAgICBmb3IgKHNp
emVfdCBhcnJheUJ1ZmZlckluZGV4ID0gMDsgYXJyYXlCdWZmZXJJbmRleCA8IGFycmF5QnVmZmVy
cy5zaXplKCk7IGFycmF5QnVmZmVySW5kZXgrKykgewotICAgICAgICBWZWN0b3I8UmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gPiBuZXV0ZXJlZFZpZXdzOwotCiAgICAgICAgIGlmICh2aXNpdGVkLmNv
bnRhaW5zKGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS5nZXQoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgdmlzaXRlZC5hZGQoYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVy
SW5kZXhdLmdldCgpKTsKIAotICAgICAgICBib29sIHJlc3VsdCA9IGFycmF5QnVmZmVyc1thcnJh
eUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIoY29udGVudHMtPmF0KGFycmF5QnVmZmVySW5kZXgpLCBu
ZXV0ZXJlZFZpZXdzKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBhcnJheUJ1ZmZlcnNbYXJyYXlC
dWZmZXJJbmRleF0tPnRyYW5zZmVyKGNvbnRlbnRzLT5hdChhcnJheUJ1ZmZlckluZGV4KSk7CiAg
ICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICBjb2RlID0gVmFsaWRhdGlvbkVycm9y
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoZSB2aWV3cyBtYXkgaGF2ZSBiZWVuIG5ldXRlcmVkLCBidXQgdGhlaXIgd3JhcHBl
cnMgYWxzbyBuZWVkIHRvIGJlIG5ldXRlcmVkLCB0b28uCi0gICAgICAgIGZvciAoc2l6ZV90IHZp
ZXdJbmRleCA9IG5ldXRlcmVkVmlld3Muc2l6ZSgpOyB2aWV3SW5kZXgtLTspIHsKLSAgICAgICAg
ICAgIEFycmF5QnVmZmVyVmlldyogdmlldyA9IG5ldXRlcmVkVmlld3Nbdmlld0luZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IHdvcmxkSW5kZXggPSB3b3JsZHMuc2l6ZSgpOyB3
b3JsZEluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9
IHdvcmxkc1t3b3JsZEluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgICAgICBuZXV0ZXJWaWV3KGdl
dENhY2hlZFdyYXBwZXIod29ybGQsIHZpZXcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gY29udGVudHMucmVsZWFzZSgpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVudERhdGEuaAkocmV2aXNpb24g
MTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJET01XcmFw
cGVyV29ybGQuaCIKICNpbmNsdWRlICJET01PYmplY3RIYXNoVGFibGVNYXAuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNzUsNiArNzYsNyBAQCBpbmxpbmUgdm9p
ZCBpbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKEpTCiAgICAgV2ViQ29yZUpTQ2xpZW50RGF0YSog
d2ViQ29yZUpTQ2xpZW50RGF0YSA9IG5ldyBXZWJDb3JlSlNDbGllbnREYXRhOwogICAgIHZtLT5j
bGllbnREYXRhID0gd2ViQ29yZUpTQ2xpZW50RGF0YTsgLy8gflZNIGRlbGV0ZXMgdGhpcyBwb2lu
dGVyLgogICAgIHdlYkNvcmVKU0NsaWVudERhdGEtPm1fbm9ybWFsV29ybGQgPSBET01XcmFwcGVy
V29ybGQ6OmNyZWF0ZSh2bSwgdHJ1ZSk7CisgICAgdm0tPm1fdHlwZWRBcnJheUNvbnRyb2xsZXIg
PSBhZG9wdFJlZihuZXcgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSA8aGVhcC9QYXNz
V2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXI6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpCisgICAgOiBt
X293bmVyKCkKK3sKK30KK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6fldlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcigpIHsgfQorCitKU0FycmF5QnVmZmVyKiBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXI6OnRvSlMoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBBcnJheUJ1ZmZlciogbmF0aXZlKQoreworICAgIHJldHVybiBqc0Nhc3Q8
SlNBcnJheUJ1ZmZlcio+KAorICAgICAgICBXZWJDb3JlOjp0b0pTKGV4ZWMsIGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIG5hdGl2ZSkpOworfQorCitib29sIFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjppc1JlYWNoYWJsZUZy
b21PcGFxdWVSb290cygKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNBcnJheUJ1ZmZlcioganNBcnJheUJ1ZmZlciA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBpZiAoIWpz
QXJyYXlCdWZmZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEFycmF5QnVmZmVyKiByb290ID0ganNBcnJheUJ1ZmZlci0+aW1wbCgpOworICAgIHJl
dHVybiB2aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KTsKK30KKwordm9pZCBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXI6OkpTQXJyYXlCdWZmZXJPd25lcjo6ZmluYWxpemUoCisgICAg
SGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyKiBqc0FycmF5QnVmZmVyID0gc3RhdGljX2Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGhhbmRsZS5n
ZXQoKS5hc0NlbGwoKSk7CisgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0
PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBq
c0FycmF5QnVmZmVyLT5pbXBsKCksIGpzQXJyYXlCdWZmZXIpOworICAgIGpzQXJyYXlCdWZmZXIt
PmltcGwoKS0+ZGVyZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlDb250cm9s
bGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyIDogcHVibGljIEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVibGljOgor
ICAgIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIHZpcnR1YWwgfldlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcigpOworICAgIAorICAgIHZpcnR1YWwgSlNDOjpKU0FycmF5QnVm
ZmVyKiB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXIqKTsKKyAgICAKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KCkgeyByZXR1cm4gJm1fb3duZXI7IH0KKworcHJpdmF0ZToKKyAgICBjbGFzcyBKU0FycmF5QnVm
ZmVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQq
IGNvbnRleHQpOworICAgIH07CisKKyAgICBKU0FycmF5QnVmZmVyT3duZXIgbV9vd25lcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcl9oCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDIxICsxODAsMjIgQEAgc3ViIEZvckFsbFBhcmVudHMKIAogICAgIG15ICRyZWN1cnNlOwogICAg
ICRyZWN1cnNlID0gc3ViIHsKKyAgICAgICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAg
ICAgICAgIG15ICRjdXJyZW50SW50ZXJmYWNlID0gc2hpZnQ7CiAKICAgICAgICAgZm9yIChAeyRj
dXJyZW50SW50ZXJmYWNlLT5wYXJlbnRzfSkgewogICAgICAgICAgICAgbXkgJGludGVyZmFjZU5h
bWUgPSAkXzsKLSAgICAgICAgICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJz
ZUludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgICAgICAgICBteSAkcGFyZW50SW50ZXJm
YWNlID0gJG9iamVjdC0+UGFyc2VJbnRlcmZhY2UoJG91dGVySW50ZXJmYWNlLCAkaW50ZXJmYWNl
TmFtZSk7CiAKICAgICAgICAgICAgIGlmICgkYmVmb3JlUmVjdXJzaW9uKSB7CiAgICAgICAgICAg
ICAgICAgJiRiZWZvcmVSZWN1cnNpb24oJHBhcmVudEludGVyZmFjZSkgZXEgJ3BydW5lJyBhbmQg
bmV4dDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICYkcmVjdXJzZSgkcGFyZW50SW50ZXJm
YWNlKTsKKyAgICAgICAgICAgICYkcmVjdXJzZSgkb3V0ZXJJbnRlcmZhY2UsICRwYXJlbnRJbnRl
cmZhY2UpOwogICAgICAgICAgICAgJiRhZnRlclJlY3Vyc2lvbigkcGFyZW50SW50ZXJmYWNlKSBp
ZiAkYWZ0ZXJSZWN1cnNpb247CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgJiRyZWN1cnNlKCRp
bnRlcmZhY2UpOworICAgICYkcmVjdXJzZSgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlKTsKIH0KIAog
c3ViIEZpbmRTdXBlck1ldGhvZApAQCAtMjM4LDYgKzIzOSw3IEBAIHN1YiBJRExGaWxlRm9ySW50
ZXJmYWNlCiBzdWIgUGFyc2VJbnRlcmZhY2UKIHsKICAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cisg
ICAgbXkgJG91dGVySW50ZXJmYWNlID0gc2hpZnQ7CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSBz
aGlmdDsKIAogICAgIHJldHVybiB1bmRlZiBpZiAkaW50ZXJmYWNlTmFtZSBlcSAnT2JqZWN0JzsK
QEAgLTI0OCw3ICsyNTAsNyBAQCBzdWIgUGFyc2VJbnRlcmZhY2UKIAogICAgICMgU3RlcCAjMTog
RmluZCB0aGUgSURMIGZpbGUgYXNzb2NpYXRlZCB3aXRoICdpbnRlcmZhY2UnCiAgICAgbXkgJGZp
bGVuYW1lID0gJG9iamVjdC0+SURMRmlsZUZvckludGVyZmFjZSgkaW50ZXJmYWNlTmFtZSkKLSAg
ICAgICAgb3IgZGllKCJDb3VsZCBOT1QgZmluZCBJREwgZmlsZSBmb3IgaW50ZXJmYWNlIFwiJGlu
dGVyZmFjZU5hbWVcIiFcbiIpOworICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBm
aWxlIGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiLCByZWFjaGFibGUgZnJvbSBcIiIg
LiAkb3V0ZXJJbnRlcmZhY2UtPm5hbWUgLiAiXCIhXG4iKTsKIAogICAgIHByaW50ICIgIHwgIHw+
ICBQYXJzaW5nIHBhcmVudCBJREwgXCIkZmlsZW5hbWVcIiBmb3IgaW50ZXJmYWNlIFwiJGludGVy
ZmFjZU5hbWVcIlxuIiBpZiAkdmVyYm9zZTsKIApAQCAtMjc3LDYgKzI3OSwxMCBAQCBzdWIgU2tp
cEluY2x1ZGVIZWFkZXIKIAogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdOdW1iZXIuaCBkb2VzIG5v
dCBleGlzdC4KICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU1ZHTnVtYmVyIjsKKyAgICAKKyAg
ICAjIFR5cGVkIGFycmF5cyBhbHJlYWR5IGluY2x1ZGVkIGJ5IEpTRE9NQmluZGluZy5oLgorICAg
IHJldHVybiAxIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOworICAgIAogICAg
IHJldHVybiAwOwogfQogCkBAIC0zNjgsNyArMzc0LDcgQEAgc3ViIElzVHlwZWRBcnJheVR5cGUK
ICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJBcnJheUJ1ZmZlciIpIG9yICgkdHlwZSBlcSAi
QXJyYXlCdWZmZXJWaWV3IikpOwogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIlVpbnQ4QXJy
YXkiKSBvciAoJHR5cGUgZXEgIlVpbnQ4Q2xhbXBlZEFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50
MTZBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDMyQXJyYXkiKSk7CiAgICAgcmV0dXJuIDEgaWYg
KCgkdHlwZSBlcSAiSW50OEFycmF5Iikgb3IgKCR0eXBlIGVxICJJbnQxNkFycmF5Iikgb3IgKCR0
eXBlIGVxICJJbnQzMkFycmF5IikpOwotICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkZsb2F0
MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5IikpOworICAgIHJldHVybiAxIGlm
ICgoJHR5cGUgZXEgIkZsb2F0MzJBcnJheSIpIG9yICgkdHlwZSBlcSAiRmxvYXQ2NEFycmF5Iikg
b3IgKCR0eXBlIGVxICJEYXRhVmlldyIpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjA5LDYg
KzYxNSw3IEBAIHN1YiBJc1dyYXBwZXJUeXBlCiAgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+R2V0
U2VxdWVuY2VUeXBlKCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc0VudW1UeXBl
KCR0eXBlKTsKICAgICByZXR1cm4gMCBpZiAkb2JqZWN0LT5Jc1N0cmluZ1R5cGUoJHR5cGUpOwor
ICAgIHJldHVybiAwIGlmICRvYmplY3QtPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpOwogICAgIHJl
dHVybiAwIGlmICR3ZWJDb3JlVHlwZUhhc2h7JHR5cGV9OwogICAgIHJldHVybiAwIGlmICR0eXBl
IGVxICJhbnkiOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTIxNyw3ICsyMTcsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgbXkgJGluY2x1ZGVz
UmVmID0gc2hpZnQ7CiAKICAgICByZXR1cm4gaWYgU2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwot
CisgICAgCiAgICAgIyBXaGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1j
bGFzcwogICAgICMgcmVvcmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBj
YXNlcy4KICAgICBpZiAoJHR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKQEAgLTIyNSw4ICsy
MjUsNiBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIn0gPSAxOwogICAgIH0gZWxzaWYgKCRpc0NhbGxiYWNr
ICYmICRjb2RlR2VuZXJhdG9yLT5Jc1dyYXBwZXJUeXBlKCR0eXBlKSkgewogICAgICAgICAkaW5j
bHVkZXNSZWYtPnsiSlMke3R5cGV9LmgifSA9IDE7Ci0gICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0
b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgICRpbmNsdWRlc1JlZi0+eyI8
cnVudGltZS8ke3R5cGV9Lmg+In0gPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgICMgZGVmYXVs
dCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyIk
e3R5cGV9LmgifSA9IDE7CkBAIC02ODIsMTEgKzY4MCw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgog
ICAgIH0KIAogICAgIGlmICgkaGFzUGFyZW50ICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QifSkgewotICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGludGVyZmFjZU5hbWUpKSB7Ci0gICAgICAgICAg
ICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lLyRpbnRlcmZhY2VOYW1lLmg+In0gPSAxOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGhlYWRlckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFt
ZS5oIn0gPSAxOwotICAgICAgICB9CisgICAgICAgICRoZWFkZXJJbmNsdWRlc3siJGludGVyZmFj
ZU5hbWUuaCJ9ID0gMTsKICAgICB9CiAgICAgCiAgICAgJGhlYWRlckluY2x1ZGVzeyI8cnVudGlt
ZS9KU09iamVjdC5oPiJ9ID0gMTsKQEAgLTk2NSwyMiArOTU5LDYgQEAgc3ViIEdlbmVyYXRlSGVh
ZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIik7CiAgICAgfQogCi0g
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRpbXBsVHlwZSkgYW5kICgk
aW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyVmlldyIpIGFuZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1
ZmZlciIpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGNvbnN0
IEpTQzo6VHlwZWRBcnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjoiKTsKLSAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQ4IikgaWYgJGltcGxUeXBl
IGVxICJJbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJh
eUludDE2IikgaWYgJGltcGxUeXBlIGVxICJJbnQxNkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIlR5cGVkQXJyYXlJbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiSW50MzJBcnJh
eSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDgiKSBpZiAk
aW1wbFR5cGUgZXEgIlVpbnQ4QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
VHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhDbGFtcGVkQXJy
YXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheVVpbnQxNiIpIGlm
ICRpbXBsVHlwZSBlcSAiVWludDE2QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiVHlwZWRBcnJheVVpbnQzMiIpIGlmICRpbXBsVHlwZSBlcSAiVWludDMyQXJyYXkiOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUZsb2F0MzIiKSBpZiAkaW1wbFR5
cGUgZXEgIkZsb2F0MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBl
ZEFycmF5RmxvYXQ2NCIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQ2NEFycmF5IjsKLSAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIjtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIGludHB0cl90IG1fc3RvcmFnZUxlbmd0aDtcbiIpOwotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHZvaWQqIG1fc3RvcmFnZTtcbiIpOwotICAgIH0KLQogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICJwcm90ZWN0ZWQ6XG4iKTsKICAgICAjIENvbnN0cnVjdG9yCiAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CkBAIC0xODY5LDEyICsxODQ3LDYg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ2b2lkICR7Y2xhc3NOYW1lfTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKVxuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTtcbiIpOwotICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJy
YXlCdWZmZXJWaWV3IikgYW5kICgkaW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IoJHtjbGFzc05hbWV9OjppbmZvKCksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0s
IG1fc3RvcmFnZSksIE9CSkVDVF9PRkZTRVRPRigke2NsYXNzTmFtZX0sIG1fc3RvcmFnZUxlbmd0
aCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2bS5yZWdpc3Rl
clR5cGVkQXJyYXlEZXNjcmlwdG9yKGltcGwoKSwgZGVzY3JpcHRvcik7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIG1fc3RvcmFnZSA9IGltcGwoKS0+ZGF0YSgpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX3N0b3JhZ2VMZW5ndGgg
PSBpbXBsKCktPmxlbmd0aCgpO1xuIik7Ci0gICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpO1xuIik7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CkBAIC0yMzc0LDcgKzIzNDYsMTEgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICgkZnVuY3Rpb25OYW1lLCBAYXJndW1lbnRz
KSA9ICRjb2RlR2VuZXJhdG9yLT5TZXR0ZXJFeHByZXNzaW9uKFwlaW1wbEluY2x1ZGVzLCAkaW50
ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBhcmd1bWVudHMsICJuYXRpdmVWYWx1ZSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSkgYW5kIG5vdCAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUgZXEgIkFycmF5QnVmZmVyIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlLmdldCgpIik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siJHtpbXBsZW1lbnRlZEJ5fS5oIn0g
PSAxOwpAQCAtMjUyNiwxMyArMjUwMiw2IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICAgICAgaWYgKCRpc0N1c3RvbSkgewogICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiIg
LiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKGV4ZWMpKTtcbiIpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZSBlcSAic2V0IiBhbmQgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlR5cGVkQXJyYXkifSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0g
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc2V0V2ViR0xBcnJheUhlbHBlcjwkaW1wbFR5cGUsICR2aWV3VHlwZT4oZXhlYywgY2Fz
dGVkVGhpcy0+aW1wbCgpKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAifVxuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAkaW1wbFR5cGUqIGltcGwgPSBzdGF0aWNfY2FzdDwkaW1wbFR5cGUqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlU
eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoaW1wbC0+aXNSZWFkT25seSgpKSB7XG4iKTsKQEAgLTMwODcsNyArMzA1Niw3IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCRhcmdUeXBlIGVxICJOb2RlRmlsdGVyIikgeworICAgICAgICBpZiAoJGFyZ1R5cGUg
ZXEgIk5vZGVGaWx0ZXIiIHx8ICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkYXJn
VHlwZSkgYW5kIG5vdCAkYXJnVHlwZSBlcSAiQXJyYXlCdWZmZXIiKSkgewogICAgICAgICAgICAg
cHVzaCBAYXJndW1lbnRzLCAiJG5hbWUuZ2V0KCkiOwogICAgICAgICB9IGVsc2lmICgkY29kZUdl
bmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGFyZ1R5cGUpIGFuZCBub3QgJGludGVy
ZmFjZU5hbWUgPX4gL0xpc3QkLykgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJG5h
bWUtPnByb3BlcnR5UmVmZXJlbmNlKCkiOwpAQCAtMzM2OSw2ICszMzM4LDcgQEAgc3ViIEdldE5h
dGl2ZVR5cGUKICAgICBteSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdU
eXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpOwogICAgIHJldHVybiAiJHtzdmdOYXRpdmVUeXBlfSoi
IGlmICRzdmdOYXRpdmVUeXBlOwogICAgIHJldHVybiAiUmVmUHRyPERPTVN0cmluZ0xpc3Q+IiBp
ZiAkdHlwZSBlcSAiRE9NU3RyaW5nTGlzdCI7CisgICAgcmV0dXJuICJSZWZQdHI8JHt0eXBlfT4i
IGlmICRjb2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSBhbmQgbm90ICR0eXBl
IGVxICJBcnJheUJ1ZmZlciI7CiAgICAgcmV0dXJuICRuYXRpdmVUeXBleyR0eXBlfSBpZiBleGlz
dHMgJG5hdGl2ZVR5cGV7JHR5cGV9OwogCiAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJh
dG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwpAQCAtMzUwOCw2ICszNDc4LDEwIEBAIHN1YiBKU1Zh
bHVlVG9OYXRpdmUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NU3RyaW5nTGlzdC5o
IiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcmV0dXJuICJ0b0RPTVN0cmluZ0xpc3QoZXhlYywg
JHZhbHVlKSI7CiAgICAgfQorICAgIAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFy
cmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOworICAg
IH0KIAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJIVE1MT3B0aW9uRWxlbWVudC5oIiwgJGNvbmRp
dGlvbmFsKSBpZiAkdHlwZSBlcSAiSFRNTE9wdGlvbkVsZW1lbnQiOwogICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJFdmVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZlbnQiOwpAQCAt
MzU3Nyw3ICszNTUxLDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiPHJ1bnRpbWUvSlNTdHJpbmcuaD4iLCAkY29uZGl0aW9uYWwpOwogICAgICAgICBy
ZXR1cm4gImpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsICR2YWx1ZSkiOwogICAgIH0KLQorICAgIAog
ICAgIG15ICRnbG9iYWxPYmplY3Q7CiAgICAgaWYgKCR0aGlzVmFsdWUpIHsKICAgICAgICAgJGds
b2JhbE9iamVjdCA9ICIkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSI7CkBAIC0zNjE4LDE0ICsz
NTkyLDEyIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICB9IGVsc2lmICgkdHlwZSBlcSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55IikgewogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29uZGl0aW9uYWwpOwogICAg
ICAgICByZXR1cm4gIiR2YWx1ZSA/ICR2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCkiOworICAgIH0gZWxzaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICAjIERvIG5vdGhpbmcg
LSBhbGwgaGVhZGVycyBhcmUgYWxyZWFkeSBpbmNsdWRlZC4KICAgICB9IGVsc2UgewogICAgICAg
ICAjIERlZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdpdGggc2FtZSBuYW1lLgogICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAgICAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIjxydW50aW1lLyR0eXBlLmg+IiwgJGNvbmRpdGlvbmFsKSBpZiBub3Qg
JGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlwZS5oIiwgJGNvbmRpdGlvbmFs
KSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0eXBlKTsKLSAgICAg
ICAgfQorICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25kaXRpb25hbCkg
aWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuICR2YWx1ZSBpZiAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUo
JHR5cGUpOwpAQCAtNDEwOCwzMCArNDA4MCw2IEBAIEVORAogfQogCiBFTkQKLSAgICAgICAgfSBl
bHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAi
VHlwZWRBcnJheSIpKSB7Ci0gICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0FycmF5QnVmZmVy
Vmlld0hlbHBlci5oIn0gPSAxOwotICAgICAgICAgICAgbXkgJHZpZXdUeXBlID0gJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlR5cGVkQXJyYXkifTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtjb25zdHJ1Y3Rv
ckNsYXNzTmFtZX06OmNvbnN0cnVjdCR7Y2xhc3NOYW1lfShFeGVjU3RhdGUqIGV4ZWMpXG4iKTsK
LSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICR7Y29uc3RydWN0b3JDbGFzc05hbWV9KiBqc0NvbnN0cnVj
dG9yID0ganNDYXN0PCR7Y29uc3RydWN0b3JDbGFzc05hbWV9Kj4oZXhlYy0+Y2FsbGVlKCkpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUmVmUHRyPCRpbnRlcmZh
Y2VOYW1lPiBhcnJheSA9IGNvbnN0cnVjdEFycmF5QnVmZmVyVmlldzwkaW50ZXJmYWNlTmFtZSwg
JHZpZXdUeXBlPihleGVjKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmICghYXJyYXkuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgLy8gRXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3duLlxuIik7Ci0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKSk7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIkpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCAke2ludGVyZmFjZU5hbWV9KiBvYmplY3QpXG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIHJldHVybiB0b0pTQXJyYXlCdWZmZXJWaWV3PCR7Y2xhc3NOYW1l
fT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ9XG5cbiIpOwotCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUluZGV4ZWRTZXR0ZXIifSkgewotICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjppbmRleFNldHRlcihK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSlc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpbXBsKCktPnNldChpbmRleCwgdmFs
dWUudG9OdW1iZXIoZXhlYykpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAifVxuXG4iKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoIUhhc0N1c3Rv
bUNvbnN0cnVjdG9yKCRpbnRlcmZhY2UpICYmICghJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkQ29uc3RydWN0b3IifSB8fCAkZ2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3Ip
KSB7CiAgICAgICAgICAgICBteSAkb3ZlcmxvYWRlZEluZGV4U3RyaW5nID0gIiI7CiAgICAgICAg
ICAgICBpZiAoJGZ1bmN0aW9uLT57b3ZlcmxvYWRlZEluZGV4fSAmJiAkZnVuY3Rpb24tPntvdmVy
bG9hZGVkSW5kZXh9ID4gMCkgewpAQCAtNDIxMCw3ICs0MTU4LDcgQEAgc3ViIEdlbmVyYXRlQ29u
c3RydWN0b3JIZWxwZXJNZXRob2RzCiAKICAgICBteSAkY29uc3RydWN0b3JDbGFzc05hbWUgPSAk
Z2VuZXJhdGluZ05hbWVkQ29uc3RydWN0b3IgPyAiJHtjbGFzc05hbWV9TmFtZWRDb25zdHJ1Y3Rv
ciIgOiAiJHtjbGFzc05hbWV9Q29uc3RydWN0b3IiOwogICAgIG15ICRsZWFzdENvbnN0cnVjdG9y
TGVuZ3RoID0gMDsKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0
ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSB8fCAkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRl
bXBsYXRlKCRpbnRlcmZhY2UsICJUeXBlZEFycmF5IikpIHsKKyAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPklzQ29uc3RydWN0b3JUZW1wbGF0ZSgkaW50ZXJmYWNlLCAiRXZlbnQiKSkgewogICAgICAg
ICAkbGVhc3RDb25zdHJ1Y3Rvckxlbmd0aCA9IDE7CiAgICAgfSBlbHNpZiAoJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yIn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pIHsKICAgICAgICAgbXkgQGNvbnN0
cnVjdG9ycyA9IEB7JGludGVyZmFjZS0+Y29uc3RydWN0b3JzfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuY3BwCShyZXZpc2lvbiAxNTQwODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlCdWZm
ZXIqIGFyCiAgICAgYXBwZW5kQnl0ZXNEYXRhKGFycmF5QnVmZmVyLT5kYXRhKCksIGFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCkpOwogfQogCi12b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoQXJyYXlC
dWZmZXJWaWV3KiBhcnJheUJ1ZmZlclZpZXcpCit2b2lkIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGFycmF5QnVmZmVyVmlldykKIHsKICAgICBIaXN0b2dy
YW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5CbG9iLmNvbnN0cnVjdG9y
LkFycmF5QnVmZmVyT3JWaWV3IiwgQmxvYkNvbnN0cnVjdG9yQXJyYXlCdWZmZXJWaWV3LCBCbG9i
Q29uc3RydWN0b3JBcnJheUJ1ZmZlck9yVmlld01heCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL1dlYktpdEJsb2JCdWlsZGVyLmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBTdHJpbmcmIGVuZGluZyk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgdm9pZCBhcHBl
bmQoSlNDOjpBcnJheUJ1ZmZlciopOwotICAgIHZvaWQgYXBwZW5kKEpTQzo6QXJyYXlCdWZmZXJW
aWV3Kik7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4p
OwogI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZl
ci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaWRsCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwK
LSAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGwsCi0gICAgQ3VzdG9tQ29uc3RydWN0b3IodW5z
aWduZWQgbG9uZyBsZW5ndGgpLAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgSW1wbGVtZW50
YXRpb25OYW1lc3BhY2U9SlNDLAotICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKLV0gaW50
ZXJmYWNlIEFycmF5QnVmZmVyIHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBieXRlTGVuZ3RoOwotICAgIEFycmF5QnVmZmVyIHNsaWNlKGxvbmcgYmVnaW4sIG9wdGlvbmFs
IGxvbmcgZW5kKTsKLX07Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXJWaWV3LmlkbAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotWwotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0YXRp
Y1RhYmxlcywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEFy
cmF5QnVmZmVyVmlldyB7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEFycmF5QnVmZmVyIGJ1ZmZl
cjsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0OwotICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci19OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcAkocmV2aXNpb24gMTU0MDg3KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkRhdGFWaWV3LmgiCi0KLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0KLW5hbWVzcGFjZSB7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci11bmlvbiBWYWx1ZSB7Ci0gICAgVCBkYXRhOwotICAg
IGNoYXIgYnl0ZXNbc2l6ZW9mKFQpXTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
bGVuZ3RoLCBzaXplb2YodWludDhfdCkpOwotICAgIGlmICghYnVmZmVyLmdldCgpKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxEYXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCi17
Ci0gICAgaWYgKGJ5dGVPZmZzZXQgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRPZmZz
ZXQoYnl0ZU9mZnNldCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRMZW5ndGgoYnl0ZUxlbmd0aCk7Ci0gICAgQ2hlY2tlZDx1aW50MzJfdCwgUmVjb3JkT3Zl
cmZsb3c+IGNoZWNrZWRNYXggPSBjaGVja2VkT2Zmc2V0ICsgY2hlY2tlZExlbmd0aDsKLSAgICBp
ZiAoY2hlY2tlZE1heC5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZE1heC51bnNhZmVHZXQoKSA+
IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkpOwotfQot
Ci1EYXRhVmlldzo6RGF0YVZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKQotICAgIDogQXJyYXlCdWZmZXJW
aWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCkKLSAgICAsIG1fYnl0ZUxlbmd0aChieXRlTGVuZ3RoKQot
ewotfQotCi1zdGF0aWMgYm9vbCBuZWVkVG9GbGlwQnl0ZXMoYm9vbCBsaXR0bGVFbmRpYW4pCi17
Ci0jaWYgQ1BVKEJJR19FTkRJQU4pCi0gICAgcmV0dXJuIGxpdHRsZUVuZGlhbjsKLSNlbHNlCi0g
ICAgcmV0dXJuICFsaXR0bGVFbmRpYW47Ci0jZW5kaWYKLX0KLQotaW5saW5lIHZvaWQgc3dhcEJ5
dGVzKGNoYXIqIHAsIGNoYXIqIHEpCi17Ci0gICAgY2hhciB0ZW1wID0gKnA7Ci0gICAgKnAgPSAq
cTsKLSAgICAqcSA9IHRlbXA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0ZvcjE2Qml0cyhj
aGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZs
aXBCeXRlc0ZvcjMyQml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgMyk7Ci0g
ICAgc3dhcEJ5dGVzKHAgKyAxLCBwICsgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0Zv
cjY0Qml0cyhjaGFyKiBwKQotewotICAgIHN3YXBCeXRlcyhwLCBwICsgNyk7Ci0gICAgc3dhcEJ5
dGVzKHAgKyAxLCBwICsgNik7Ci0gICAgc3dhcEJ5dGVzKHAgKyAyLCBwICsgNSk7Ci0gICAgc3dh
cEJ5dGVzKHAgKyAzLCBwICsgNCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZsaXBCeXRlc0lmTmVlZGVk
KGNoYXIqIHZhbHVlLCBzaXplX3Qgc2l6ZSwgYm9vbCBsaXR0bGVFbmRpYW4pCi17Ci0gICAgaWYg
KCFuZWVkVG9GbGlwQnl0ZXMobGl0dGxlRW5kaWFuKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3dpdGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjE2Qml0cyh2
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgZmxpcEJ5dGVzRm9y
MzJCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBmbGlw
Qnl0ZXNGb3I2NEJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBEYXRhVmlldzo6Z2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAg
aWYgKGJleW9uZFJhbmdlPFQ+KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0la
RV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50
IHRvIGxvYWQgdGhlIGRhdGEgZGlyZWN0bHkgc2luY2UgaXQgd291bGQgY2F1c2UgYSBidXMgZXJy
b3Igb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvbid0IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLgot
ICAgIFZhbHVlPFQ+IHZhbHVlOwotICAgIG1lbWNweSh2YWx1ZS5ieXRlcywgc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KG1fYmFzZUFkZHJlc3MpICsgYnl0ZU9mZnNldCwgc2l6ZW9mKFQpKTsKLSAg
ICBmbGlwQnl0ZXNJZk5lZWRlZCh2YWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4p
OwotICAgIHJldHVybiB2YWx1ZS5kYXRhOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBEYXRhVmlldzo6c2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zmc2V0LCBUIHZhbHVlLCBib29sIGxp
dHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGJleW9uZFJhbmdlPFQ+
KGJ5dGVPZmZzZXQpKSB7Ci0gICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzdG9yZSB0aGUgZGF0YSBk
aXJlY3RseSBzaW5jZSBpdCB3b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVz
IHRoYXQgZG9uJ3Qgc3VwcG9ydCB1bmFsaWduZWQgc3RvcmVzLgotICAgIFZhbHVlPFQ+IHRlbXBW
YWx1ZTsKLSAgICB0ZW1wVmFsdWUuZGF0YSA9IHZhbHVlOwotICAgIGZsaXBCeXRlc0lmTmVlZGVk
KHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpLCBsaXR0bGVFbmRpYW4pOwotICAgIG1lbWNweShz
dGF0aWNfY2FzdDxjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zmc2V0LCB0ZW1wVmFsdWUu
Ynl0ZXMsIHNpemVvZihUKSk7Ci19Ci0KLWludDhfdCBEYXRhVmlldzo6Z2V0SW50OCh1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxp
bnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLXVpbnQ4X3QgRGF0YVZpZXc6Omdl
dFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJl
dHVybiBnZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7Ci19Ci0KLWludDE2
X3QgRGF0YVZpZXc6OmdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5k
aWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQxNl90Pihi
eXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDE2X3QgRGF0YVZpZXc6Omdl
dFVpbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIGxp
dHRsZUVuZGlhbiwgZWMpOwotfQotCi1pbnQzMl90IERhdGFWaWV3OjpnZXRJbnQzMih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgcmV0dXJuIGdldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7
Ci19Ci0KLXVpbnQzMl90IERhdGFWaWV3OjpnZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwg
Ym9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXRE
YXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZmxvYXQg
RGF0YVZpZXc6OmdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGZsb2F0PihieXRl
T2Zmc2V0LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotZG91YmxlIERhdGFWaWV3OjpnZXRGbG9h
dDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIGxpdHRsZUVu
ZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQ4
X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3Ojpz
ZXRVaW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQ4X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwg
ZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRJbnQxNih1bnNpZ25lZCBieXRlT2Zmc2V0LCBz
aG9ydCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IHNldERhdGE8aW50MTZfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwot
fQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDE2
X3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBz
ZXREYXRhPHVpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3Qg
dmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBzZXRE
YXRhPGludDMyX3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQot
dm9pZCBEYXRhVmlldzo6c2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZh
bHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0
YTx1aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12
b2lkIERhdGFWaWV3OjpzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVl
LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxm
bG9hdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERh
dGFWaWV3OjpzZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgYm9v
bCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8ZG91Ymxl
PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZp
ZXc6Om5ldXRlcigpCi17Ci0gICAgQXJyYXlCdWZmZXJWaWV3OjpuZXV0ZXIoKTsKLSAgICBtX2J5
dGVMZW5ndGggPSAwOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9E
YXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFW
aWV3LmgJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Rh
dGFWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IERhdGFWaWV3X2gKLSNkZWZpbmUgRGF0YVZpZXdfaAotCi0jaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIERhdGFWaWV3
IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YVZpZXc+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBzbGljZShpbnQsIGludCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi0gICAgaW50OF90IGdldEludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHVpbnQ4X3QgZ2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEludDE2KGJ5dGVPZmZzZXQsIGZhbHNl
LCBlYyk7IH0KLSAgICBpbnQxNl90IGdldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wg
bGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDE2X3QgZ2V0VWludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MTYo
Ynl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIHVpbnQxNl90IGdldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGlu
dDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIGdldEludDMyKGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0KLSAgICBpbnQzMl90IGdl
dEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBnZXRVaW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsg
fQotICAgIHVpbnQzMl90IGdldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRs
ZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldEZsb2F0MzIoYnl0ZU9m
ZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBkb3VibGUgZ2V0
RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
Z2V0RmxvYXQ2NChieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZG91YmxlIGdldEZsb2F0
NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgc2V0SW50OCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQ4X3QgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVpbnQ4X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldEludDE2KHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldElu
dDE2KGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRJbnQxNih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVp
bnQxNl90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MTYoYnl0ZU9mZnNldCwg
dmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHNldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDMyX3QgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMp
OyB9IAotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MzJfdCB2YWx1
ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNldFVpbnQz
Mih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBz
ZXRVaW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRGbG9hdDMyKGJ5
dGVPZmZzZXQsIHZhbHVlLCBmYWxzZSwgZWMpOyB9Ci0gICAgdm9pZCBzZXRGbG9hdDMyKHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgc2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUs
IGZhbHNlLCBlYyk7IH0KLSAgICB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwg
ZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
eXBlRGF0YVZpZXc7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG5ldXRl
cigpOwotCi1wcml2YXRlOgotICAgIERhdGFWaWV3KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBieXRlTGVuZ3RoKTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgYmV5b25kUmFuZ2UodW5zaWduZWQgYnl0ZU9m
ZnNldCkgY29uc3QgeyByZXR1cm4gYnl0ZU9mZnNldCA+PSBtX2J5dGVMZW5ndGggfHwgYnl0ZU9m
ZnNldCArIHNpemVvZihUKSA+IG1fYnl0ZUxlbmd0aDsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBUIGdldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRp
YW4sIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgdm9pZCBzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxl
RW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7Ci19
OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIERhdGFWaWV3X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5pZGwJKHJldmlzaW9uIDE1NDA4
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIEN1c3RvbUNvbnN0cnVjdG9yKEFycmF5QnVmZmVy
IGJ1ZmZlciwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCB1bnNp
Z25lZCBsb25nIGJ5dGVMZW5ndGgpLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgSlNOb1N0
YXRpY1RhYmxlcwotXSBpbnRlcmZhY2UgRGF0YVZpZXcgOiBBcnJheUJ1ZmZlclZpZXcgewotICAg
IC8vIEFsbCB0aGVzZSBtZXRob2RzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IHdvdWxkIHJl
YWQgb3Igd3JpdGUgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHZpZXcuCi0KLSAgICBbUmFpc2VzRXhj
ZXB0aW9uXSBieXRlIGdldEludDgodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0KTsKLSAgICBbUmFp
c2VzRXhjZXB0aW9uXSBvY3RldCBnZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBzaG9ydCBnZXRJbnQx
Nih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFu
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIHNo
b3J0IGdldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4g
bGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IGxvbmcgZ2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFu
IGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB1bnNpZ25lZCBsb25nIGdldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLQotICAgIC8vIFVzZSBjdXN0b20gY29kZSB0byBo
YW5kbGUgTmFOIGNhc2UuCi0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIGZsb2F0IGdldEZsb2F0MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRp
b25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW0N1c3RvbSwgU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGxvbmcgYnl0
ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgW1JhaXNlc0V4
Y2VwdGlvbl0gdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgYnl0ZSB2YWx1
ZSk7Ci0gICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVaW50OCh1bnNpZ25lZCBsb25nIGJ5
dGVPZmZzZXQsIG9jdGV0IHZhbHVlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBzZXRJbnQxNih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIHNob3J0
IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQxNih1bnNpZ25lZCBsb25nIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVu
ZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNl
dEludDMyKHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgbG9uZyB2YWx1ZSwgb3B0aW9uYWwgYm9v
bGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBzZXRVaW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
b25nIHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEZsb2F0MzIodW5zaWduZWQgbG9u
ZyBieXRlT2Zmc2V0LCBmbG9hdCB2YWx1ZSwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4p
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRGbG9h
dDY0KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgZG91YmxlIHZhbHVlLCBvcHRpb25hbCBib29s
ZWFuIGxpdHRsZUVuZGlhbik7Ci19OwotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9GbG9hdDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0Zsb2F0MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBDb21wdXRlciwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJh
eSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVj
dCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9O
b3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PWZsb2F0LAotICAgIEltcGxlbWVudGF0
aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgRmxvYXQzMkFycmF5IDogQXJyYXlCdWZmZXJW
aWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQot
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDMy
QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0
dGVyIGZsb2F0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KEZsb2F0
MzJBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZv
aWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNl
dCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9GbG9hdDY0QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0Zsb2F0NjRBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9ZG91YmxlLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpT
QwotXSBpbnRlcmZhY2UgRmxvYXQ2NEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25z
dCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gODsKLQotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBGbG9hdDY0QXJyYXkgc3ViYXJyYXko
W0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGRvdWJsZSAodW5z
aWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChGbG9hdDY0QXJyYXkgYXJyYXks
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5j
ZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQg
c2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50OEFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRs
CShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQ4QXJy
YXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsK
LSAgICBHbG9iYWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25z
dHJ1Y3RvclRlbXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAg
ICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBD
dXN0b21Ub0pTT2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJh
eT1zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJm
YWNlIEludDhBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9u
ZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgCi0gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
IGxvbmcgZW5kKTsKLQotICAgIGdldHRlciBieXRlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQot
ICAgIC8vIHZvaWQgc2V0KEludDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1
bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDg3KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAxMCBBcHBsZSBD
b21wdXRlciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxD
b250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBs
YXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRl
VG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2Jq
ZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1zaG9ydCwKLSAg
ICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIEludDE2QXJyYXkgOiBB
cnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1F
TlQgPSAyOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwot
ICAgIEludDE2QXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IHN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQot
ICAgIGdldHRlciBzaG9ydCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNl
dChJbnQxNkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
Ly8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcg
b2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ludDMyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2Vy
R2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1
c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpT
Tm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29u
c3RhbnRzLAotICAgIFR5cGVkQXJyYXk9aW50LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNl
PUpTQwotXSBpbnRlcmZhY2UgSW50MzJBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29u
c3QgdW5zaWduZWQgbG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDQ7Ci0KLSAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50MzJBcnJheSBzdWJhcnJheShb
RGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGxvbmcgKHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50MzJBcnJheSBhcnJheSwgb3B0aW9u
YWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+
IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsK
LX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbAkocmV2
aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhBcnJheS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAg
IEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVj
dG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpT
R2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3Rv
bVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVu
c2lnbmVkIGNoYXIsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFj
ZSBVaW50OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25n
IEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBsb25nIGxlbmd0aDsKLSAgICBVaW50OEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5l
ZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVy
IG9jdGV0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQ4QXJy
YXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNl
dChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWlu
dDhDbGFtcGVkQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1VpbnQ4Q2xhbXBlZEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2lu
ZG93Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJh
eSwKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVj
dCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9O
b3RDaGVja0NvbnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGNoYXIsCi0gICAgSW1w
bGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBVaW50OENsYW1wZWRBcnJheSA6
IFVpbnQ4QXJyYXkgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQg
PSAxOwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwg
bG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIG9jdGV0ICh1bnNp
Z25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIEZJWE1FOiBNaXNzaW5nIG90aGVyIHNldHRlcnMh
Ci0gICAgLy8gdm9pZCBzZXQoVWludDhDbGFtcGVkQXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwg
b3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAkocmV2aXNpb24g
MTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9i
YWxDb250ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRl
bXBsYXRlPVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVy
YXRlVG9OYXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pT
T2JqZWN0LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT11bnNpZ25l
ZCBzaG9ydCwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVp
bnQxNkFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZ
VEVTX1BFUl9FTEVNRU5UID0gMjsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKLSAgICBVaW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRd
IG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlvbmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1
bnNpZ25lZCBzaG9ydCAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChV
aW50MTZBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8v
IHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9m
ZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9VaW50MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvVWludDMyQXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtl
ckdsb2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBD
dXN0b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBK
U05vU3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0Nv
bnN0YW50cywKLSAgICBUeXBlZEFycmF5PXVuc2lnbmVkIGludCwKLSAgICBJbXBsZW1lbnRhdGlv
bk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQzMkFycmF5IDogQXJyYXlCdWZmZXJWaWV3
IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gNDsKLQotICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBVaW50MzJBcnJh
eSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIG9wdGlv
bmFsIGxvbmcgZW5kKTsKLQotICAgIGdldHRlciB1bnNpZ25lZCBsb25nICh1bnNpZ25lZCBsb25n
IGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0KFVpbnQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1
bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJy
YXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsOCBAQAogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIldlYkdMVW5pZm9y
bUxvY2F0aW9uLmgiCiAKKyNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50MzJB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duQXJyYXlQdHIuaD4KQEAgLTM0MTUsNyArMzQxNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZWFkUGl4ZWxzKEcKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBWYWxp
ZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDgpIHsKKyAgICBpZiAocGl4ZWxzLT5n
ZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTUxNTYsNyArNTE1OCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEYKIAogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZl
clZpZXc6OlR5cGVVaW50OCkgeworICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlND
OjpUeXBlVWludDgpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9C
WVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNTE2NCwxMyArNTE2NiwxMyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlRfNV82XzU6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNF80XzRfNDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlVWludDE2KSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAh
PSBKU0M6OlR5cGVVaW50MTYpIHsKICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJ
R05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAotICAgICAgICBp
ZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRmxvYXQzMikgewor
ICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewogICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90
IEZsb2F0MzJBcnJheSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9DcnlwdG8uY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE0ICs0MSw3IEBAIG5h
bWVzcGFjZSB7CiAKIGJvb2wgaXNJbnRlZ2VyQXJyYXkoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkK
IHsKLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIHR5cGUgPSBhcnJheS0+Z2V0VHlwZSgp
OwotICAgIHJldHVybiB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDgKLSAgICAgICAg
ICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OAotICAgICAgICAgICB8fCB0
eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4Q2xhbXBlZAotICAgICAgICAgICB8fCB0
eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2Ci0gICAgICAgICAgIHx8IHR5cGUgPT0g
QXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDE2Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlC
dWZmZXJWaWV3OjpUeXBlSW50MzIKLSAgICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVVaW50MzI7CisgICAgcmV0dXJuIEpTQzo6aXNJbnQoYXJyYXktPmdldFR5cGUoKSk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTU0MDg3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQAogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5o
IgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkRhdGFWaWV3LmgiCiAj
aW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbXBvcnQgIkZsb2F0Q29udmVy
c2lvbi5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCkBAIC00Nyw2ICs0Niw5IEBACiAj
aW1wb3J0ICJXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIuaCIKICNpbXBvcnQgIldlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8cnVudGlt
ZS9EYXRhVmlldy5oPgorI2ltcG9ydCA8cnVudGltZS9PcGVyYXRpb25zLmg+CisjaW1wb3J0IDxy
dW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQxNkFycmF5
Lmg+CiAjaW1wb3J0IDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CiAjaW1wb3J0IDxydW50aW1lL1Vp
bnQ4QXJyYXkuaD4KQEAgLTkyMyw4ICs5MjUsOCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6CiAgICAgICAgIC8vIFs0IGJ5dGVzOiBrZXlVUkkgc2l6ZV0sIFtrZXlV
Ukkgc2l6ZSBieXRlczoga2V5VVJJXQogICAgICAgICB1bnNpZ25lZCBrZXlVUklTaXplID0ga2V5
VVJJLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBpbml0RGF0YUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoNCArIGtleVVSSVNpemUsIDEp
OwotICAgICAgICBSZWZQdHI8RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IERhdGFWaWV3OjpjcmVh
dGUoaW5pdERhdGFCdWZmZXIsIDAsIGluaXREYXRhQnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAg
ICAgICBpbml0RGF0YVZpZXctPnNldFVpbnQzMigwLCBrZXlVUklTaXplLCB0cnVlLCBJR05PUkVf
RVhDRVBUSU9OKTsKKyAgICAgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXREYXRhVmlldyA9
IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXIt
PmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGluaXREYXRhVmlldy0+c2V0PHVpbnQzMl90PigwLCBr
ZXlVUklTaXplLCB0cnVlKTsKIAogICAgICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtleVVSSUFy
cmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgNCwga2V5VVJJLmxlbmd0
aCgpKTsKICAgICAgICAga2V5VVJJQXJyYXktPnNldFJhbmdlKGtleVVSSS5jaGFyYWN0ZXJzKCks
IGtleVVSSS5sZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBjaGFyKSwgMCk7CkBAIC0xMjA0LDEz
ICsxMjA2LDEzIEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gaW5pdERhdGEtPmJ1ZmZlcigp
OwogCiAgICAgLy8gVXNlIGEgRGF0YVZpZXcgdG8gcmVhZCB1aW50MzIgdmFsdWVzIGZyb20gdGhl
IGJ1ZmZlciwgYXMgVWludDMyQXJyYXkgcmVxdWlyZXMgdGhlIHJlYWRzIGJlIGFsaWduZWQgb24g
NC1ieXRlIGJvdW5kYXJpZXMuIAotICAgIFJlZlB0cjxEYXRhVmlldz4gaW5pdERhdGFWaWV3ID0g
RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVM
ZW5ndGgoKSk7CisgICAgUmVmUHRyPEpTQzo6RGF0YVZpZXc+IGluaXREYXRhVmlldyA9IEpTQzo6
RGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXItPmJ5dGVM
ZW5ndGgoKSk7CiAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBib29sIHN0YXR1cyA9IHRydWU7CiAKLSAgICB1aW50MzJfdCBrZXlVUklMZW5n
dGggPSBpbml0RGF0YVZpZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50
MzJfdCBrZXlVUklMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50MzJfdD4ob2Zmc2V0LCB0
cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAoZWMgfHwgb2Zmc2V0ICsg
a2V5VVJJTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8IG9m
ZnNldCArIGtleVVSSUxlbmd0aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgUmVmUHRyPFVpbnQxNkFycmF5PiBrZXlVUklBcnJheSA9IFVpbnQxNkFy
cmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5VVJJTGVuZ3RoKTsKQEAgLTEy
MjAsOSArMTIyMiw5IEBAIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
ICAgICBrZXlVUkkgPSBTdHJpbmcoa2V5VVJJQXJyYXktPmRhdGEoKSwga2V5VVJJTGVuZ3RoIC8g
c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgb2Zmc2V0ICs9IGtleVVSSUxlbmd0aDsKIAot
ICAgIHVpbnQzMl90IGtleUlETGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0
LCB0cnVlLCBlYyk7CisgICAgdWludDMyX3Qga2V5SURMZW5ndGggPSBpbml0RGF0YVZpZXctPmdl
dDx1aW50MzJfdD4ob2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAg
ICBpZiAoZWMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCisg
ICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5SURMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxVaW50MTZBcnJheT4ga2V5
SURBcnJheSA9IFVpbnQxNkFycmF5OjpjcmVhdGUoaW5pdERhdGFCdWZmZXIsIG9mZnNldCwga2V5
SURMZW5ndGgpOwpAQCAtMTIzMiw5ICsxMjM0LDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOgogICAgIGtleUlEID0gU3RyaW5nKGtleUlEQXJyYXktPmRhdGEoKSwg
a2V5SURMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgICBvZmZzZXQgKz0ga2V5
SURMZW5ndGg7CiAKLSAgICB1aW50MzJfdCBjZXJ0aWZpY2F0ZUxlbmd0aCA9IGluaXREYXRhVmll
dy0+Z2V0VWludDMyKG9mZnNldCwgdHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGNlcnRpZmljYXRl
TGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXQ8dWludDMyX3Q+KG9mZnNldCwgdHJ1ZSwgJnN0YXR1
cyk7CiAgICAgb2Zmc2V0ICs9IDQ7Ci0gICAgaWYgKGVjIHx8IG9mZnNldCArIGNlcnRpZmljYXRl
TGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQorICAgIGlmICghc3RhdHVzIHx8IG9mZnNldCAr
IGNlcnRpZmljYXRlTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBjZXJ0aWZpY2F0ZSA9IFVpbnQ4QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1
ZmZlciwgb2Zmc2V0LCBjZXJ0aWZpY2F0ZUxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5o
CShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNyw5IEBA
CiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJh
eS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBV
aW50OENsYW1wZWRBcnJheTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXN0
b21GaWx0ZXJSZW5kZXJlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiAx
NTQwODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogI2luY2x1ZGUg
IlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKKyNpbmNsdWRl
IDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gMTU0MDg3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRp
b25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KIAogI2lmIEhBVkUoQVJNX05FT05fSU5UUklO
U0lDUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja0NETS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAkocmV2aXNpb24gMTU0MDg3
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrQ0RNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ0RNLmgiCiAjaW5jbHVkZSAiTWVkaWFLZXlF
cnJvci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MDg3KQor
KysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBZb3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRl
IEpTVWludDhBcnJheSBhbnltb3JlIGlmIHlvdSBqdXN0IHdhbnQgdG8KKyAgICAgICAgdW53cmFw
IG9uZTsgSlNET01CaW5kaW5nIGdpdmVzIHlvdSBhbGwgb2YgdGhlIHRoaW5ncyB5b3UgbmVlZC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
OgorCiAyMDEzLTA4LTE0ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5ODI3PiBBbGxvdyBwcmltYXJ5IHBsdWctaW4gZGV0
ZWN0aW9uIHRvIHJ1biBtb3JlIHRoYW4gb25jZSBpZiBuZWNlc3NhcnkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAxNTQwODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNyArNTksNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Qb3NpdGlvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTTm90
aWZpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU1VpbnQ4QXJyYXkuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VHcm91cC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CkluZGV4OiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJv
bHMuZmlsdGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJ
KHJldmlzaW9uIDE1NDA4NykKKysrIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIJKHdv
cmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNiBAQCBfWk43V2ViQ29yZTlGcmFtZVZpZXcxN3Nl
dFRyYWNrc1JlcGFpbnRzCiBfWk5LN1dlYkNvcmU1RnJhbWUyNXRyYWNrZWRSZXBhaW50UmVjdHNB
c1RleHRFdjsKIF9aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEVQTjNXVEYxMUFycmF5QnVmZmVyRTsKIF9aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjZyZWxvYWRFYjsKLV9aTjdXZWJDb3JlMTN0b0FycmF5QnVmZmVyRU4zSlNDN0pTVmFsdWVFOwog
X1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVSS05TXzExTGF5b3V0UG9pbnRFampqajsKIF9a
TjdXZWJDb3JlMTVIaXRUZXN0TG9jYXRpb24xMnJlY3RGb3JQb2ludEVSS05TXzExTGF5b3V0UG9p
bnRFampqajsKIF9aTjdXZWJDb3JlMjFTZXJpYWxpemVkU2NyaXB0VmFsdWU2Y3JlYXRlRVJLTjNX
VEY2U3RyaW5nRTsKQEAgLTMwNyw4ICszMDYsNiBAQCBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExp
c3RDMUVSS04zV1RGNlZlCiBfWk43V2ViQ29yZTE0Q2xpZW50UmVjdExpc3RDMUVSS04zV1RGNlZl
Y3RvcklOU185RmxvYXRRdWFkRUxqMEVOUzFfMTVDcmFzaE9uT3ZlcmZsb3dFRUU7CiBfWk43V2Vi
Q29yZTEwVGltZVJhbmdlczNhZGRFZGQ7CiBfWk43V2ViQ29yZTEydG9UaW1lUmFuZ2VzRU4zSlND
N0pTVmFsdWVFOwotX1pON1dlYkNvcmUxNHRvRmxvYXQzMkFycmF5RU4zSlNDN0pTVmFsdWVFOwot
X1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0
RVBOUzBfMTFBcnJheUJ1ZmZlckU7CiBfWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVF
UE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzEwVGltZVJhbmdlc0U7CiBfWk5LN1dlYkNvcmUx
MFRpbWVSYW5nZXM3bmVhcmVzdEVkOwogX1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTlyZWN0
QmFzZWRUZXN0UmVzdWx0RXY7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQwODcpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MyBAQAorMjAxMy0wOC0x
NCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5
cyBzaG91bGQgYmUgcmV3cml0dGVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTkwNjQKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
KworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LW91
dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9kYXRh
LXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Nj
cmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9sLmpzOgorICAgICAgICAo
Y2hlY2tWaWV3KToKKyAgICAgICAgKiBmYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1m
dW5jdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVj
dG9yLWFzLWEtZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiBmYXN0L2pzL2NvbnN0cnVjdG9yLWxl
bmd0aC5odG1sOgorICAgICAgICAqIGZhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1
dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvZ2xv
YmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2VyLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFs
bG9jLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9j
LWh1Z2UtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mv
QXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5
LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVy
LUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1J
bnQ4QXJyYXktdmlldy1hbGxvYy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJh
eS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2
ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJB
cnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sb25n
LWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5
LWFsbG9jLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qczogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1s
aXZlZC1idWZmZXIuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanM6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuanM6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmct
bGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
SW50MzJBcnJheS1hbGxvYy1odWdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlL3R5cGVkYXJyYXlzL2FycmF5LXVuaXQtdGVzdHMuaHRtbDoKKyAgICAgICAgKiB3ZWJnbC9y
ZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRhLXZp
ZXctdGVzdC5odG1sOgorCiAyMDEzLTA4LTE0ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBh
cHBsZS5jb20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTgxNz4gQVg6IElu
dGVncmF0ZSBsYXlvdXQgdGVzdHMgZnJvbSBvdmVyZmxvdyBib3VuZGluZyBib3hlcyBhcmUgd2F5
IHRvbyBiaWc7IHByZXZlbnRzIFZvaWNlT3ZlciB0YXBzIGZyb20gYWN0aXZhdGluZyB0aGUgcmln
aHQgZWxlbWVudHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNl
dC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0LWludmFsaWQtYXJndW1lbnRzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktc2V0LWludmFsaWQtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMiwyNyArMiwyNyBAQCBWZXJpZmllcyB0aGF0IGF0dGVtcHRpbmcgdG8gc2V0IGludmFsaWQg
CiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBl
ZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZh
bGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRB
cnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50
cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJh
eSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4u
Ci1QQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVu
b3VnaCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXku
c2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBv
dXQgb2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8g
d29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFT
UyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJh
eS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBh
cmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXku
c2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1Q
QVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFT
UyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChv
dGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9m
IHJhbmdlLi4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdo
ZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNo
b3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQg
bGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1Mg
dHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
Rmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQo
b3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rp
bmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJy
YXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25l
IGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFT
UyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5k
cy4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBl
Y3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3
b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBi
ZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRB
cnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3Qg
YXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJB
cnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Yg
b2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0
KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBl
ZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BB
U1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBh
dCBsZWFzdCBvbmUgYXJndW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBv
YmplY3QuCitQQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBv
dXQgb2YgYm91bmRzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENP
TVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtb3V0
LW9mLWJvdW5kcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxNTQwODcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXQtb3V0
LW9mLWJvdW5kcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsMjYgKzQsMjYgQEAg
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiBSZWdyZXNzaW9uIHRl
c3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzM1MiA6IFBh
c3NpbmcgYXJyYXkgdGhhdCBpcyB0b28gbGFyZ2UgdG8gc2V0IG1ldGhvZCBvZiBXZWJHTEFycmF5
cyBkb2VzIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KIFRlc3RpbmcgSW50OEFycmF5Ci1QQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4
IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcg
ZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdM
QXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNv
bnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0
aW5nIFVpbnQ4QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJh
eS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0
IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUg
b3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcy4KIFRlc3RpbmcgSW50MTZBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2Yg
cmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChb
NCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9m
IG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5n
IG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50MTZB
cnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwg
NSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2Uu
LgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91
bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2Yg
Ym91bmRzLgogVGVzdGluZyBJbnQzMkFycmF5Ci1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwg
MSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1Q
QVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6
IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFu
ZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2
XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0
IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0aW5nIFVpbnQzMkFycmF5Ci1QQVNT
IHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IElu
ZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhy
ZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdl
YkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdl
IGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNT
IHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJh
bmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBU
ZXN0aW5nIEZsb2F0MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJH
TEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBp
cyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4
Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3Ro
IGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3
IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVu
Z3RoIGFyZSBvdXQgb2YgYm91bmRzLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJh
eS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0
MDg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQsMTkgKzQsOSBAQCBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIFBBU1MgdGVzdFNsaWNlCiB0ZXN0IGluaGVy
aXRhbmNlIGhpZXJhcmNoeSBvZiB0eXBlZCBhcnJheSB2aWV3cwotUEFTUyBBcnJheUJ1ZmZlclZp
ZXcgZG9lcyBub3QgaGF2ZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSBh
bmQgc2hvdWxkIGJlIGRlZmluZWQKLVBBU1MgbmV3IEludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFy
cmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50OEFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGlu
c3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEludDE2QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgVWludDE2QXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgSW50MzJBcnJh
eSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50MzJB
cnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBGbG9h
dDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcg
RmxvYXQ2NEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1Mg
bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZp
ZXcgaXMgdHJ1ZQotUEFTUyBuZXcgQXJyYXlCdWZmZXJWaWV3KCkgdGhyZXcgVHlwZUVycm9yCi1Q
QVNTIG5ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgaXMgdHJ1
ZQorUEFTUyBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMKK1dBUk46
IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzCitQQVNTIG5ldyBVaW50OENsYW1w
ZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgaXMgZmFsc2UKIFBBU1MgdGVzdCBGbG9h
dDMyQXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCiBQQVNTIHRlc3QgRmxvYXQzMkFycmF5IENv
bnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCiBQQVNTIHRlc3QgRmxvYXQzMkFycmF5IENv
bnN0cnVjdFdpdGhUeXBlZEFycmF5T2ZTaWduZWRWYWx1ZXMKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHJldmlzaW9u
IDE1NDA4NykKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVz
dHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDI2ICsxMTksMTIgQEAgZnVuY3Rpb24gdGVz
dEluaGVyaXRhbmNlSGllcmFyY2h5KCkgewogCiAgIHRyeSB7CiAgICAgdmFyIGZvbyA9IEFycmF5
QnVmZmVyVmlldzsKLSAgICB0ZXN0UGFzc2VkKCdBcnJheUJ1ZmZlclZpZXcgZG9lcyBub3QgaGF2
ZSBbTm9JbnRlcmZhY2VPYmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSBhbmQgc2hvdWxkIGJlIGRl
ZmluZWQnKTsKLQotICAgIHNob3VsZEJlKCduZXcgSW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJy
YXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQ4QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcg
VWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScp
OwotICAgIHNob3VsZEJlKCduZXcgSW50MTZBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVy
VmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50MTZBcnJheSgxKSBpbnN0YW5j
ZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBJbnQzMkFy
cmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRC
ZSgnbmV3IFVpbnQzMkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUn
KTsKLSAgICBzaG91bGRCZSgnbmV3IEZsb2F0MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVm
ZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDY0QXJyYXkoMSkgaW5z
dGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRGF0
YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0
cnVlJyk7Ci0KLSAgICBzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsgbmV3IEFycmF5
QnVmZmVyVmlldygpIH0sICJuZXcgQXJyYXlCdWZmZXJWaWV3KCkiKTsKKyAgICB0ZXN0RmFpbGVk
KCJBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBidXQgaXMgZGVmaW5lZCIpOwog
ICB9IGNhdGNoIChlKSB7Ci0gICAgdGVzdEZhaWxlZCgnQXJyYXlCdWZmZXJWaWV3IGRvZXMgbm90
IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYnV0IHdhcyBub3Qg
ZGVmaW5lZCcpOworICAgIHRlc3RQYXNzZWQoJ0FycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgdW5k
ZWZpbmVkIGFuZCBpcycpOwogICB9CiAKLSAgLy8gVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgb25l
IGtpbmQgb2YgdmlldyB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlcgotICBzaG91bGRCZSgnbmV3
IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScsICd0cnVlJyk7Cisg
IHNob3VsZEJlKCduZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50OEFycmF5
JywgZmFsc2UpOwogfQogCiAvLwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
ZGF0YS12aWV3LWNyYXNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAx
NTQwODcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9kYXRhLXZpZXctY3Jhc2gt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDggKzIsOCBAQCBUZXN0IHRoYXQgRGF0
YVZpZXcgZG9lcyBub3QgY3Jhc2ggd2l0aCBiCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
IAotUEFTUyB2aWV3ID0gbmV3IERhdGFWaWV3KGFycmF5LmJ1ZmZlciwgLTQ1MDAwMDAwMDApIHRo
cmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBTaXplIGlzIHRvbyBsYXJnZSAob3IgaXMgbmVnYXRp
dmUpLi4KLVBBU1MgdmlldyA9IG5ldyBEYXRhVmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAw
LCA0NTAwMDAwMDAwKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogU2l6ZSBpcyB0b28gbGFy
Z2UgKG9yIGlzIG5lZ2F0aXZlKS4uCitQQVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVm
ZmVyLCAtNDUwMDAwMDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEJ5dGUgb2Zmc2V0
IGFuZCBsZW5ndGggb3V0IG9mIHJhbmdlIG9mIGJ1ZmZlci4KK1BBU1MgdmlldyA9IG5ldyBEYXRh
VmlldyhhcnJheS5idWZmZXIsIC00NTAwMDAwMDAwLCA0NTAwMDAwMDAwKSB0aHJldyBleGNlcHRp
b24gUmFuZ2VFcnJvcjogQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ugb2YgYnVm
ZmVyLgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZm
ZXItdHJhbnNmZXItb2YtY29udHJvbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9zY3JpcHQtdGVzdHMvYXJyYXlidWZmZXItdHJhbnNmZXItb2YtY29udHJv
bC5qcwkocmV2aXNpb24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
c2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEzLDYgKzEzLDcgQEAgdmFyIGJhc2ljQnVmZmVyVHlwZXMgPQogICAgIFsiVWlu
dDMyIiwgVWludDMyQXJyYXksIDRdLAogICAgIFsiSW50OCIsIEludDhBcnJheSwgMV0sCiAgICAg
WyJVaW50OCIsIFVpbnQ4QXJyYXksIDFdLAorICAgIFsiVWludDhDbGFtcGVkIiwgVWludDhDbGFt
cGVkQXJyYXksIDFdLAogICAgIFsiSW50MTYiLCBJbnQxNkFycmF5LCAyXSwKICAgICBbIlVpbnQx
NiIsIFVpbnQxNkFycmF5LCAyXSwKICAgICBbIkZsb2F0MzIiLCBGbG9hdDMyQXJyYXksIDRdLApA
QCAtMjAwLDcgKzIwMSw3IEBAIGZ1bmN0aW9uIGNoZWNrVmlldyh0ZXN0TmFtZSwgdHlwZWRBcnJh
eVQKICAgICB9CiAgICAgaWYgKHZpZXcuYnVmZmVyLmJ5dGVMZW5ndGggIT09IGFycmF5U2l6ZSB8
fAogICAgICAgICAoISh2aWV3IGluc3RhbmNlb2YgRGF0YVZpZXcpICYmIHZpZXcubGVuZ3RoICE9
PSBhcnJheUVmZmVjdGl2ZVNpemUgLyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5UKSkgewotICAgICAg
ICB0ZXN0RmFpbGVkKHRlc3ROYW1lICsgIjogdmlldyBoYXMgdGhlIHdyb25nIGxlbmd0aCAoIiAr
IHZpZXcubGVuZ3RoICsgIikiKTsKKyAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZp
ZXcgaGFzIHRoZSB3cm9uZyBsZW5ndGggKCIgKyB2aWV3Lmxlbmd0aCArICIgaW5zdGVhZCBvZiAi
ICsgYXJyYXlFZmZlY3RpdmVTaXplICsgIiAvICIgKyB2aWV3LkJZVEVTX1BFUl9FTEVNRU5UICsg
IikiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAodmlldy5ieXRlT2Zm
c2V0ICE9PSBhcnJheU9mZnNldCkgewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1h
LWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1h
LWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0zLDI1ICszLDE1IEBAIFRoaXMgdGVzdHMgaWYgVHlwZUVycm9yIGlzIHRocm93biBvciBub3QK
IE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIEFycmF5QnVmZmVyKCkgdGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5j
dGlvbiAoZXZhbHVhdGluZyAnQXJyYXlCdWZmZXIoKScpLgogU0tJUCBBdWRpb0NvbnRleHQgaXMg
bm90IGltcGxlbWVudGVkLgogUEFTUyBGb3JtRGF0YSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEZvcm1EYXRhQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0Zv
cm1EYXRhKCknKS4KLVBBU1MgRGF0YVZpZXcoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBE
YXRhVmlld0NvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdEYXRhVmll
dygpJykuCiBQQVNTIEV2ZW50U291cmNlKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRXZl
bnRTb3VyY2VDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnRXZlbnRT
b3VyY2UoKScpLgogUEFTUyBGaWxlUmVhZGVyKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
RmlsZVJlYWRlckNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdGaWxl
UmVhZGVyKCknKS4KLVBBU1MgRmxvYXQzMkFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogRmxvYXQzMkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcg
J0Zsb2F0MzJBcnJheSgpJykuCi1QQVNTIEZsb2F0NjRBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEZsb2F0NjRBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFs
dWF0aW5nICdGbG9hdDY0QXJyYXkoKScpLgogUEFTUyBBdWRpbygpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEF1ZGlvQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcg
J0F1ZGlvKCknKS4KIFBBU1MgSW1hZ2UoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbWFn
ZUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbWFnZSgpJykuCiBQ
QVNTIE9wdGlvbigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbkNvbnN0cnVjdG9y
IGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdPcHRpb24oKScpLgotUEFTUyBJbnQxNkFy
cmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50MTZBcnJheUNvbnN0cnVjdG9yIGlz
IG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbnQxNkFycmF5KCknKS4KLVBBU1MgSW50MzJB
cnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDMyQXJyYXlDb25zdHJ1Y3RvciBp
cyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnSW50MzJBcnJheSgpJykuCi1QQVNTIEludDhB
cnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDhBcnJheUNvbnN0cnVjdG9yIGlz
IG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdJbnQ4QXJyYXkoKScpLgogUEFTUyBNZXNzYWdl
Q2hhbm5lbCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE1lc3NhZ2VDaGFubmVsQ29uc3Ry
dWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ01lc3NhZ2VDaGFubmVsKCknKS4K
IFBBU1MgU2hhcmVkV29ya2VyKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogU2hhcmVkV29y
a2VyQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1NoYXJlZFdvcmtl
cigpJykuCi1QQVNTIFVpbnQxNkFycmF5KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVWlu
dDE2QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnVWludDE2
QXJyYXkoKScpLgotUEFTUyBVaW50MzJBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IFVpbnQzMkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ1Vp
bnQzMkFycmF5KCknKS4KLVBBU1MgVWludDhBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IFVpbnQ4QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAn
VWludDhBcnJheSgpJykuCiBQQVNTIFdlYktpdENTU01hdHJpeCgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdXZWJLaXRDU1NNYXRyaXgoKScpLgogUEFTUyBXZWJLaXRQb2ludCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFdlYktpdFBvaW50Q29uc3RydWN0b3IgaXMgbm90IGEgZnVu
Y3Rpb24gKGV2YWx1YXRpbmcgJ1dlYktpdFBvaW50KCknKS4KIFBBU1MgV2ViU29ja2V0KCkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogV2ViU29ja2V0Q29uc3RydWN0b3IgaXMgbm90IGEgZnVu
Y3Rpb24gKGV2YWx1YXRpbmcgJ1dlYlNvY2tldCgpJykuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLmh0
bWwJKHJldmlzaW9uIDE1NDA4NykKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL2NhbGwtYS1jb25z
dHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYsNyArNiw3IEBA
CiAKIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIGlmIFR5cGVFcnJvciBpcyB0aHJvd24gb3Igbm90
IHdoZW4gd2UgY2FsbCBhIGNvbnN0cnVjdG9yIGFzIGEgbm9ybWFsIGZ1bmN0aW9uLiIpOwogCi12
YXIgdGVzdF9jb25zdHJ1Y3RvcnMgPSBbIkFycmF5QnVmZmVyIiwgIkF1ZGlvQ29udGV4dCIsICJG
b3JtRGF0YSIsICJEYXRhVmlldyIsICJFdmVudFNvdXJjZSIsICJGaWxlUmVhZGVyIiwgIkZsb2F0
MzJBcnJheSIsICJGbG9hdDY0QXJyYXkiLCAiQXVkaW8iLCAiSW1hZ2UiLCAiT3B0aW9uIiwgIklu
dDE2QXJyYXkiLCAiSW50MzJBcnJheSIsICJJbnQ4QXJyYXkiLCAiTWVzc2FnZUNoYW5uZWwiLCAi
U2hhcmVkV29ya2VyIiwgIlVpbnQxNkFycmF5IiwgIlVpbnQzMkFycmF5IiwgIlVpbnQ4QXJyYXki
LCAiV2ViS2l0Q1NTTWF0cml4IiwgIldlYktpdFBvaW50IiwgIldlYlNvY2tldCIsICJXb3JrZXIi
LCAiWE1MSHR0cFJlcXVlc3QiLCAiWFNMVFByb2Nlc3NvciJdOwordmFyIHRlc3RfY29uc3RydWN0
b3JzID0gWyJBdWRpb0NvbnRleHQiLCAiRm9ybURhdGEiLCAiRXZlbnRTb3VyY2UiLCAiRmlsZVJl
YWRlciIsICJBdWRpbyIsICJJbWFnZSIsICJPcHRpb24iLCAiTWVzc2FnZUNoYW5uZWwiLCAiU2hh
cmVkV29ya2VyIiwgIldlYktpdENTU01hdHJpeCIsICJXZWJLaXRQb2ludCIsICJXZWJTb2NrZXQi
LCAiV29ya2VyIiwgIlhNTEh0dHBSZXF1ZXN0IiwgIlhTTFRQcm9jZXNzb3IiXTsKIAogdGVzdF9j
b25zdHJ1Y3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29uc3RydWN0b3IpIHsKICAgICBpZiAoZXZh
bCgid2luZG93LiIgKyBjb25zdHJ1Y3RvcikpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Nv
bnN0cnVjdG9yLWxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
Y29uc3RydWN0b3ItbGVuZ3RoLmh0bWwJKHJldmlzaW9uIDE1NDA4NykKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDE4
ICsxNSwxOCBAQCBzaG91bGRCZSgnQ2xvc2VFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUo
J0N1c3RvbUV2ZW50Lmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnRE9NRm9ybURhdGEubGVuZ3Ro
JywgJzAnKTsKIHNob3VsZEJlKCdET01QYXJzZXIubGVuZ3RoJywgJzAnKTsKLXNob3VsZEJlKCdE
YXRhVmlldy5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ0RhdGFWaWV3Lmxlbmd0aCcsICczJyk7
CiBzaG91bGRCZSgnRXJyb3JFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0V2ZW50Lmxl
bmd0aCcsICcxJyk7CiBzaG91bGRCZSgnRXZlbnRTb3VyY2UubGVuZ3RoJywgJzEnKTsKLXNob3Vs
ZEJlKCdGbG9hdDMyQXJyYXkubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdGbG9hdDY0QXJyYXku
bGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdGbG9hdDMyQXJyYXkubGVuZ3RoJywgJzMnKTsKK3No
b3VsZEJlKCdGbG9hdDY0QXJyYXkubGVuZ3RoJywgJzMnKTsKIHNob3VsZEJlKCdGaWxlUmVhZGVy
Lmxlbmd0aCcsICcwJyk7CiBzaG91bGRCZSgnRmlsZVJlYWRlclN5bmMubGVuZ3RoJywgJzAnKTsK
IHNob3VsZEJlKCdIYXNoQ2hhbmdlRXZlbnQubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdJbnQx
NkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnSW50MzJBcnJheS5sZW5ndGgnLCAnMScp
Owotc2hvdWxkQmUoJ0ludDhBcnJheS5sZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ0ludDE2QXJy
YXkubGVuZ3RoJywgJzMnKTsKK3Nob3VsZEJlKCdJbnQzMkFycmF5Lmxlbmd0aCcsICczJyk7Citz
aG91bGRCZSgnSW50OEFycmF5Lmxlbmd0aCcsICczJyk7CiBzaG91bGRCZSgnSW50ZW50Lmxlbmd0
aCcsICczJyk7CiBzaG91bGRCZSgnTWVkaWFDb250cm9sbGVyLmxlbmd0aCcsICcwJyk7CiBzaG91
bGRCZSgnTWVkaWFTdHJlYW0ubGVuZ3RoJywgJzAnKTsKQEAgLTQyLDEwICs0MiwxMCBAQCBzaG91
bGRCZSgnU2hhcmVkV29ya2VyLmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnU3RvcmFnZUV2ZW50
Lmxlbmd0aCcsICcxJyk7CiBzaG91bGRCZSgnVGV4dFRyYWNrQ3VlLmxlbmd0aCcsICczJyk7CiBz
aG91bGRCZSgnVHJhY2tFdmVudC5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQxNkFycmF5
Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnVWludDMyQXJyYXkubGVuZ3RoJywgJzEnKTsKLXNo
b3VsZEJlKCdVaW50OEFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgnVWludDhDbGFtcGVk
QXJyYXkubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdVaW50MTZBcnJheS5sZW5ndGgnLCAnMycp
Oworc2hvdWxkQmUoJ1VpbnQzMkFycmF5Lmxlbmd0aCcsICczJyk7CitzaG91bGRCZSgnVWludDhB
cnJheS5sZW5ndGgnLCAnMycpOworc2hvdWxkQmUoJ1VpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCcs
ICczJyk7CiBzaG91bGRCZSgnV2ViR0xDb250ZXh0RXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3Vs
ZEJlKCdXZWJLaXRBbmltYXRpb25FdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1dlYktp
dENTU01hdHJpeC5sZW5ndGgnLCAnMCcpOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZGVkaWNhdGVkLXdvcmtlci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0
dHJpYnV0ZXMtZGVkaWNhdGVkLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA4NykK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRl
ZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDIxICs0LDEx
IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBTdGFydGlu
ZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMuanMK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdB
cnJheUJ1ZmZlcicpLnZhbHVlIGlzIEFycmF5QnVmZmVyCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9w
ZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhhc093blByb3BlcnR5KCdzZXQnKSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyJykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuY29u
ZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykudmFsdWUgaXMgQmxvYgogUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxv
YicpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmll
dycpLnZhbHVlIGlzIERhdGFWaWV3Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3Jyku
ZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZScpLnZhbHVlIGlzIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFs
c2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQpAQCAtMzksMzEgKzI5LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmls
ZVJlYWRlclN5bmMnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLnZhbHVlIGlzIEZsb2F0MzJBcnJheQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJB
cnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdGbG9hdDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLnZhbHVl
IGlzIEZsb2F0NjRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRB
cnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5jb25maWd1cmFibGUgaXMg
dHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ludDE2QXJyYXknKS52YWx1ZSBpcyBJbnQxNkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blBy
b3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS52YWx1ZSBpcyBJbnQzMkFycmF5Ci1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJh
eScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMy
QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLnZhbHVlIGlzIEludDhBcnJh
eQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0ludDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdJbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykudmFsdWUg
aXMgTWVzc2FnZUNoYW5uZWwKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdnZXQnKSBp
cyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkBA
IC03OSwyNiArNDQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
VVJMJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuZW51bWVyYWJsZSBpcyBm
YWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VSTCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS52YWx1ZSBpcyBVaW50
MTZBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2
QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmVudW1l
cmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJy
YXknKS52YWx1ZSBpcyBVaW50MzJBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDhBcnJheScpLnZhbHVlIGlzIFVpbnQ4QXJyYXkKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFz
T3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS52YWx1ZSBpcyBVaW50OENs
YW1wZWRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZh
bHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
OENsYW1wZWRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykudmFsdWUgaXMgV2ViU29ja2V0CiBQQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0
JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25z
dHJ1Y3RvcnMtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxNTQwODcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3Rv
cnMtYXR0cmlidXRlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgsMTYgKzgsNiBA
QCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQW5hbHlzZXJOb2RlJykuaGFzT3duUHJv
cGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQW5hbHlzZXJOb2RlJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmNvbmZp
Z3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnQXJyYXlCdWZmZXInKS52YWx1ZSBpcyBBcnJheUJ1ZmZlcgotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVy
dHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykudmFs
dWUgaXMgQXJyYXlCdWZmZXJWaWV3Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZh
bHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlC
dWZmZXJWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXJWaWV3JykuZW51bWVy
YWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0FycmF5QnVmZmVyVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXR0cicpLnZhbHVlIGlzIEF0dHIKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBdHRyJykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnQXR0cicpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAt
MjYzLDExICsyNTMsNiBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
CiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRE9NVG9rZW5M
aXN0JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRE9NVG9rZW5MaXN0JykuZW51bWVyYWJsZSBpcyBm
YWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRv
a2VuTGlzdCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS52YWx1ZSBpcyBEYXRhVmlldwotUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3du
UHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdEYXRhVmlldycpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVsYXlOb2RlJykudmFsdWUgaXMgRGVs
YXlOb2RlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVs
YXlOb2RlJykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGVsYXlOb2RlJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCkBAIC0zNDgsMTYgKzMzMyw2IEBAIFBBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdGaWxlUmVhZGVyJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicp
LmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdGaWxlUmVhZGVyJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS52YWx1ZSBp
cyBGbG9hdDMyQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdGbG9hdDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1Q
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS52YWx1ZSBpcyBGbG9hdDY0QXJyYXkKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdG
bG9hdDY0QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRy
dWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2
ZW50JykudmFsdWUgaXMgRm9jdXNFdmVudAogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ0ZvY3VzRXZlbnQnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFs
c2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2
ZW50JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkBAIC03NDgsMjEgKzcyMyw2IEBA
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbWFnZURhdGEnKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbWFnZURhdGEnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuY29uZmlndXJhYmxlIGlz
IHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykudmFsdWUgaXMgSW50MTZBcnJheQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMg
ZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmVudW1lcmFibGUgaXMg
ZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykudmFsdWUgaXMgSW50MzJBcnJheQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50
MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS52
YWx1ZSBpcyBJbnQ4QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5oYXNP
d25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuY29uZmln
dXJhYmxlIGlzIHRydWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdLZXlib2FyZEV2ZW50JykudmFsdWUgaXMgS2V5Ym9hcmRFdmVudAogUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0tleWJvYXJkRXZlbnQnKS5oYXNPd25Q
cm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdLZXlib2FyZEV2ZW50JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZh
bHNlCkBAIC0xNzk4LDI2ICsxNzU4LDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsbwogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VSTCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5jb25maWd1
cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQxNkFycmF5JykudmFsdWUgaXMgVWludDE2QXJyYXkKLVBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykudmFsdWUgaXMg
VWludDMyQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3du
UHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS52YWx1ZSBpcyBVaW50OEFycmF5Ci1QQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuZW51
bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykudmFsdWUg
aXMgVWludDhDbGFtcGVkQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4
Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dhdmVTaGFwZXJOb2RlJyku
dmFsdWUgaXMgV2F2ZVNoYXBlck5vZGUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdXYXZlU2hhcGVyTm9kZScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dhdmVT
aGFwZXJOb2RlJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2Vy
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1j
b25zdHJ1Y3RvcnMtYXR0cmlidXRlcy1zaGFyZWQtd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0
dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQs
MjEgKzQsMTEgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiAK
IFN0YXJ0aW5nIHdvcmtlcjogc2NyaXB0LXRlc3RzL2dsb2JhbC1jb25zdHJ1Y3RvcnMtYXR0cmli
dXRlcy5qcwotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyJykudmFsdWUgaXMgQXJyYXlCdWZmZXIKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhh
c093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZm
ZXInKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS52YWx1ZSBpcyBCbG9iCiBQQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMg
ZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdCbG9iJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Jsb2InKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0RhdGFWaWV3JykudmFsdWUgaXMgRGF0YVZpZXcKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdn
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0
YVZpZXcnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0V2ZW50U291cmNlJykudmFsdWUgaXMgRXZlbnRTb3VyY2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLmhhc093blBy
b3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0V2ZW50U291cmNlJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCkBAIC0zNCwzMSArMjQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdGaWxlUmVhZGVyU3luYycpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGaWxlUmVhZGVyU3luYycpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykudmFsdWUgaXMgRmxvYXQzMkFycmF5Ci1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5Jyku
aGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuZW51bWVyYWJsZSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0Zsb2F0MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5Jyku
dmFsdWUgaXMgRmxvYXQ2NEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcp
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQ2NEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MTZBcnJheScpLnZhbHVlIGlzIEludDE2QXJyYXkKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFz
T3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdz
ZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScp
LmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLnZhbHVlIGlzIEludDMyQXJyYXkKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQz
MkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093
blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNl
Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW50MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykudmFsdWUgaXMgSW50
OEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnSW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5
JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuZW51bWVyYWJsZSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0ludDhBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS52
YWx1ZSBpcyBNZXNzYWdlQ2hhbm5lbAogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKQEAgLTc5LDI2ICs0NCw2IEBAIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3IKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdVUkwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5lbnVtZXJhYmxl
IGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVVJMJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLnZhbHVlIGlz
IFVpbnQxNkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5Jyku
ZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
MzJBcnJheScpLnZhbHVlIGlzIFVpbnQzMkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuY29uZmln
dXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OEFycmF5JykudmFsdWUgaXMgVWludDhBcnJheQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXkn
KS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFy
cmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLnZhbHVlIGlzIFVp
bnQ4Q2xhbXBlZEFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0Jykg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQ4Q2xhbXBlZEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5
JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJTb2NrZXQnKS52YWx1ZSBpcyBXZWJTb2NrZXQKIFBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJT
b2NrZXQnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXZWJTb2NrZXQnKS5oYXNPd25Q
cm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
aHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVn
ZS1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZl
ci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxs
b2MtbGFyZ2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1sYXJnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmct
bGl2ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1s
b25nLWxpdmVkLWJ1ZmZlcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVm
ZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bG9uZy1saXZlZC1idWZmZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQt
YnVmZmVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVy
LUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mt
bG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZAorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxp
dmVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4
QXJyYXktdmlldy1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9JbnQzMkFycmF5
LUludDhBcnJheS12aWV3LWFsbG9jCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1J
bnQ4QXJyYXktdmlldy1hbGxvYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJh
eS12aWV3LWFsbG9jLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJh
eS1hbGxvYy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9JbnQzMkFycmF5LWFsbG9jCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWh1Z2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1odWdlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
SW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9u
Zy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1o
dWdlLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5
LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2Mt
aHVnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1s
b25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1o
dWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1h
bGxvYy1sYXJnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1sYXJnZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1s
aXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFy
Z2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXkt
YWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxhcmdlLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJn
ZS1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJB
cnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZAorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJB
cnJheS1hbGxvYy1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9j
LWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAordmFyIGFy
cmF5ID0gbmV3IEFycmF5KDEwMDApOworCit2YXIgbiA9IDEwMDAwOworCitmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgIGFycmF5WyhpIC8gKG4gLyBhcnJheS5sZW5ndGgpKSB8IDBd
ID0gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTAwMDAwKSk7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVuZ3Ro
ICE9IDEwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsg
YXJyYXlbaV0ubGVuZ3RoOworICAgIGlmIChhcnJheVtpXS5idWZmZXIuYnl0ZUxlbmd0aCAhPSAx
MDAwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGJ1ZmZlciBsZW5ndGg6ICIg
KyBhcnJheVtpXS5idWZmZXIuYnl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdl
LWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZl
ZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5
Lmxlbmd0aF0gPSBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigxMDAwKSk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVu
Z3RoICE9IDEwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGxlbmd0aDogIiArIGFycmF5
W2ldLmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGggIT0gMTAwMCkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYnVmZmVyLmJ5dGVMZW5ndGg6ICIgKyBhcnJheVtp
XS5idWZmZXIuYnl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVm
ZmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9B
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3Ro
XSA9IG5ldyBJbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKDEwKSkuYnVmZmVyOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmJ5dGVM
ZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGJ5dGVMZW5ndGg6ICIgKyBh
cnJheVtpXS5ieXRlTGVuZ3RoOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
dmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCA3MDAw
MDsgKytpKQorICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IEludDhBcnJheShuZXcg
QXJyYXlCdWZmZXIoMTApKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsr
aSkgeworICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVm
ZmVyLmJ5dGVMZW5ndGggIT0gMTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGJ1ZmZlci5i
eXRlTGVuZ3RoOiAiICsgYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJh
eS1hbGxvYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNzAwMDA7ICsraSkKKyAgICBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigx
MCkpOworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0lu
dDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3
LWFsbG9jLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMzAwMDA7ICsraSkgeworICAg
IHZhciBhcnJheTEgPSBuZXcgSW50MzJBcnJheSgxMCk7CisgICAgdmFyIGFycmF5MiA9IG5ldyBJ
bnQ4QXJyYXkoYXJyYXkxLmJ1ZmZlcik7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9J
bnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdl
LWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBhcnJheSA9
IG5ldyBBcnJheSgxMDAwKTsKKwordmFyIG4gPSAxMDAwMDsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCBuOyArK2kpIHsKKyAgICBhcnJheVsoaSAvIChuIC8gYXJyYXkubGVuZ3RoKSkgfCAwXSA9IG5l
dyBJbnQzMkFycmF5KDEwMDAwMCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVu
Z3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVuZ3RoICE9IDEwMDAwMCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOworfQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5
LWFsbG9jLWh1Z2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2Mt
aHVnZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDA7ICsraSkKKyAgICBuZXcgSW50MzJBcnJheSgxMDAwMDAwKTsKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdl
LWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMy
QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
IEBACit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQzMkFy
cmF5KDEwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Cisg
ICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCBhcnJheSBsZW5ndGg6ICIgKyBhcnJheVtpXS5sZW5ndGg7Cit9CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9J
bnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLmpzCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDsgKytpKQor
ICAgIG5ldyBJbnQzMkFycmF5KDEwMDAwKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJh
eS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwMCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwMDsgKytpKQorICAgIGFycmF5W2kgJSBhcnJh
eS5sZW5ndGhdID0gbmV3IEludDMyQXJyYXkoMTApOworCitmb3IgKHZhciBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFy
cmF5LWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDsgKytp
KQorICAgIG5ldyBJbnQzMkFycmF5KDEwKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTU0MDg3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zh
c3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTEsMTggKzExLDE4IEBAIFBBU1MgQ2xvc2VFdmVudC5sZW5ndGggaXMgMQogUEFTUyBDdXN0b21F
dmVudC5sZW5ndGggaXMgMQogRkFJTCBET01Gb3JtRGF0YS5sZW5ndGggc2hvdWxkIGJlIDAuIFRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogRE9NRm9y
bURhdGEKIFBBU1MgRE9NUGFyc2VyLmxlbmd0aCBpcyAwCi1QQVNTIERhdGFWaWV3Lmxlbmd0aCBp
cyAxCitQQVNTIERhdGFWaWV3Lmxlbmd0aCBpcyAzCiBQQVNTIEVycm9yRXZlbnQubGVuZ3RoIGlz
IDEKIFBBU1MgRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgRXZlbnRTb3VyY2UubGVuZ3RoIGlzIDEK
LVBBU1MgRmxvYXQzMkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEZsb2F0NjRBcnJheS5sZW5ndGgg
aXMgMQorUEFTUyBGbG9hdDMyQXJyYXkubGVuZ3RoIGlzIDMKK1BBU1MgRmxvYXQ2NEFycmF5Lmxl
bmd0aCBpcyAzCiBQQVNTIEZpbGVSZWFkZXIubGVuZ3RoIGlzIDAKIEZBSUwgRmlsZVJlYWRlclN5
bmMubGVuZ3RoIHNob3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENh
bid0IGZpbmQgdmFyaWFibGU6IEZpbGVSZWFkZXJTeW5jCiBQQVNTIEhhc2hDaGFuZ2VFdmVudC5s
ZW5ndGggaXMgMQotUEFTUyBJbnQxNkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEludDMyQXJyYXku
bGVuZ3RoIGlzIDEKLVBBU1MgSW50OEFycmF5Lmxlbmd0aCBpcyAxCitQQVNTIEludDE2QXJyYXku
bGVuZ3RoIGlzIDMKK1BBU1MgSW50MzJBcnJheS5sZW5ndGggaXMgMworUEFTUyBJbnQ4QXJyYXku
bGVuZ3RoIGlzIDMKIEZBSUwgSW50ZW50Lmxlbmd0aCBzaG91bGQgYmUgMy4gVGhyZXcgZXhjZXB0
aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBJbnRlbnQKIFBBU1MgTWVk
aWFDb250cm9sbGVyLmxlbmd0aCBpcyAwCiBGQUlMIE1lZGlhU3RyZWFtLmxlbmd0aCBzaG91bGQg
YmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBNZWRpYVN0cmVhbQpAQCAtMzgsMTAgKzM4LDEwIEBAIFBBU1MgU2hhcmVkV29ya2VyLmxlbmd0
aCBpcyAxCiBQQVNTIFN0b3JhZ2VFdmVudC5sZW5ndGggaXMgMQogUEFTUyBUZXh0VHJhY2tDdWUu
bGVuZ3RoIGlzIDMKIFBBU1MgVHJhY2tFdmVudC5sZW5ndGggaXMgMQotUEFTUyBVaW50MTZBcnJh
eS5sZW5ndGggaXMgMQotUEFTUyBVaW50MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBVaW50OEFy
cmF5Lmxlbmd0aCBpcyAxCi1QQVNTIFVpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCBpcyAxCitQQVNT
IFVpbnQxNkFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIFVpbnQzMkFycmF5Lmxlbmd0aCBpcyAzCitQ
QVNTIFVpbnQ4QXJyYXkubGVuZ3RoIGlzIDMKK1BBU1MgVWludDhDbGFtcGVkQXJyYXkubGVuZ3Ro
IGlzIDMKIFBBU1MgV2ViR0xDb250ZXh0RXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgV2ViS2l0QW5p
bWF0aW9uRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1MgV2ViS2l0Q1NTTWF0cml4Lmxlbmd0aCBpcyAw
CkluZGV4OiBMYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS90eXBlZGFycmF5cy9hcnJheS11bml0LXRlc3RzLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
dHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCShyZXZpc2lvbiAxNTQwODcpCisrKyBM
YXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90
eXBlZGFycmF5cy9hcnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwy
NiArMTQ5LDEzIEBAIGZ1bmN0aW9uIHRlc3RJbmhlcml0YW5jZUhpZXJhcmNoeSgpIHsKIAogICB0
cnkgewogICAgIHZhciBmb28gPSBBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdGVzdFBhc3NlZCgnQXJy
YXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBh
dHRyaWJ1dGUgYW5kIHNob3VsZCBiZSBkZWZpbmVkJyk7Ci0KLSAgICBzaG91bGRCZSgnbmV3IElu
dDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hv
dWxkQmUoJ25ldyBVaW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3Ry
dWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IEludDE2QXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCdu
ZXcgVWludDE2QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwot
ICAgIHNob3VsZEJlKCduZXcgSW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmll
dycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50MzJBcnJheSgxKSBpbnN0YW5jZW9m
IEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDMyQXJy
YXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJl
KCduZXcgRmxvYXQ2NEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUn
KTsKLSAgICBzaG91bGRCZSgnbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFu
Y2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotCi0gICAgc2hvdWxkVGhyb3dUeXBlRXJy
b3IoZnVuY3Rpb24oKSB7IG5ldyBBcnJheUJ1ZmZlclZpZXcoKSB9LCAibmV3IEFycmF5QnVmZmVy
VmlldygpIik7CisgICAgdGVzdEZhaWxlZCgiQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRl
ZmluZWQgYnV0IGlzIGRlZmluZWQiKTsKICAgfSBjYXRjaCAoZSkgewotICAgIHRlc3RGYWlsZWQo
J0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5k
ZWQgYXR0cmlidXRlIGJ1dCB3YXMgbm90IGRlZmluZWQnKTsKKyAgICB0ZXN0UGFzc2VkKCJBcnJh
eUJ1ZmZlclZpZXcgc2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMiKTsKICAgfQogCiAgIC8vIFRo
ZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBraW5kIG9mIHZpZXcgdGhhdCBpbmhlcml0cyBmcm9t
IGFub3RoZXIKLSAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9m
IFVpbnQ4QXJyYXknLCAndHJ1ZScpOworICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5
KDEpIGluc3RhbmNlb2YgVWludDhBcnJheScsICdmYWxzZScpOwogfQogCiAvLwpJbmRleDogTGF5
b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlw
ZWRhcnJheXMvZGF0YS12aWV3LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93
ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9k
YXRhLXZpZXctdGVzdC5odG1sCShyZXZpc2lvbiAxNTQwODcpCisrKyBMYXlvdXRUZXN0cy93ZWJn
bC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS90eXBlZGFycmF5cy9kYXRh
LXZpZXctdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsOSArMjcwLDkgQEAgZnVuY3Rp
b24gcnVuQ29uc3RydWN0b3JUZXN0cygpCiAgICAgLy8gVXNlIHRyeS9jYXRjaCBpbnN0ZWFkIG9m
IGNhbGxpbmcgc2hvdWxkVGhyb3cgdG8gYXZvaWQgZGlmZmVyZW50IGV4Y2VwdGlvbiBtZXNzYWdl
IGJlaW5nIHJlcG9ydGVkIGZyb20gZGlmZmVyZW50IHBsYXRmb3JtLgogICAgIHRyeSB7CiAgICAg
ICAgIFRlc3RFdmFsKGV4cHIpOwotICAgICAgICB0ZXN0RmFpbGVkKGV4cHIgKyAiIGRvZXMgbm90
IHRocm93IGV4Y2VwdGlvbiIpOworICAgICAgICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHdvcmtzIik7
CiAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICB0ZXN0UGFzc2VkKGV4cHIgKyAiIHRocmV3IGV4
Y2VwdGlvbiIpOworICAgICAgICB0ZXN0RmFpbGVkKGV4cHIgKyAiIHRocmV3IGV4Y2VwdGlvbiIp
OwogICAgIH0KIAogICAgIGRlYnVnKCIiKTsK
</data>
<flag name="commit-queue"
          id="230742"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208793</attachid>
            <date>2013-08-14 23:59:50 -0700</date>
            <delta_ts>2013-08-15 04:00:42 -0700</delta_ts>
            <desc>another rebase and more qt fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>750388</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA5
MCkKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA4
LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJy
YXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50
LgorCisgICAgICAgIEF1dG9tYWtlIHdvcmsgY291cnRlc3kgb2YgWmFuIERvYmVyc2VrIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4uCisKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL3N5bWJvbHMu
ZmlsdGVyOgorCiAyMDEzLTA4LTE0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFVuLWlubGluZSBkYXRhTG9nIGR1bXBlcnMgZm9yIEludFNpemUgYW5k
IEludFBvaW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0NDQgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRlbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICBUeXBlZCBhcnJheXMgd2Vy
ZSBwcmV2aW91c2x5IGRlZmljaWVudCBpbiBzZXZlcmFsIG1ham9yIHdheXM6CisgICAgICAgIAor
ICAgICAgICAtIFRoZXkgd2VyZSBkZWZpbmVkIHNlcGFyYXRlbHkgaW4gV2ViQ29yZSBhbmQgaW4g
dGhlIGpzYyBzaGVsbC4gVGhlIHR3bworICAgICAgICAgIGltcGxlbWVudGF0aW9ucyB3ZXJlIGRp
ZmZlcmVudCwgYW5kIHRoZSBqc2Mgc2hlbGwgb25lIHdhcyBiYXNpY2FsbHkgd3JvbmcuCisgICAg
ICAgICAgVGhlIFdlYkNvcmUgb25lIHdhcyBxdWl0ZSBhd2Z1bCwgYWxzby4KKyAgICAgICAgCisg
ICAgICAgIC0gVHlwZWQgYXJyYXlzIHdlcmUgbm90IHZpc2libGUgdG8gdGhlIEpJVCBleGNlcHQg
dGhyb3VnaCBzb21lIHdlaXJkIGhvb2tzLgorICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgSklU
IGNvdWxkIG5vdCBhc2sgIndoYXQgaXMgdGhlIFN0cnVjdHVyZSB0aGF0IHRoaXMgdHlwZWQKKyAg
ICAgICAgICBhcnJheSB3b3VsZCBoYXZlIGlmIEkganVzdCBhbGxvY2F0ZWQgaXQgZnJvbSB0aGlz
IGdsb2JhbCBvYmplY3QiLiBBbHNvLAorICAgICAgICAgIGl0IHdhcyBkaWZmaWN1bHQgdG8gd2ly
ZSBhbnkgb2YgdGhlIHR5cGVkIGFycmF5IGludHJpbnNpY3MsIGJlY2F1c2UgbW9zdAorICAgICAg
ICAgIG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdhc24ndCB2aXNpYmxlIGFueXdoZXJlIGluIEpTQy4K
KyAgICAgICAgCisgICAgICAgIC0gVHlwZWQgYXJyYXkgYWxsb2NhdGlvbiB3YXMgYnJhaW4tZGVh
ZC4gQWxsb2NhdGluZyBhIHR5cGVkIGFycmF5IGludm9sdmVkCisgICAgICAgICAgdHdvIEpTIG9i
amVjdHMsIHR3byBHQyB3ZWFrIGhhbmRsZXMsIGFuZCB0aHJlZSBtYWxsb2MgYWxsb2NhdGlvbnMu
CisgICAgICAgIAorICAgICAgICAtIE5ldXRlcmluZy4gSXQgaW52b2x2ZWQga2VlcGluZyB0YWJz
IG9uIGFsbCBuYXRpdmUgdmlld3MgYnV0IG5vdCB0aGUgdmlldworICAgICAgICAgIHdyYXBwZXJz
LCBldmVuIHRob3VnaCB0aGUgbmF0aXZlIHZpZXdzIGNhbiBhdXRvbmV1dGVyIGp1c3QgYnkgYXNr
aW5nIHRoZQorICAgICAgICAgIGJ1ZmZlciBpZiBpdCB3YXMgbmV1dGVyZWQgYW55dGltZSB5b3Ug
dG91Y2ggdGhlbTsgd2hpbGUgdGhlIEpTIHZpZXcKKyAgICAgICAgICB3cmFwcGVycyBhcmUgdGhl
IG9uZXMgdGhhdCB5b3UgcmVhbGx5IHdhbnQgdG8gcmVhY2ggb3V0IHRvLgorICAgICAgICAKKyAg
ICAgICAgLSBDb21tb24gY2FzZS1pbmcuIE1vc3QgdHlwZWQgYXJyYXlzIGhhdmUgb25lIGJ1ZmZl
ciBhbmQgb25lIHZpZXcsIGFuZAorICAgICAgICAgIHVzdWFsbHkgbm9ib2R5IHRvdWNoZXMgdGhl
IGJ1ZmZlci4gWWV0IHdlIGNyZWF0ZWQgYWxsIG9mIHRoYXQgc3R1ZmYKKyAgICAgICAgICBhbnl3
YXksIHVzaW5nIGRhdGEgc3RydWN0dXJlcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHlv
dSBoYWQgYSBsb3QKKyAgICAgICAgICBvZiB2aWV3cy4KKyAgICAgICAgCisgICAgICAgIC0gU2Vt
YW50aWMgZ29vZnMuIFR5cGVkIGFycmF5cyBzaG91bGQsIGluIHRoZSBmdXR1cmUsIGJlaGF2ZSBs
aWtlIEVTCisgICAgICAgICAgZmVhdHVyZXMgcmF0aGVyIHRoYW4gRE9NIGZlYXR1cmVzLCBmb3Ig
ZXhhbXBsZSB3aGVuIGl0IGNvbWVzIHRvIGV4Y2VwdGlvbnMuCisgICAgICAgICAgRmlyZWZveCBh
bHJlYWR5IGRvZXMgdGhpcyBhbmQgSSBhZ3JlZSB3aXRoIHRoZW0uCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhdGNoIGNsZWFuc2VzIG91ciBjb2RlYmFzZSBvZiB0aGVzZSBzaW5zOgorICAgICAg
ICAKKyAgICAgICAgLSBUeXBlZCBhcnJheXMgYXJlIGFsbW9zdCBlbnRpcmVseSBkZWZpbmVkIGlu
IEpTQy4gT25seSB0aGUgbGlmZWN5Y2xlCisgICAgICAgICAgbWFuYWdlbWVudCBvZiBuYXRpdmUg
cmVmZXJlbmNlcyB0byBidWZmZXJzIGlzIGxlZnQgdG8gV2ViQ29yZS4KKyAgICAgICAgCisgICAg
ICAgIC0gQWxsb2NhdGluZyBhIHR5cGVkIGFycmF5IHJlcXVpcmVzIGVpdGhlciB0d28gR0MgYWxs
b2NhdGlvbnMgKGEgY2VsbCBhbmQgYQorICAgICAgICAgIGNvcGllZCBzdG9yYWdlIHZlY3Rvcikg
b3Igb25lIEdDIGFsbG9jYXRpb24sIGEgbWFsbG9jIGFsbG9jYXRpb24sIGFuZCBhCisgICAgICAg
ICAgd2VhayBoYW5kbGUgKGEgY2VsbCBhbmQgYSBtYWxsb2MnZCBzdG9yYWdlIHZlY3RvciwgcGx1
cyBhIGZpbmFsaXplciBmb3IgdGhlCisgICAgICAgICAgbGF0dGVyKS4gVGhlIGxhdHRlciBpcyBv
bmx5IHVzZWQgZm9yIG92ZXJzaXplIGFycmF5cy4gUmVtZW1iZXIgdGhhdCBiZWZvcmUKKyAgICAg
ICAgICBpdCB3YXMgNyBhbGxvY2F0aW9ucyBubyBtYXR0ZXIgd2hhdC4KKyAgICAgICAgCisgICAg
ICAgIC0gVHlwZWQgYXJyYXlzIHJlcXVpcmUganVzdCA0IHdvcmRzIG9mIG92ZXJoZWFkOiBTdHJ1
Y3R1cmUqLCBCdXR0ZXJmbHkqLAorICAgICAgICAgIG1vZGUvbGVuZ3RoLCB2b2lkKiB2ZWN0b3Iu
IEJlZm9yZSBpdCB3YXMgYSBsb3QgbW9yZSB0aGFuIHRoYXQgLSByZW1lbWJlciwKKyAgICAgICAg
ICB0aGVyZSB3ZXJlIGZpdmUgYWRkaXRpb25hbCBvYmplY3RzIHRoYXQgZGlkIGFic29sdXRlbHkg
bm90aGluZyBmb3IgYW55Ym9keS4KKyAgICAgICAgCisgICAgICAgIC0gTmF0aXZlIHZpZXdzIGFy
ZW4ndCB0cmFja2VkIGJ5IHRoZSBidWZmZXIsIG9yIGJ5IHRoZSB3cmFwcGVycy4gVGhleSBhcmUK
KyAgICAgICAgICB0cmFuc2llbnQuIEluIHRoZSBmdXR1cmUgd2UnbGwgcHJvYmFibHkgc3dpdGNo
IHRvIG5vdCBldmVuIGhhdmluZyB0aGVtIGJlCisgICAgICAgICAgbWFsbG9jJ2QuCisgICAgICAg
IAorICAgICAgICAtIE5hdGl2ZSBhcnJheSBidWZmZXJzIGhhdmUgYW4gZWZmaWNpZW50IHdheSBv
ZiB0cmFja2luZyBhbGwgb2YgdGhlaXIgSlMgdmlldworICAgICAgICAgIHdyYXBwZXJzLCBib3Ro
IGZvciBuZXV0ZXJpbmcsIGFuZCBmb3IgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIFRoZSBHQworICAg
ICAgICAgIHNwZWNpYWwtY2FzZXMgbmF0aXZlIGFycmF5IGJ1ZmZlcnMuIFRoaXMgc2F2ZXMgYSBi
dW5jaCBvZiBncmllZjsgZm9yIGV4YW1wbGUKKyAgICAgICAgICBpdCBtZWFucyB0aGF0IGEgSlMg
dmlldyB3cmFwcGVyIGNhbiByZWZlciB0byBpdHMgYnVmZmVyIHZpYSB0aGUgYnV0dGVyZmx5LAor
ICAgICAgICAgIHdoaWNoIHdvdWxkIGJlIGRlYWQgYnkgdGhlIHRpbWUgd2Ugd2VudCB0byBmaW5h
bGl6ZS4KKyAgICAgICAgCisgICAgICAgIC0gVHlwZWQgYXJyYXkgc2VtYW50aWNzIG5vdyBtYXRj
aCBGaXJlZm94LCB3aGljaCBhbHNvIGhhcHBlbnMgdG8gYmUgd2hlcmUgdGhlCisgICAgICAgICAg
c3RhbmRhcmRzIGFyZSBnb2luZy4gVGhlIGRpc2N1c3Npb24gb24gd2Via2l0LWRldiBzZWVtZWQg
dG8gY29uZmlybSB0aGF0CisgICAgICAgICAgQ2hyb21lIGlzIGFsc28gaGVhZGluZyBpbiB0aGlz
IGRpcmVjdGlvbi4gVGhpcyBpbmNsdWRlcyBtYWtpbmcKKyAgICAgICAgICBVaW50OENsYW1wZWRB
cnJheSBub3QgYSBzdWJ0eXBlIG9mIFVpbnQ4QXJyYXksIGFuZCBnZXR0aW5nIHJpZCBvZgorICAg
ICAgICAgIEFycmF5QnVmZmVyVmlldyBhcyBhIEpTLXZpc2libGUgY29uc3RydWN0LgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBhID44eCBzcGVlZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxv
Y2F0ZSBhIGxvdCBvZiBzbWFsbCB0eXBlZCBhcnJheXMsCisgICAgICAgIGFuZCBhID42eCBzcGVl
ZC11cCBmb3IgcHJvZ3JhbXMgdGhhdCBhbGxvY2F0ZSBhIGxvdCBvZiBsYXJnZSBvbmVzLgorICAg
ICAgICAKKyAgICAgICAgQW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBvZiB0aGlzIHBhdGNoIGlzIHRo
YXQgdHlwZWQgYXJyYXlzIGFyZSBtb3N0bHkKKyAgICAgICAgaW1wbGVtZW50ZWQgdXNpbmcgdGVt
cGxhdGVzLiBUaGlzIGRlZHVwbGljYXRlcyBhIGJ1bmNoIG9mIGNvZGUsIGJ1dCBkb2VzIG1lYW4K
KyAgICAgICAgdGhhdCB3ZSBuZWVkIHNvbWUgaGFja3MgZm9yIGV4cG9ydGluZyBzX2luZm8ncyBv
ZiB0ZW1wbGF0ZSBjbGFzc2VzLiBTZWUKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCBhbmQgSlNUeXBlZEFycmF5cy5jcHAuIFRob3NlIGhhY2tzIGFyZSBmYWlybHkKKyAgICAgICAg
bG93LWltcGFjdCBjb21wYXJlZCB0byBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICAKKyAgICAg
ICAgQXV0b21ha2Ugd29yayBjb3VydGVzeSBvZiBaYW4gRG9iZXJzZWsgPHpkb2JlcnNla0BpZ2Fs
aWEuY29tPi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
U0NUeXBlZEFycmF5U3R1YnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5VmFsSW5mby5oOgorICAgICAgICAoSlNDOjpoYXNPcHRpbWl6YWJsZUlu
ZGV4aW5nRm9yQ2xhc3NJbmZvKToKKyAgICAgICAgKEpTQzo6aml0QXJyYXlNb2RlRm9yQ2xhc3NJ
bmZvKToKKyAgICAgICAgKEpTQzo6dHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3Vs
YXRpb25Gcm9tQ2xhc3NJbmZvKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjp0b1R5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp0eXBlZEFycmF5VHlwZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9Db3B5VG9rZW4uaDoK
KyAgICAgICAgKiBoZWFwL0RlZmVyR0MuaDoKKyAgICAgICAgKEpTQzo6RGVmZXJHQ0ZvckFXaGls
ZTo6RGVmZXJHQ0ZvckFXaGlsZSk6CisgICAgICAgIChKU0M6OkRlZmVyR0NGb3JBV2hpbGU6On5E
ZWZlckdDRm9yQVdoaWxlKToKKyAgICAgICAgKiBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6R0NJbmNvbWluZ1Jl
ZkNvdW50ZWQpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6fkdDSW5jb21p
bmdSZWZDb3VudGVkKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Om51bWJl
ck9mSW5jb21pbmdSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50
ZWQ6OmluY29taW5nUmVmZXJlbmNlQXQpOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291
bnRlZDo6c2luZ2xldG9uRmxhZyk6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVk
OjpoYXNWZWN0b3JPZkNlbGxzKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6
Omhhc0FueUluY29taW5nKToKKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWQ6Omhh
c1NpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkdDSW5jb21pbmdSZWZDb3VudGVkOjpzaW5nbGV0
b24pOgorICAgICAgICAoSlNDOjpHQ0luY29taW5nUmVmQ291bnRlZDo6dmVjdG9yT2ZDZWxscyk6
CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6Ojo6YWRkSW5jb21pbmdSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjo6OmZp
bHRlckluY29taW5nUmVmZXJlbmNlcyk6CisgICAgICAgICogaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZFNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ6
OnNpemUpOgorICAgICAgICAqIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KToKKyAgICAg
ICAgKEpTQzo6Ojp+R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQpOgorICAgICAgICAoSlNDOjo6OmFk
ZFJlZmVyZW5jZSk6CisgICAgICAgIChKU0M6Ojo6c3dlZXApOgorICAgICAgICAoSlNDOjo6OnJl
bW92ZUFsbCk6CisgICAgICAgIChKU0M6Ojo6cmVtb3ZlRGVhZCk6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkUmVmZXJlbmNlKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6ZXh0cmFTaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2l6ZSk6CisgICAgICAg
IChKU0M6OkhlYXA6OmNhcGFjaXR5KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgpOgorICAgICAgICAoSlND
OjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6CisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAg
IChKU0M6OkV4ZWNTdGF0ZTo6ZGF0YVZpZXdUYWJsZSk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnRyYW5zZmVy
KToKKyAgICAgICAgKiBydW50aW1lL0FycmF5QnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyOjpjcmVhdGVBZG9wdGVkKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OkFycmF5
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OmdjU2l6ZUVzdGltYXRlSW5CeXRl
cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyOjpwaW4pOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlcjo6dW5waW4pOgorICAgICAgICAoSlNDOjpBcnJheUJ1ZmZlckNvbnRlbnRzOjp0cnlB
bGxvY2F0ZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwOgorICAgICAg
ICAoSlNDOjpBcnJheUJ1ZmZlclZpZXc6OkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6
OkFycmF5QnVmZmVyVmlldzo6fkFycmF5QnVmZmVyVmlldyk6CisgICAgICAgIChKU0M6OkFycmF5
QnVmZmVyVmlldzo6c2V0TmV1dGVyYWJsZSk6CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuaDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojppc05ldXRlcmVkKToKKyAg
ICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3OjpidWZmZXIpOgorICAgICAgICAoSlNDOjpBcnJh
eUJ1ZmZlclZpZXc6OmJhc2VBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3
OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXJWaWV3Ojp2ZXJpZnlTdWJS
YW5nZSk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Y2xhbXBPZmZzZXRBbmROdW1F
bGVtZW50cyk6CisgICAgICAgIChKU0M6OkFycmF5QnVmZmVyVmlldzo6Y2FsY3VsYXRlT2Zmc2V0
QW5kTGVuZ3RoKToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0RhdGFWaWV3LmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRhdGFWaWV3OjpEYXRhVmlldyk6CisgICAgICAgIChK
U0M6OkRhdGFWaWV3OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6d3JhcCk6Cisg
ICAgICAgICogcnVudGltZS9EYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RGF0YVZp
ZXc6OmJ5dGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6Z2V0VHlwZSk6CisgICAg
ICAgIChKU0M6OkRhdGFWaWV3OjpnZXQpOgorICAgICAgICAoSlNDOjpEYXRhVmlldzo6c2V0KToK
KyAgICAgICAgKiBydW50aW1lL0Zsb2F0MzJBcnJheS5oOgorICAgICAgICAqIHJ1bnRpbWUvRmxv
YXQ2NEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXcuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6ZGF0YSk6CisgICAg
ICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0KToKKyAgICAgICAgKEpTQzo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3OjpzZXRSYW5nZSk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBl
ZEFycmF5Vmlldzo6emVyb1JhbmdlKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3Ojp6ZXJvRmlsbCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmlldzo6bGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpieXRlTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppdGVtKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjaGVja0luYm91bmREYXRhKToKKyAgICAgICAgKEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRUeXBlKToKKyAgICAgICAgKiBydW50aW1lL0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6Ojo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnN1YmFycmF5KToK
KyAgICAgICAgKEpTQzo6Ojp3cmFwKToKKyAgICAgICAgKiBydW50aW1lL0luZGV4aW5nSGVhZGVy
Lmg6CisgICAgICAgIChKU0M6OkluZGV4aW5nSGVhZGVyOjphcnJheUJ1ZmZlcik6CisgICAgICAg
IChKU0M6OkluZGV4aW5nSGVhZGVyOjpzZXRBcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9JbnQxNkFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9JbnQzMkFycmF5Lmg6CisgICAgICAg
ICogcnVudGltZS9JbnQ4QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6SlNBcnJheUJ1ZmZlcik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6cHV0KToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyOjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9K
U0FycmF5QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyOjppbXBs
KToKKyAgICAgICAgKEpTQzo6dG9BcnJheUJ1ZmZlcik6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpnZXRDYWxsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpKU0FycmF5QnVmZmVyUHJv
dG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGUpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpDb25zdHJ1Y3Rpb25Db250
ZXh0KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkpTQXJyYXlCdWZmZXJWaWV3
KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAg
ICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgor
ICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpmaW5hbGl6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnNpemVPZik6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0Ojpv
cGVyYXRvciEpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0aW9u
Q29udGV4dDo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OkNv
bnN0cnVjdGlvbkNvbnRleHQ6OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpsZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0FycmF5
QnVmZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6bW9kZSk6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpDb25zdHJ1Y3Rpb25Db250ZXh0OjpidXR0ZXJmbHkpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bW9kZSk6CisgICAgICAgIChKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3Ojp2ZWN0b3IpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6bGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKToK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3NhcnkpOgorICAg
ICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OmltcGwpOgorICAgICAgICAoSlNDOjpKU0FycmF5QnVmZmVyVmlldzo6
bmV1dGVyKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPZmZzZXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpzbG93
RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRUeXBlZEFycmF5
SW1wbCk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pT
RGF0YVZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6SlNEYXRhVmll
dyk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXc6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpT
RGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3
OjpzZXQpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3Ojp0eXBlZEltcGwpOgorICAgICAgICAo
SlNDOjpKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0Rh
dGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpKU0RhdGFW
aWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5KToKKyAgICAgICAgKEpTQzo6SlNEYXRhVmlldzo6
Z2V0VHlwZWRBcnJheUltcGwpOgorICAgICAgICAoSlNDOjpKU0RhdGFWaWV3OjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6
OkpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQ
cm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTRGF0YVZpZXdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OmdldERhdGEp
OgorICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNik6Cisg
ICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0SW50MzIpOgorICAgICAgICAoSlNDOjpk
YXRhVmlld1Byb3RvRnVuY0dldFVpbnQ4KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1
bmNHZXRVaW50MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQzMik6
CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQzMik6CisgICAgICAgIChK
U0M6OmRhdGFWaWV3UHJvdG9GdW5jR2V0RmxvYXQ2NCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3
UHJvdG9GdW5jU2V0SW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3UHJvdG9GdW5jU2V0SW50
MTYpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEludDMyKToKKyAgICAgICAg
KEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRVaW50OCk6CisgICAgICAgIChKU0M6OmRhdGFWaWV3
UHJvdG9GdW5jU2V0VWludDE2KToKKyAgICAgICAgKEpTQzo6ZGF0YVZpZXdQcm90b0Z1bmNTZXRV
aW50MzIpOgorICAgICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIpOgorICAg
ICAgICAoSlNDOjpkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0NjQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNEYXRhVmlld1Byb3RvdHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTRmxv
YXQzMkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaDog
QWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmJ5dGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Ynl0ZVNpemUpOgorICAgICAg
ICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlwZWRWZWN0b3IpOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6Y2FuR2V0SW5kZXhRdWlja2x5KToKKyAgICAg
ICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNhblNldEluZGV4UXVpY2tseSk6Cisg
ICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpnZXRJbmRleFF1aWNrbHlBc05h
dGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmdldElu
ZGV4UXVpY2tseUFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc6OmdldEluZGV4UXVpY2tseSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3OjpzZXRJbmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseVRvRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4UXVpY2tseSk6CisgICAgICAgIChK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjpjYW5BY2Nlc3NSYW5nZVF1aWNrbHkpOgorICAg
ICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6dHlwZWRJbXBsKToKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OjppbmZvKToKKyAgICAgICAgKEpTQzo6dG9O
YXRpdmVUeXBlZFZpZXcpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjo6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5
Vmlldyk6CisgICAgICAgIChKU0M6Ojo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChKU0M6
Ojo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjo6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KToKKyAgICAgICAgKEpTQzo6OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjo6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjo6OnZhbGlkYXRlUmFuZ2UpOgorICAgICAgICAo
SlNDOjo6OnNldFdpdGhTcGVjaWZpY1R5cGUpOgorICAgICAgICAoSlNDOjo6OnNldCk6CisgICAg
ICAgIChKU0M6Ojo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6OjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjo6OnB1dCk6CisgICAgICAgIChKU0M6
Ojo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjo6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAgKEpT
Qzo6OjpwdXRCeUluZGV4KToKKyAgICAgICAgKEpTQzo6OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgp
OgorICAgICAgICAoSlNDOjo6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6Ojo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6Ojo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6Ojo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChKU0M6
Ojo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ojo6Z2V0VHlwZWRBcnJh
eUltcGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5
Vmlld1Byb3RvRnVuY1NldCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY1N1YmFycmF5KToKKyAgICAgICAgKEpTQzo6OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6Ojo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjo6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Ojo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmFycmF5QnVmZmVyU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OnR5cGVkQXJyYXlTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQx
NkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQzMkFycmF5Lmg6IEFkZGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNJbnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVu
dGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZWRBcnJheVByb3RvdHlwZXMuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVk
QXJyYXlzLmNwcDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGVkQXJyYXlzLmg6IEFk
ZGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNVaW50MTZBcnJheS5oOiBBZGRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTVWludDMyQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1Vp
bnQ4QXJyYXkuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5
Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xs
ZXI6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAg
IChKU0M6OlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyOjp0b0pTKToKKyAgICAgICAgKiBydW50
aW1lL1NpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y291bGRIYXZlSW5kZXhp
bmdIZWFkZXIpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKToKKyAgICAgICAgKiBydW50aW1l
L1R5cGVkQXJyYXlBZGFwdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyYWxUeXBl
ZEFycmF5QWRhcHRvcjo6dG9OYXRpdmUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJy
YXlBZGFwdG9yOjp0b0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpJbnRlZ3JhbFR5cGVkQXJyYXlB
ZGFwdG9yOjp0b0RvdWJsZSk6CisgICAgICAgIChKU0M6OkZsb2F0VHlwZWRBcnJheUFkYXB0b3I6
OnRvTmF0aXZlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9KU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6RmxvYXRUeXBlZEFycmF5QWRhcHRvcjo6dG9Eb3VibGUpOgor
ICAgICAgICAoSlNDOjpVaW50OENsYW1wZWRBZGFwdG9yOjp0b05hdGl2ZSk6CisgICAgICAgIChK
U0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I6OnRvSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OlVpbnQ4
Q2xhbXBlZEFkYXB0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6VWludDhDbGFtcGVkQWRh
cHRvcjo6Y2xhbXApOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6OlR5cGVkQXJyYXlD
b250cm9sbGVyKToKKyAgICAgICAgKEpTQzo6VHlwZWRBcnJheUNvbnRyb2xsZXI6On5UeXBlZEFy
cmF5Q29udHJvbGxlcik6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmg6IFJlbW92
ZWQuCisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OmNs
YXNzSW5mb0ZvclR5cGUpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjp0b0luZGV4
KToKKyAgICAgICAgKEpTQzo6aXNUeXBlZFZpZXcpOgorICAgICAgICAoSlNDOjplbGVtZW50U2l6
ZSk6CisgICAgICAgIChKU0M6OmlzSW50KToKKyAgICAgICAgKEpTQzo6aXNGbG9hdCk6CisgICAg
ICAgIChKU0M6OmlzU2lnbmVkKToKKyAgICAgICAgKEpTQzo6aXNDbGFtcGVkKToKKyAgICAgICAg
KiBydW50aW1lL1R5cGVkQXJyYXlzLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvVWludDE2
QXJyYXkuaDoKKyAgICAgICAgKiBydW50aW1lL1VpbnQzMkFycmF5Lmg6CisgICAgICAgICogcnVu
dGltZS9VaW50OEFycmF5Lmg6CisgICAgICAgICogcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAg
ICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTMtMDgt
MTQgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4ZWQg
aml0IG9uIFdpbjY0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDEwIEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VS
Q0VTCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAogICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgKKyAgICBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgKKyAgICBoZWFwL0dD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCisgICAgaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaAogICAgIGhlYXAvR0NUaHJlYWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuY3BwCiAgICAgaGVhcC9IYW5kbGVTZXQuY3BwCkBAIC0yNjQsMTAgKzI2OCwxMCBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHByb2ZpbGVyL1Byb2ZpbGVOb2RlLmNw
cAogICAgIHByb2ZpbGVyL0xlZ2FjeVByb2ZpbGVyLmNwcAogCi0gICAgcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKLSAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0Fy
Z0xpc3QuY3BwCiAgICAgcnVudGltZS9Bcmd1bWVudHMuY3BwCisgICAgcnVudGltZS9BcnJheUJ1
ZmZlci5jcHAKKyAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKICAgICBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTI4Miw2ICsyODYsOCBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwCiAg
ICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAogICAgIHJ1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAK
KyAgICBydW50aW1lL0RhdGFWaWV3LmNwcAorICAgIHJ1bnRpbWUvRGF0YVZpZXcuaAogICAgIHJ1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvRGF0ZUNvbnZlcnNpb24uY3Bw
CiAgICAgcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCkBAIC0zMDYsMTAgKzMxMiwxNiBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
CiAgICAgcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCiAgICAgcnVudGltZS9KU0FycmF5LmNwcAor
ICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCisg
ICAgcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKICAgICBydW50aW1lL0pTQm91bmRGdW5j
dGlvbi5jcHAKICAgICBydW50aW1lL0pTQ0pTVmFsdWUuY3BwCiAgICAgcnVudGltZS9KU0NlbGwu
Y3BwCiAgICAgcnVudGltZS9KU0NodW5rLmNwcAorICAgIHJ1bnRpbWUvSlNEYXRhVmlldy5jcHAK
KyAgICBydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9KU0RhdGVN
YXRoLmNwcAogICAgIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHAKICAgICBydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtMzI3LDYgKzMzOSw5IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAKICAgICBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNw
cAogICAgIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKKyAgICBydW50aW1lL0pTVHlw
ZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAKKyAgICBydW50aW1lL0pTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwCisgICAgcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAogICAgIHJ1bnRpbWUvSlNWYXJp
YWJsZU9iamVjdC5jcHAKICAgICBydW50aW1lL0pTV2l0aFNjb3BlLmNwcAogICAgIHJ1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcApAQCAtMzU5LDYgKzM3NCw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCiAgICAgcnVudGltZS9SZWdF
eHBQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9TYW1wbGluZ0NvdW50ZXIuY3BwCisgICAgcnVu
dGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKICAgICBydW50aW1lL1NtYWxsU3Ry
aW5ncy5jcHAKICAgICBydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuY3BwCiAgICAgcnVudGlt
ZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAKQEAgLTM3MCw2ICszODYsOCBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKICAgICBydW50aW1lL1N5bWJvbFRhYmxlLmNwcAor
ICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCisgICAgcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5jcHAKICAgICBydW50aW1lL1ZNLmNwcAogICAgIHJ1bnRpbWUvV2F0Y2hkb2cuY3Bw
CiAgICAgcnVudGltZS9XYXRjaGRvZ05vbmUuY3BwCkBAIC0zOTEsNiArNDA5LDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX0xVVF9GSUxFUwogICAgIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAog
ICAgIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBl
LmNwcAorICAgIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1l
L05hbWVQcm90b3R5cGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgYWxsIDog
XAogICAgIERhdGVDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgRGF0ZVByb3RvdHlwZS5sdXQuaCBc
CiAgICAgRXJyb3JQcm90b3R5cGUubHV0LmggXAorICAgIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0
LmggXAogICAgIEpTT05PYmplY3QubHV0LmggXAogICAgIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIFwK
ICAgICBLZXl3b3JkTG9va3VwLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZl
ZFNvdXJjZXMucHJpCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBAIExVVF9G
SUxFUyArPSBcCiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1l
L0RhdGVQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBcCisg
ICAgcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUv
TWF0aE9iamVjdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw2ICsxNyw3IEBAIGphdmFzY3Jp
cHRjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29y
ZS9EYXRlUHJvdG90eXBlLmx1dC5oIFwKIAlEZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0Q29yZS9F
cnJvclByb3RvdHlwZS5sdXQuaCBcCisJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUvSlNE
YXRhVmlld1Byb3RvdHlwZS5sdXQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENvcmUv
SlNHbG9iYWxPYmplY3QubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL0pT
T05PYmplY3QubHV0LmggXAogCURlcml2ZWRTb3VyY2VzL0phdmFTY3JpcHRDb3JlL01hdGhPYmpl
Y3QubHV0LmggXApAQCAtMzg0LDYgKzM4NSwxMCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxl
QmxvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlQmxvY2tJbmxpbmVz
LmggXApAQCAtNjg1LDYgKzY5MCw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1Y3REYXRhLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0YVZpZXcuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0
cnVjdG9yLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVj
dG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb252ZXJzaW9uLmNw
cCBcCkBAIC03MTksNiArNzI2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR0NBY3Rpdml0eUNhbGxiYWNrLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcCBcCkBAIC03NDQsMTIgKzc1MywyNyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FQSVZhbHVlV3JhcHBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0RhdGFWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZp
ZXdQcm90b3R5cGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3UHJvdG90eXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1h
dGguY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEZXN0cnVjdGlibGVPYmplY3QuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDMyQXJyYXkuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcCBcCkBAIC03NTgsMTIgKzc4MiwyMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb25JbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbnQxNkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJB
cnJheS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhBcnJheS5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNOb3RBbk9iamVjdC5jcHAgXApAQCAtNzc2LDYgKzgwOSwxNiBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIFwKKwlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1VpbnQxNkFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVWludDMyQXJyYXkuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNV
aW50OEFycmF5LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFt
cGVkQXJyYXkuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXaXRoU2NvcGUu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTmFtZVNjb3BlLmggXApAQCAtODY2LDYg
KzkwOSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlamVjdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ0NvdW50ZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
bWFsbFN0cmluZ3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5jcHAgXApAQCAtODkyLDggKzkzNywxNCBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RyYWNpbmcuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZWRBcnJheUFkYXB0b3JzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVkQXJyYXlCYXNlLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheVR5cGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlZEFycmF5VHlwZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5cy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZBcnJheS5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VaW50MTZXaXRoRnJhY3Rpb24uaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVWludDMyQXJyYXkuaCBcCkBAIC05NjcsNSAr
MTAxOCw0IEBAIFByb2dyYW1zX0xMSW50T2Zmc2V0c0V4dHJhY3Rvcl9TT1VSQ0VTID0KIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcAogCiBQcm9n
cmFtc19qc2NfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfU09VUkNFUyA9IFwKLQlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJheVN0dWJzLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlNDVHlwZWRBcnJh
eVN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0pTQ1R5cGVkQXJy
YXlTdHVicy5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSlND
VHlwZWRBcnJheVN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBKU0NUeXBl
ZEFycmF5U3R1YnNfaAotI2RlZmluZSBKU0NUeXBlZEFycmF5U3R1YnNfaAotCi0jaW5jbHVkZSAi
RmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiRmxvYXQ2NEFycmF5LmgiCi0jaW5jbHVkZSAiSW50
MTZBcnJheS5oIgotI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJJbnQ4QXJyYXku
aCIKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFBy
b3RvdHlwZS5oIgotI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJVaW50MTZBcnJh
eS5oIgotI2luY2x1ZGUgIlVpbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiVWludDhBcnJheS5oIgot
I2luY2x1ZGUgIlVpbnQ4Q2xhbXBlZEFycmF5LmgiCi0KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLSNkZWZpbmUgVFlQRURfQVJSQVkobmFtZSwgdHlw
ZSkgXAotY2xhc3MgSlMjI25hbWUjI0FycmF5IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
IHsgXAotcHVibGljOiBcCi0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOyBc
Ci0gICAgc3RhdGljIEpTIyNuYW1lIyNBcnJheSogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJy
YXk+IGltcGwpIFwKLSAgICB7IFwKLSAgICAgICAgSlMjI25hbWUjI0FycmF5KiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTIyNuYW1lIyNBcnJheT4oZ2xvYmFsT2JqZWN0
LT52bSgpLmhlYXApKSBKUyMjbmFtZSMjQXJyYXkoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGlt
cGwpOyBcCi0gICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsg
XAotICAgICAgICByZXR1cm4gcHRyOyBcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1wKLSAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYpO1wKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTtcCi0gICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIGJvb2wpO1wKLSAgICBERUNMQVJFX0lORk87XAotXAotICAgIHN0YXRpYyBKU0M6OlN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpXAotICAgIHtcCi0gICAgICAg
IHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTtcCi0gICAgfVwKLVwKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtc
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTtcCi1cCi0gICAgc3RhdGljIGNvbnN0IEpTQzo6VHlwZWRB
cnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gSlNDOjpUeXBlZEFycmF5IyNuYW1lO1wK
LSAgICB1aW50MzJfdCBtX3N0b3JhZ2VMZW5ndGg7XAotICAgIHR5cGUqIG1fc3RvcmFnZTtcCi0g
ICAgUmVmUHRyPG5hbWUjI0FycmF5PiBtX2ltcGw7XAotcHJvdGVjdGVkOlwKLSAgICBKUyMjbmFt
ZSMjQXJyYXkoSlNDOjpTdHJ1Y3R1cmUqLCBKU0dsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8bmFt
ZSMjQXJyYXk+KTtcCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7XAotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7IFwKLSAgICBKU0M6OkpTVmFsdWUgZ2V0QnlJbmRleChKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4KTtcCi0gICAgdm9pZCBpbmRleFNldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpO1wKLX07XAotXAotY29u
c3QgQ2xhc3NJbmZvIEpTIyNuYW1lIyNBcnJheTo6c19pbmZvID0geyAjbmFtZSAiQXJyYXkiICwg
JkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjbmFtZSMjQXJyYXkp
IH07XAotXAotSlMjI25hbWUjI0FycmF5OjpKUyMjbmFtZSMjQXJyYXkoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8bmFtZSMjQXJy
YXk+IGltcGwpXAotICAgIDogQmFzZShnbG9iYWxPYmplY3QtPnZtKCksIHN0cnVjdHVyZSlcCi0g
ICAgLCBtX2ltcGwoaW1wbClcCi17XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pXAote1wKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7XAot
ICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yIGRlc2NyaXB0b3IoJkpTIyNuYW1lIyNBcnJheTo6c19p
bmZvLCBPQkpFQ1RfT0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2UpLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlMjI25hbWUjI0FycmF5LCBtX3N0b3JhZ2VMZW5ndGgpKTtcCi0gICAgdm0ucmVn
aXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihtX2ltcGwuZ2V0KCksIGRlc2NyaXB0b3IpO1wKLSAg
ICBtX3N0b3JhZ2UgPSBtX2ltcGwtPmRhdGEoKTtcCi0gICAgbV9zdG9yYWdlTGVuZ3RoID0gbV9p
bXBsLT5sZW5ndGgoKTtcCi0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5n
dGgsIGpzTnVtYmVyKG1fc3RvcmFnZUxlbmd0aCksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsgXAotICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTtcCi19XAotXAotYm9vbCBK
UyMjbmFtZSMjQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFt
ZSMjQXJyYXkqPihvYmplY3QpO1wKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7XAotICAgIHVuc2lnbmVkIGluZGV4ID0gcHJvcGVydHlOYW1lLmFzSW5k
ZXgoKTtcCi0gICAgaWYgKGluZGV4IDwgdGhpc09iamVjdC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAot
ICAgICAgICBBU1NFUlQoaW5kZXggIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KTtcCi0gICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCkpO1wK
LSAgICAgICAgcmV0dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7XAotfVwKLVwKLWJv
b2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25lZCBpbmRl
eCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCA8IHRoaXNPYmplY3Qt
Pm1fc3RvcmFnZUxlbmd0aCkge1wKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IFByb3BlcnR5TmFt
ZTo6Tm90QW5JbmRleCk7XAotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09i
amVjdC0+Z2V0QnlJbmRleChleGVjLCBpbmRleCksIERvbnREZWxldGUpO1wKLSAgICAgICAgcmV0
dXJuIHRydWU7XAotICAgIH1cCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7XAotfVwKLVwKLWJv
b2wgSlMjI25hbWUjI0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpXAote1wKLSAgICBKUyMjbmFtZSMjQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlMjI25hbWUjI0FycmF5Kj4ob2JqZWN0KTtcCi0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICBpZiAocHJvcGVydHlOYW1lIDwgdGhpc09iamVj
dC0+bV9zdG9yYWdlTGVuZ3RoKSB7XAotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qt
PmdldEJ5SW5kZXgoZXhlYywgcHJvcGVydHlOYW1lKSk7XAotICAgICAgICByZXR1cm4gdHJ1ZTtc
Ci0gICAgfVwKLSAgICByZXR1cm4gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJv
cGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVy
dHlOYW1lKSwgc2xvdCk7XAotfVwKLVwKLXZvaWQgSlMjI25hbWUjI0FycmF5OjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdClcCi17XAotICAgIEpTIyNuYW1lIyNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7XAotICAgIGlmIChpbmRleCAhPSBQcm9w
ZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpIHtcCi0gICAgICAgIHRoaXNPYmplY3QtPmluZGV4U2V0dGVy
KGV4ZWMsIGluZGV4LCB2YWx1ZSk7XAotICAgICAgICByZXR1cm47XAotICAgIH1cCi0gICAgQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpO1wKLX1c
Ci1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpIFwKLXtcCi0gICAgbV9pbXBs
LT5zZXQoaW5kZXgsIHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTtcCi19XAotXAotdm9pZCBKUyMjbmFt
ZSMjQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbClcCi17XAotICAgIEpTIyNuYW1l
IyNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihjZWxsKTtcCi0g
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1wKLSAgICB0
aGlzT2JqZWN0LT5pbmRleFNldHRlcihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcCi0gICAg
cmV0dXJuO1wKLX1cCi1cCi12b2lkIEpTIyNuYW1lIyNBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcCi17XAotICAgIEpTIyNuYW1lIyNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKUyMjbmFtZSMjQXJyYXkqPihvYmplY3QpO1wKLSAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3N0b3JhZ2VMZW5ndGg7ICsraSlc
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpO1wK
LSAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpO1wKLX1cCi1cCi1KU1ZhbHVlIEpTIyNuYW1lIyNBcnJheTo6Z2V0QnlJbmRl
eChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleClcCi17XAotICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpcywgaW5mbygpKTtcCi0gICAgdHlwZSByZXN1bHQgPSBtX2ltcGwtPml0ZW0o
aW5kZXgpO1wKLSAgICBpZiAoc3RkOjppc25hbigoZG91YmxlKXJlc3VsdCkpXAotICAgICAgICBy
ZXR1cm4ganNOYU4oKTtcCi0gICAgcmV0dXJuIEpTVmFsdWUocmVzdWx0KTtcCi19XAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMjI25hbWUjI0FycmF5KEV4
ZWNTdGF0ZSogY2FsbEZyYW1lKSB7IFwKLSAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCkgPCAxKSBcCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
IFwKLSAgICBpbnQzMl90IGxlbmd0aCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9JbnQzMihj
YWxsRnJhbWUpOyBcCi0gICAgaWYgKGxlbmd0aCA8IDApIFwKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsgXAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
SlMjI25hbWUjI0FycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJh
bWUtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPm9iamVjdFByb3RvdHlwZSgpKTsgXAotICAgIFJlZlB0cjxuYW1lIyNBcnJheT4gYnVmZmVy
ID0gbmFtZSMjQXJyYXk6OmNyZWF0ZShsZW5ndGgpOyBcCi0gICAgaWYgKCFidWZmZXIpIFwKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGNyZWF0ZVJhbmdlRXJyb3IoY2Fs
bEZyYW1lLCAiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUg
aW50ZWdlci4iKSk7IFwKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIyNuYW1lIyNBcnJh
eTo6Y3JlYXRlKHN0cnVjdHVyZSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGJ1
ZmZlci5yZWxlYXNlKCkpKTsgXAotfQotCi1UWVBFRF9BUlJBWShVaW50OCwgdWludDhfdCk7Ci1U
WVBFRF9BUlJBWShVaW50OENsYW1wZWQsIHVpbnQ4X3QpOwotVFlQRURfQVJSQVkoVWludDE2LCB1
aW50MTZfdCk7Ci1UWVBFRF9BUlJBWShVaW50MzIsIHVpbnQzMl90KTsKLVRZUEVEX0FSUkFZKElu
dDgsIGludDhfdCk7Ci1UWVBFRF9BUlJBWShJbnQxNiwgaW50MTZfdCk7Ci1UWVBFRF9BUlJBWShJ
bnQzMiwgaW50MzJfdCk7Ci1UWVBFRF9BUlJBWShGbG9hdDMyLCBmbG9hdCk7Ci1UWVBFRF9BUlJB
WShGbG9hdDY0LCBkb3VibGUpOwotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksMTAgKzI1OSwxMCBAQCBTT1VSQ0VTICs9IFwK
ICAgICBwcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcCBcCiAgICAgcHJvZmlsZXIvUHJvZmls
ZU5vZGUuY3BwIFwKICAgICBwcm9maWxlci9MZWdhY3lQcm9maWxlci5jcHAgXAotICAgIHJ1bnRp
bWUvQXJyYXlCdWZmZXIuY3BwIFwKLSAgICBydW50aW1lL0FycmF5QnVmZmVyVmlldy5jcHAgXAog
ICAgIHJ1bnRpbWUvQXJnTGlzdC5jcHAgXAogICAgIHJ1bnRpbWUvQXJndW1lbnRzLmNwcCBcCisg
ICAgcnVudGltZS9BcnJheUJ1ZmZlci5jcHAgXAorICAgIHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
LmNwcCBcCiAgICAgcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9B
cnJheVByb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcCBc
CkBAIC0yNzcsMTMgKzI3NywxNCBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL0NvbXBpbGF0
aW9uUmVzdWx0LmNwcCBcCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcCBcCiAgICAgcnVudGlt
ZS9Db25zdHJ1Y3REYXRhLmNwcCBcCisgICAgcnVudGltZS9EYXRhVmlldy5jcHAgXAogICAgIHJ1
bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9EYXRlQ29udmVyc2lvbi5j
cHAgXAogICAgIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcCBcCiAgICAgcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9EdW1wQ29udGV4dC5jcHAgXAotICAgIHJ1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvRXJyb3IuY3BwIFwKKyAgICBydW50
aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
IFwKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmNwcCBcCkBAIC0yOTMsMzcgKzI5NCw0NCBAQCBTT1VSQ0VTICs9IFwKICAgICBy
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9HQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwIFwKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAgXAotICAgIHJ1bnRpbWUv
T3B0aW9ucy5jcHAgXAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogICAgIHJ1bnRpbWUv
SW5kZXhpbmdUeXBlLmNwcCBcCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcCBc
CiAgICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBcCiAgICAgcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcCBcCi0gICAgcnVudGltZS9KU0FjdGl2YXRpb24uY3BwIFwKICAg
ICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcCBcCisgICAgcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwIFwKICAgICBydW50aW1lL0pTQXJyYXkuY3BwIFwKKyAgICBydW50aW1lL0pTQXJyYXlC
dWZmZXIuY3BwIFwKKyAgICBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgXAorICAgIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXcuY3BwIFwKKyAgICBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNDZWxsLmNwcCBcCisg
ICAgcnVudGltZS9KU0RhdGFWaWV3LmNwcCBcCisgICAgcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmNwcCBcCiAgICAgcnVudGltZS9KU0RhdGVNYXRoLmNwcCBcCiAgICAgcnVudGltZS9KU0Z1
bmN0aW9uLmNwcCBcCi0gICAgcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwIFwKLSAgICBydW50
aW1lL1ZNLmNwcCBcCiAgICAgcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgXAogICAgIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIFwKLSAgICBydW50aW1lL0pTUHJveHkuY3Bw
IFwKICAgICBydW50aW1lL0pTTG9jay5jcHAgXAorICAgIHJ1bnRpbWUvSlNOYW1lU2NvcGUuY3Bw
IFwKICAgICBydW50aW1lL0pTTm90QW5PYmplY3QuY3BwIFwKLSAgICBydW50aW1lL0pTT2JqZWN0
LmNwcCBcCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCisgICAgcnVudGltZS9KU09iamVj
dC5jcHAgXAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAotICAgIHJ1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAotICAgIHJ1bnRpbWUvSlNXaXRo
U2NvcGUuY3BwIFwKLSAgICBydW50aW1lL0pTTmFtZVNjb3BlLmNwcCBcCisgICAgcnVudGltZS9K
U1Byb3h5LmNwcCBcCiAgICAgcnVudGltZS9KU1Njb3BlLmNwcCBcCisgICAgcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAog
ICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwIFwKICAgICBydW50aW1lL0pTU3ltYm9sVGFi
bGVPYmplY3QuY3BwIFwKLSAgICBydW50aW1lL0pTQ0pTVmFsdWUuY3BwIFwKKyAgICBydW50aW1l
L0pTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgXAorICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHAgXAorICAgIHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5jcHAgXAogICAgIHJ1
bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAorICAgIHJ1bnRpbWUvSlNXaXRoU2NvcGUuY3Bw
IFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvTGl0ZXJh
bFBhcnNlci5jcHAgXAogICAgIHJ1bnRpbWUvTG9va3VwLmNwcCBcCkBAIC0zNDAsMTkgKzM0OCwy
MSBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcCBcCiAg
ICAgcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL09wZXJhdGlvbnMu
Y3BwIFwKKyAgICBydW50aW1lL09wdGlvbnMuY3BwIFwKICAgICBydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwIFwKICAgICBy
dW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAg
XAogICAgIHJ1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCBcCi0gICAgcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5jcHAgXAorICAgIHJ1bnRpbWUvUmVnRXhwLmNwcCBcCisgICAgcnVudGltZS9SZWdF
eHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBcCisgICAg
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwTWF0Y2hl
c0FycmF5LmNwcCBcCi0gICAgcnVudGltZS9SZWdFeHAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcCBcCi0gICAgcnVu
dGltZS9SZWdFeHBDYWNoZS5jcHAgXAogICAgIHJ1bnRpbWUvU2FtcGxpbmdDb3VudGVyLmNwcCBc
CisgICAgcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgXAogICAgIHJ1bnRp
bWUvU21hbGxTdHJpbmdzLmNwcCBcCiAgICAgcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmNw
cCBcCiAgICAgcnVudGltZS9TdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgXApAQCAtMzYwLDEwICsz
NzAsMTMgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9TdHJpbmdPYmplY3QuY3BwIFwKICAg
ICBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAgXAogICAgIHJ1bnRpbWUvU3RyaW5nUmVjdXJz
aW9uQ2hlY2tlci5jcHAgXAotICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwIFwKICAgICBy
dW50aW1lL1N0cnVjdHVyZS5jcHAgXAorICAgIHJ1bnRpbWUvU3RydWN0dXJlQ2hhaW4uY3BwIFwK
ICAgICBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcCBcCiAgICAgcnVudGltZS9TeW1ib2xU
YWJsZS5jcHAgXAorICAgIHJ1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKyAgICBy
dW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcCBcCisgICAgcnVudGltZS9WTS5jcHAgXAogICAgIHJ1
bnRpbWUvV2F0Y2hkb2cuY3BwIFwKICAgICBydW50aW1lL1dhdGNoZG9nTm9uZS5jcHAgXAogICAg
IHRvb2xzL0NvZGVQcm9maWxlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNp
b24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAi
SlNDVHlwZWRBcnJheVN0dWJzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTTG9jay5oIgogI2luY2x1ZGUgIkpTUHJveHkuaCIKQEAgLTIzOCwxNiArMjM3LDYgQEAgcHJv
dGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNsZWFyU2FtcGxpbmdGbGFncyIsIGZ1
bmN0aW9uQ2xlYXJTYW1wbGluZ0ZsYWdzLCAxKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAg
YWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiVWludDhBcnJheSIsIGNvbnN0cnVjdEpTVWlu
dDhBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQ4
Q2xhbXBlZEFycmF5IiwgY29uc3RydWN0SlNVaW50OENsYW1wZWRBcnJheSwgMSk7Ci0gICAgICAg
IGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVpbnQxNkFycmF5IiwgY29uc3RydWN0SlNV
aW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIlVp
bnQzMkFycmF5IiwgY29uc3RydWN0SlNVaW50MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0
cnVjdGFibGVGdW5jdGlvbih2bSwgIkludDhBcnJheSIsIGNvbnN0cnVjdEpTSW50OEFycmF5LCAx
KTsKLSAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiSW50MTZBcnJheSIsIGNv
bnN0cnVjdEpTSW50MTZBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlv
bih2bSwgIkludDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0ludDMyQXJyYXksIDEpOwotICAgICAgICBh
ZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJGbG9hdDMyQXJyYXkiLCBjb25zdHJ1Y3RKU0Zs
b2F0MzJBcnJheSwgMSk7Ci0gICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwgIkZs
b2F0NjRBcnJheSIsIGNvbnN0cnVjdEpTRmxvYXQ2NEFycmF5LCAxKTsKLQogICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsRXhlYygpLCAwKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsRXhlYygpLCBpLCBqc1N0cmluZyhnbG9i
YWxFeGVjKCksIGFyZ3VtZW50c1tpXSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MTAsMTAgKzQxMCwxMCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
Llxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyLmNwcCIgLz4NCi0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmlldy5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmdMaXN0LmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50cy5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZpZXcuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb25zdHJ1Y3Rvci5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheVByb3RvdHlwZS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuQ29uc3Ry
dWN0b3IuY3BwIiAvPg0KQEAgLTQyNyw2ICs0MjcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbXBsZXRpb24uY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0YS5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0b3IuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZlcnNpb24uY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmNwcCIgLz4NCkBA
IC00NDYsMTIgKzQ0NywxOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5jcHAiIC8+DQotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRpb24uY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXkuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlci5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Fy
cmF5QnVmZmVyVmlldy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0JvdW5kRnVuY3Rpb24uY3BwIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNDZWxsLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTQ0pTVmFsdWUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNDZWxsLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0
YVZpZXcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0RhdGVNYXRoLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTRnVuY3Rpb24uY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNHbG9iYWxPYmplY3QuY3BwIiAvPg0KQEAgLTQ1OSw4ICs0NjYsOCBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xvY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOb3RBbk9iamVjdC5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU09OT2JqZWN0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU1Njb3BlLmNwcCIgLz4NCkBAIC00NjgsNiArNDc1LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmcuY3BwIiAvPg0KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdKb2luZXIuY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlD
b25zdHJ1Y3RvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXaXRoU2NvcGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFwcGVyT2JqZWN0LmNwcCIgLz4NCkBAIC00OTksNiArNTA5
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwT2JqZWN0LmNw
cCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFByb3RvdHlw
ZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTYW1wbGluZ0Nv
dW50ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU21hbGxTdHJpbmdzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIiAvPg0KQEAgLTUxMCw2
ICs1MjEsOCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVD
aGFpbi5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
eW1ib2xUYWJsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxUeXBlZEFycmF5VHlwZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxWTS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxXYXRjaGRvZy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxX
YXRjaGRvZ05vbmUuY3BwIiAvPg0KQEAgLTUyNyw2ICs1NDAsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXERhdGVQcm90b3R5cGUubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEVycm9yUHJvdG90eXBlLmx1dC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmozMlwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqMzJcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNv
dXJjZXNcSlNHbG9iYWxPYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEpTT05PYmplY3QubHV0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iajMyXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXExl
eGVyLmx1dC5oIiAvPg0KQEAgLTc3MywxMCArNzg3LDEwIEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oIiAv
Pg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXIuaCIgLz4N
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmlldy5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlzdC5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJWaWV3LmgiIC8+DQogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0cnVjdG9yLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnZlbnRpb25zLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheVByb3RvdHlwZS5oIiAvPg0K
QEAgLTc5OCw2ICs4MTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxD
b21tb25TbG93UGF0aHNFeGNlcHRpb25zLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxDb25zdHJ1Y3REYXRhLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxEYXRhVmlldy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRGF0ZUNvbnN0cnVjdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRGF0ZUluc3RhbmNlLmgiIC8+DQpAQCAtODE1LDYgKzgzMCw4IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uQ29uc3RydWN0b3IuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHQ0FjdGl2aXR5Q2FsbGJhY2suaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcR2V0dGVyU2V0dGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJZGVudGlmaWVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxJbmRleGluZ0hlYWRlci5oIiAvPg0KQEAgLTgyNywyNCArODQ0LDQyIEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5oIiAvPg0KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3JhcHBlci5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5LmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlC
dWZmZXJWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNDZWxsLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0NKU1ZhbHVlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0NKU1ZhbHVlSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNDZWxsLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Rh
dGFWaWV3LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0RhdGFW
aWV3UHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0RhdGVNYXRoLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Rl
c3RydWN0aWJsZU9iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNFeHBvcnRNYWNyb3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTRmxvYXQzMkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0Zsb2F0NjRBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNGdW5jdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQxNkFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0ludDMyQXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTSW50OEFycmF5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0xvY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTTmFtZVNjb3BlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU05vdEFuT2JqZWN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU09iamVjdC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNPTk9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTUHJveHkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
U2NvcGUuaCIgLz4NCkBAIC04NTUsNiArODkwLDEzIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNUeXBlSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQxNkFycmF5LmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQzMkFycmF5LmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJyYXkuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDhDbGFtcGVkQXJyYXkuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuaCIgLz4N
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2l0aFNjb3BlLmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dyYXBwZXJPYmplY3QuaCIgLz4N
CkBAIC04OTcsNiArOTM5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
UmVnRXhwUHJvdG90eXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxSZWplY3QuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNhbXBs
aW5nQ291bnRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2lt
cGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFNtYWxsU3RyaW5ncy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIgLz4NCkBAIC05MTEsNyArOTU0
LDExIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3lt
Ym9sVGFibGUuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRyYWNp
bmcuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVkQXJyYXlE
ZXNjcmlwdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBl
ZEFycmF5QWRhcHRvcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XFR5cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxUeXBlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFR5cGVkQXJyYXlzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxVaW50MTZBcnJheS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVWludDE2V2l0aEZyYWN0aW9uLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDYgKzExOCw1NiBAQAogCQkwRjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhp
dFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJE
QTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdB
REQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyog
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZBQzE3QjZCNTNGMDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZB
RTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFBMTdCNkI1M0QwMEE3
QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkFCMTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZERTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2
QjAxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCAqLzsgfTsKKwkJMEYyQjY2REYxN0I2
QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMTE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZF
MDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCMjE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVy
aWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkIzMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyQjY2RTIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OworCQkwRjJCNjZFMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZFNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovOyB9
OworCQkwRjJCNjZFNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZC
NzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RTYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjgxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwICovOyB9OworCQkwRjJCNjZFNzE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QjY2QkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCAqLzsgfTsKKwkJ
MEYyQjY2RTkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCQjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZCQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QkQxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXcuY3BwICovOyB9OworCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZFRDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNE
YXRhVmlld1Byb3RvdHlwZS5jcHAgKi87IH07CisJCTBGMkI2NkVFMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0RhdGFWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZDMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3Rv
dHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFy
cmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZDMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDY0QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RjgxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTSW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkI2NkY5
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2
NkNDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovOyB9
OworCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZD
RDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY2RkMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwICovOyB9OworCQkwRjJCNjZGRDE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlw
ZWRBcnJheVByb3RvdHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZE
MDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi87IH07CisJCTBGMkI2NkZG
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNU
eXBlZEFycmF5cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMkI2NzAwMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQyMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENs
YW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwMjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWlu
dDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCNjcwMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2RDUxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCNjcwNDE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2RDYxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCAqLzsgfTsKKwkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZENzE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjJCNjcwNjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEODE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQjY3MDcxN0I2QjVBQjAwQTdBRTNG
IC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgKi87IH07CisJCTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBl
ZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2REExN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QjY3MDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2REMxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLzsgfTsKKwkJMEYyQjY3MEIxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRB
MDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MkJEQzIxMTUxRTgwM0IwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzFGMTUxRTgwMzgwMENEODkx
MCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMTY2LDYgKzIxNiw3IEBACiAJCTBGNDY4MEQ0MTRCQkQyNDkwMEJG
RTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2Fs
bFJldHVyblZhbHVlLmNwcCAqLzsgfTsKIAkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhv
c3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0
OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDkzQUY4MTZEMENBRDEwMDg0NTA4
QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgKi87IH07CisJCTBGNEI5NERDMTdCOUYwNzUwMEREMDNB
NCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENF
M0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENF
M0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NUMxOTMxNzI3NkU0NjAwQ0VB
QkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3BwICovOyB9OwpAQCAtMzQ5LDcgKzQwMCw2IEBACiAJ
CTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHQ29tbW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJG
MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBE
NDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZF
QjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVkQXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBB
QjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFj
cm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsg
fTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
RkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICov
OyB9OwogCQkwRkVGQzlBQjE2ODFBM0I2MDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhv
bGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
RkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI0LDggKzg3
NCw2IEBACiAJCUE3QThBRjNBMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJCMTdBREI1RjMw
MDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQjE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkMx
N0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdBOEFGMkQxN0FEQjVGMzAwNUFCMTc0IC8qIEludDMyQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIx
NzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMkUxN0FEQjVGMzAwNUFCMTc0IC8qIEludGVncmFs
VHlwZWRBcnJheUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlBN0E4QUYzRTE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjJGMTdB
REI1RjMwMDVBQjE3NCAvKiBUeXBlZEFycmF5QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QThBRjQwMTdBREI1RjMwMDVB
QjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBl
ZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdBOEFGNDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E4QUYzMjE3QURCNUYzMDA1QUIx
NzQgLyogVWludDE2QXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMTIwNyw2ICsxMjU1LDU2IEBACiAJCTBGMjM1QkVBMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcv
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZD
b3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NJbmNvbWluZ1JlZkNvdW50
ZWRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkFBMTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMDE3QjZCNUFCMDBBN0FFM0YgLyogRGF0
YVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0YVZpZXcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCMTE3QjZCNUFCMDBBN0FF
M0YgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YVZp
ZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QjIxN0I2QjVBQjAwQTdB
RTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHZW5lcmljVHlwZWRBcnJheVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyQjY2QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY1R5cGVkQXJy
YXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQjY2QjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkI4MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZCOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkJBMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmll
dy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCQzE3QjZCNUFCMDBBN0FF
M0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjJCNjZCRDE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QkUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlldy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZCRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNEYXRhVmlld1Byb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RhdGFWaWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2QzAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNEYXRhVmlld1Byb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNG
bG9hdDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDMy
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRmxvYXQ2NEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkMzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkM1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNjE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZDNzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50OEFycmF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0lu
dDE2QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQxNkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0ludDMyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJ
bnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNDMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2Q0QxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQjY2Q0UxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5UHJvdG90
eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkNGMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQjY2RDAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQxMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlw
ZWRBcnJheXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDIxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDhBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1VpbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2
RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OENsYW1wZWRBcnJheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U1VpbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVWludDMy
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDYxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNp
bXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkI2NkQ4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUFkYXB0b3JzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2NkQ5MTdCNkI1QUIwMEE3QUUzRiAvKiBU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkI2NkRBMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5Q29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJh
eXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2REMxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFR5cGVkQXJyYXlUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQjY2REQxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3Bw
OyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZH
Rml4dXBQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4
MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0luc2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI1NCw2ICsxMzUyLDcgQEAKIAkJMEY0
NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhv
c3RDYWxsUmV0dXJuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNB
RjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY0Qjk0REIxN0I5RjA3NTAwREQwM0E0IC8qIFR5cGVkQXJyYXlJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVkQXJyYXlJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUFGMTYxM0MxRkIwMENFM0Uy
NSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjU1QzE5MzE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVl
LmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE0NTEsNyArMTU1MCw2IEBACiAJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdDb21tb25EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NvbW1vbkRhdGEuaDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBw
YXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyog
VHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHlwZWRBcnJheURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
QjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRK
dW1wUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUZDOUE4MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaDsgcGF0aCA9
IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xODgyLDcgKzE5ODAsNiBAQAogCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyog
SklUQXJpdGhtZXRpYzMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVEFyaXRobWV0aWMzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3NjdCNUIzMTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzY3QjVCNDE3QTBCOTY1
MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0
dWJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1R5cGVkQXJyYXlTdHVi
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzZDNTE3NDExODI3NDhEMDA3MTVC
MDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNJbnRlcmZhY2VKSVQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2RjU0QTIx
M0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdEhlYXAuY3BwOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xOTI3LDggKzIwMjQsNiBAQAogCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50
OEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDhBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyog
SW50MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnQxNkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3
NCAvKiBJbnQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludDMy
QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTdBOEFGMkUxN0FEQjVGMzAw
NUFCMTc0IC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBN0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZWRBcnJheUJhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzAxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWludDhBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhDbGFtcGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVWlu
dDhDbGFtcGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdBOEFGMzIx
N0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVpbnQxNkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjYwLDcgKzIzNTUsNiBAQAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3Bw
ICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKIAkJCQlG
NUMyOTBFNjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLywKLQkJ
CQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkgLyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8sCiAJ
CQkJOTM3QjYzQ0MwOUU3NjZEMjAwQTY3MUREIC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJ
CQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkg
Ki8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKQEAgLTI1NTYsNiAr
MjY1MCwxMCBAQAogCQkJCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tz
LmNwcCAqLywKIAkJCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5o
ICovLAogCQkJCUJDQkUyQ0FEMTRFOTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCAqLywK
KwkJCQkwRjJCNjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAq
LywKKwkJCQkwRjJCNjZBOTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJ
bmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QUExN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmggKi8sCisJCQkJMEYyQjY2QUIxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5j
b21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oICovLAogCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8sCiAJCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8q
IEdDVGhyZWFkLmggKi8sCiAJCQkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5jcHAgKi8sCkBAIC0yODczLDYgKzI5NzEsOCBAQAogCQkJCTBGREIyQ0U5MTc0
ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oICovLAogCQkJCUJDQTYyREZGMEUy
ODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRhLmNwcCAqLywKIAkJCQlCQzhGM0NDRjBEQUYx
N0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5oICovLAorCQkJCTBGMkI2NkIwMTdCNkI1QUIw
MEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCisJCQkJMEYyQjY2QjExN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmggKi8sCiAJCQkJQkNEMjAzNDUwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVD
b25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkNEMjAzNDYwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVD
b25zdHJ1Y3Rvci5oICovLAogCQkJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29u
dmVyc2lvbi5jcHAgKi8sCkBAIC0yOTA3LDYgKzMwMDcsOCBAQAogCQkJCUY2OTJBODVEMDI1NTU5
N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5oICovLAogCQkJCUMyRDU4QzMzMTU5MTJG
RUUwMDIxQTg0NCAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovLAogCQkJCURERjdBQkQyMTFG
NjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkwRjJCNjZCMjE3
QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCisJCQkJMEYyQjY2
QjMxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCAqLywK
IAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJ
CQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCiAJCQkJOTMz
QTM0OUQwMzhBRTgwRjAwODYzNUNFIC8qIElkZW50aWZpZXIuY3BwICovLApAQCAtMjkyMCw3ICsz
MDIyLDYgQEAKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICov
LAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCiAJCQkJ
QTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAotCQkJCUE3QThBRjJF
MTdBREI1RjMwMDVBQjE3NCAvKiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmggKi8sCiAJCQkJQTc4
ODUzRjcxNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovLAog
CQkJCUE3ODg1M0Y4MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgg
Ki8sCiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAwREY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3Bw
ICovLApAQCAtMjkzMCw2ICszMDMxLDE1IEBACiAJCQkJMTREQTgxOEUwRDk5RkQyMDAwQjBBNEZC
IC8qIEpTQWN0aXZhdGlvbi5oICovLAogCQkJCTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBK
U0FycmF5LmNwcCAqLywKIAkJCQk5Mzg3NzJFNTAzOEJGRTE5MDA4NjM1Q0UgLyogSlNBcnJheS5o
ICovLAorCQkJCTBGMkI2NkI0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCAq
LywKKwkJCQkwRjJCNjZCNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlci5oICovLAor
CQkJCTBGMkI2NkI2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwICovLAorCQkJCTBGMkI2NkI3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZCODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclByb3RvdHlwZS5jcHAgKi8sCisJCQkJMEYyQjY2QjkxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGUuaCAqLywKKwkJCQkwRjJCNjZCQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJCMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAorCQkJCTBGMkI2NkJDMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCAqLywKIAkJCQk4NkZBOUU4RjE0MkJCQjJE
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQk4NkZBOUU5MDE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8sCiAJCQkJQkM3RjhGQkEwRTE5RDFFRjAw
ODYzMkMwIC8qIEpTQ2VsbC5jcHAgKi8sCkBAIC0yOTM4LDE3ICszMDQ4LDMyIEBACiAJCQkJRjY5
MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTQ0pTVmFsdWUuY3BwICovLAogCQkJCTE0QUJCMzZF
MDk5QzA3NjQwMEUyQTI0RiAvKiBKU0NKU1ZhbHVlLmggKi8sCiAJCQkJODY1QTMwRjAxMzUwMDdF
MTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEYyQjY2QkQxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcuY3BwICovLAorCQkJCTBGMkI2NkJFMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0RhdGFWaWV3LmggKi8sCisJCQkJMEYyQjY2QkYxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwICovLAorCQkJCTBGMkI2NkMwMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0RhdGFWaWV3UHJvdG90eXBlLmggKi8sCiAJCQkJOTc4OEZDMjIxNDcxQUQwQzAwNjhD
RTJEIC8qIEpTRGF0ZU1hdGguY3BwICovLAogCQkJCTk3ODhGQzIzMTQ3MUFEMEMwMDY4Q0UyRCAv
KiBKU0RhdGVNYXRoLmggKi8sCiAJCQkJQzJBN0Y2ODcxNjA0MzJENDAwRjc2Qjk4IC8qIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmggKi8sCiAJCQkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2IC8qIEpT
RXhwb3J0TWFjcm9zLmggKi8sCisJCQkJMEYyQjY2QzExN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxv
YXQzMkFycmF5LmggKi8sCisJCQkJMEYyQjY2QzIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2
NEFycmF5LmggKi8sCiAJCQkJRjY5MkE4NUUwMjU1NTk3RDAxRkY2MEY3IC8qIEpTRnVuY3Rpb24u
Y3BwICovLAogCQkJCUY2OTJBODVGMDI1NTU5N0QwMUZGNjBGNyAvKiBKU0Z1bmN0aW9uLmggKi8s
CiAJCQkJQTcyMDI4QjkxNzk3NjAzRDAwOTgwMjhDIC8qIEpTRnVuY3Rpb25JbmxpbmVzLmggKi8s
CisJCQkJMEYyQjY2QzMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmggKi8sCisJCQkJMEYyQjY2QzQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjJCNjZDNTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCAqLywKKwkJCQkwRjJC
NjZDNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgg
Ki8sCisJCQkJMEYyQjY2QzcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmggKi8sCisJCQkJMEYyQjY2QzgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oICovLAogCQkJCTE0REUwRDY4MEQw
MjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9iamVjdC5jcHAgKi8sCiAJCQkJQThFODk0MzMwQ0Qw
NjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8sCiAJCQkJQkM3NTZGQzYwRTIwMzFC
MjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlCQzc1NkZD
NzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywKKwkJCQkw
RjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2
Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAorCQkJCTBGMkI2NkM5MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCTY1RUE0Qzk5MDkyQUY5RTIw
MDkzRDgwMCAvKiBKU0xvY2suY3BwICovLAogCQkJCTY1RUE0QzlBMDkyQUY5RTIwMDkzRDgwMCAv
KiBKU0xvY2suaCAqLywKIAkJCQkxNDg3NEFERjE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2Nv
cGUuY3BwICovLApAQCAtMjk3NSw3ICszMTAwLDE3IEBACiAJCQkJMEY5MTlEMDkxNTdFRTA5RDAw
NEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAogCQkJCTBGOTE5RDBBMTU3RUUw
OUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlD
MkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAorCQkJCTBGMkI2NkNDMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCTBGMkI2NkNEMTdCNkI1
QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQkwRjJCNjZD
RTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAgKi8sCisJCQkJ
MEYyQjY2Q0YxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVByb3RvdHlwZXMuaCAqLywK
KwkJCQkwRjJCNjZEMDE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgKi8sCisJ
CQkJMEYyQjY2RDExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheXMuaCAqLywKIAkJCQk2
NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAorCQkJCTBGMkI2NkQ0
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZEMjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCisJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKIAkJCQlCQzIyQTM5QTBFMTZFMTQ4MDBB
RjIxQzggLyogSlNWYXJpYWJsZU9iamVjdC5jcHAgKi8sCiAJCQkJMTRGMjUyNTYwRDA4REQ4RDAw
NEVDRkZGIC8qIEpTVmFyaWFibGVPYmplY3QuaCAqLywKIAkJCQkxNDQyNTY1RjE1RURFOThEMDA2
NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwICovLApAQCAtMzA1MSw2ICszMTg2LDggQEAKIAkJCQkw
RkI3RjM5MTE1RUQ4RTM4MDBGMTY3QjIgLyogUmVqZWN0LmggKi8sCiAJCQkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8sCiAJCQkJMEY3NzAwOEUxNDAy
RkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovLAorCQkJCTBGMkI2NkQ2MTdCNkI1
QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCisJCQkJMEYy
QjY2RDcxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8s
CiAJCQkJOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi8sCiAJ
CQkJOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovLAogCQkJCTBG
MENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLywKQEAg
LTMwNzgsOCArMzIxNSwxMyBAQAogCQkJCTE0QTM5NkE2MENEMjkzMzEwMEI1QjRGRiAvKiBTeW1i
b2xUYWJsZS5oICovLAogCQkJCTVENTM3MjZEMEUxQzU0NkIwMDIxRTU0OSAvKiBUcmFjaW5nLmQg
Ki8sCiAJCQkJNUQ1MzcyNkUwRTFDNTQ4ODAwMjFFNTQ5IC8qIFRyYWNpbmcuaCAqLywKLQkJCQlB
N0E4QUYyRjE3QURCNUYzMDA1QUIxNzQgLyogVHlwZWRBcnJheUJhc2UuaCAqLywKLQkJCQkwRkVC
M0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3IuaCAqLywKKwkJCQkw
RjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3JzLmggKi8sCisJCQkJ
MEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLywK
KwkJCQkwRjJCNjZEQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAq
LywKKwkJCQkwRjRCOTREQjE3QjlGMDc1MDBERDAzQTQgLyogVHlwZWRBcnJheUlubGluZXMuaCAq
LywKKwkJCQkwRjJCNjZEQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheXMuaCAqLywKKwkJ
CQkwRjJCNjZEQzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuY3BwICovLAorCQkJ
CTBGMkI2NkREMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5oICovLAogCQkJCUE3
QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2NjczOUQx
MTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4QUYz
MzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKQEAgLTM1MzgsMTIgKzM2ODAs
MTUgQEAKIAkJCQlCQzE4QzUyNDBFMTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlT
dG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYgLyog
QXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZERjE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkFDMTdCNkI1M0Yw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZE
M0IyQzUxMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODRBMjYxMTFEMTY2MjIwMDU3NzZBQyAvKiBBU1RCdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0
Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNC
RkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDgxNkUx
QzE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjcwQjE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheVR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyog
Qnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU1LDYgKzM3MDAsNyBA
QAogCQkJCUE3QzFFQUVGMTc5ODdBQjYwMDI5OURCMiAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NUUzQkMwNTBFMUFFNjgyMDBCMkQxQzEgLyogQ2FsbElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0IxMTRCQ0Y3MTgwMDg4NUI0RiAvKiBDYWxs
TGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0
ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdE
OCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMzU2Niw2ICszNzEyLDcgQEAKIAkJ
CQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4
M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4g
SGVhZGVycyAqLywKQEAgLTM1NzYsNiArMzcyMyw3IEBACiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAw
N0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZF
NzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjYwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbnN0cnVjdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFEMkZDMTRG
MDI0OTgwMEE0QjE1OSAvKiBDb3BpZWRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMy
QzhEMDMwMTRBM0NFRkMwMDU3OEU2NSAvKiBDb3BpZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zNjA0LDYgKzM3NTIsNyBAQAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdB
ZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2RDAyRUIyMDA1NUE1
REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM3ODEwQzE3OTlFQTJF
MDA4MTc1MzMgLyogREZHQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkUxMTdC
NkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjFFM0E0NjE1MzRDQkFGMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0
MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2MTcsNiArMzc2Niw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgzNjRC
NzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkUzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2Fs
bEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
N0IyOTRCMTRDM0NEMkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGN0IyOTRBMTRDM0NEMjkwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzY1MCw2ICszODAwLDcgQEAKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3
NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0ZBMTdB
MEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaExpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZBRTZDNEQxMzZBMTFFNDAwOTYzMDEyIC8qIERGR0ZQUkluZm8uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkY4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDE2QXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5l
cmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTZDNEUxMzZBMTFFNDAwOTYzMDEy
IC8qIERGR0dQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJC
MkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjU4LDYgKzM4MDksNyBAQAog
CQkJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5Nzc5MTc5NzM4QjgwMDlERjc0NCAvKiBERkdKSVRGaW5hbGl6
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQTUzNUIxNzk5Q0Q1RDAwMTcwQzE5
IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0
MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3
QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM2NzEsNiArMzgyMyw3IEBACiAJCQkJODZFQ0EzRUExMzJERUYxQzAwMkIyQUQ3IC8q
IERGR05vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVEQiAv
KiBERkdOb2RlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkE1ODFCQjE1MEU5NTMw
MDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZBRDE3
QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkE1ODFCQzE1MEU5NTMwMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RUM5REQwMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGRTE3QTBCOENDMDA3NzNBRDggLyogREZHT1NS
QXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg0LDYgKzM4
MzcsOCBAQAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFy
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTVDMTRFRjkwQUYwMEM3MjUzMiAvKiBE
RkdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3N0IxNzk3MzhCODAwOURGNzQ0IC8q
IERGR1BsYW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY3MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
RTBGNzUxNkMxREIwQjAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMyIC8qIERGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhERjgy
MDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM2OTMsNiAr
Mzg0OCw3IEBACiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdH
ZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEz
MkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5
MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3MjYsNiArMzg4Miw3IEBACiAJCQkJMEYyMUMyN0MxNEJFNzI3
NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEw
NTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0
IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQzkxNzNEQTUyMDAw
N0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszOTAzLDcgQEAKIAkJCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVk
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzdGMTc5NzM4RDUwMDlERjc0NCAvKiBG
VExHZW5lcmF0ZWRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjQxNzA5NjA2
OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMkI2NzA4MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5h
bGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBG
VExMaW5rLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTQsNyArMzk1Miw2IEBACiAJCQkJQTdBOEFG
M0IxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QThBRjNDMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzQTE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggaW4gSGVhZGVycyAqLywK
LQkJCQlBN0E4QUYzRDE3QURCNUYzMDA1QUIxNzQgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4ODUzRkExNzk3MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjdCMEUxOTlDMDUwMDgw
NjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDc3QzBF
RDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzgxMyw2
ICszOTcwLDcgQEAKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNTI0MkIwRjUzNTVFOTAwQkEz
RDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjZGRjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVGNjgzNUUxNzQz
NDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUY2ODM1
RjE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdBNEFFMEQxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzTUlQUy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zODQwLDYgKzM5OTgsNyBAQAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEg
LyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2
MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA2MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NvbnRleHRSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0OENEMUQ4MTA4Q0Y5MDIwMDgxNjNDNiAvKiBKU0NvbnRleHRSZWZQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzIwMjhCODE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1
bm5lclV0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM4NTUsNiArNDAxNCw3IEBACiAJCQkJQkMx
OEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1
RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyogSlNOYW1lU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmpl
Y3RSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjgwQTI4MTE1NTdFMzAwMEQ1Njk1NyAvKiBK
U09iamVjdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzg2Niw2ICs0MDI2LDcgQEAK
IAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDVFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0YWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODg0LDYgKzQwNDUsNyBAQAogCQkJCTg2RTNDNjE1MTY3
QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzQ4MkU5MzExNkE3Q0FEMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0
TWFwUmVmSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzAwMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzEx
NDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDQyNTY2MjE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzkxNCw2ICs0MDc2LDcgQEAKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBE
MjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzkx
MzRGRjBBNjAwQUZBREI1IC8qIExvY2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQTEz
NEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
RkIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MzcwRTE2RjVDRDAwQjM0NDYwIC8qIExvb2t1cC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0NjgwQ0QxNEJCQjE3RDAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QjcyM0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNo
aW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNiw2ICs0MDg5LDcgQEAKIAkJ
CQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4
Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMjE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCOTE2
QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQyRDZGMDkxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzkzNCwxNCArNDA5OCwxNyBAQAogCQkJCUMyMTEyMkUzMTVERDlBQjMw
MDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRD
RDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjJCNjZFRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlld1Byb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM1MkEwRTE2RkNDMjAwQjM0NDYwIC8qIE1hdGhPYmplY3QubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDIxM0UzRTEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5
U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2RjkxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNTQ2N0IxNEY1QzdFMTAw
MkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2QzU2OEUyMTFBMjEzRUUwMDA3RjdGMCAvKiBNSVBTQXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVCRjMwMDE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwMjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUluc3Rh
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVCRjMwNDE1NjBGMDZBMDA4RTkyMjIgLyogTmFt
ZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3
IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NzA5
MTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
MkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0VGRjAwNjQwRUMwNUE5QTAwQUE3QzkzIC8qIE5vZGVJbmZv
LmggaW4gSGVhZGVycyAqLywKQEAgLTM5NzEsNiArNDEzOCw3IEBACiAJCQkJMEYzNEIxNEMxNkQ0
M0UwRDAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5RkM4QzQxNEUxQjYwMDAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQ
cmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU1MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTM5OTksOSArNDE2NywxMSBAQAogCQkJCTE0NzRDMzNCMTZBQTJEOTUw
MDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRD
QTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBD
RDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUy
QUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3
NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3
NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCNjcwNTE3QjZCNUFCMDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBp
biBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4
cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjQsNiArNDE5NCw3IEBACiAJCQkJ
QTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkI2NkVDMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUz
MDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAt
NDAzNiw3ICs0MjA3LDkgQEAKIAkJCQkxNERGMDREQTE2QjM5OTZEMDAxNkE1MTMgLyogU3RhdGlj
UHJvcGVydHlBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDQTk1OEIxNkFCNTBERTAw
OTM4QTA2IC8qIFN0YXRpY1Byb3BlcnR5QW5hbHl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
MzBCNjEyMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQjY2RjAxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQ2NEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NjBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkZEMTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2ODBF
MTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzUyNjBFMTZGQ0E3MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC00MDQ4LDYgKzQyMjEsOCBAQAogCQkJCUMyRkUxOEE0MTZCQUVDNDAw
MEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIwQkE5
MkQxNkJCMUMxNTAwQjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY3MDExN0I2QjVB
QjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NzY2RDM5MTVBRTRBMUYwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0NGMEQwODBFRjBBQUI5MDA0MTNDOEYgLyogU3RydWN0
dXJlU3R1YkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTA0MTQ4MEVCOTI1MDkwMEZFMjZG
QSAvKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNDA1Nyw5
ICs0MjMyLDEwIEBACiAJCQkJMEY1NzJENEYxNjg3OUZERDAwRTU3RkJEIC8qIFRodW5rR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NjExODY5N0I0MDA1NDAyNzkgLyogVGh1
bmtHZW5lcmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJB
MUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCNjcwMzE3QjZC
NUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2
QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1RDUzNzI2RjBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQTdBOEFGM0UxN0FEQjVGMzAwNUFCMTc0IC8qIFR5cGVkQXJyYXlCYXNlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJh
eURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICov
LApAQCAtNDEwNCw2ICs0MjgwLDcgQEAKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyog
WWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBB
OUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNEI5NERD
MTdCOUYwNzUwMEREMDNBNCAvKiBUeXBlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC00NDg5LDYgKzQ2NjYsNyBAQAogCQkJCTE0N0YzOUM2MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRl
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdC
MiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAz
REZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2
NzA0MTdCNkI1QUIwMEE3QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxs
RnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2
MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ1MTQs
NiArNDY5Miw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0NyaXRpY2Fs
RWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTkxNEVGOTBB
NjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDNzcy
MTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0UxMzMwMTc5NjI0Q0QwMEU0REVBOCAvKiBERkdE
ZXNpcmVkU3RydWN0dXJlQ2hhaW5zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTg1MzRCMTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00NTQzLDYgKzQ3MjIsNyBAQAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBE
RkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQjY2RkMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheVBy
b3RvdHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0
IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzkxMTQ2QTZGNzEw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVCMTcx
NzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ2
MTYsNiArNDc5Niw3IEBACiAJCQkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYz
QzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg1NTEwN0VD
MEU3MDAxM0U3QjIgLyogR2V0dGVyU2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkI2
NkUyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkUzMTM1MTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGVTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyRTMxMzcxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZVN0YWNrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDY2OCwxMSArNDg0OSwxMyBAQAogCQkJCUMyNUQ3MDlCMTZERTk5RjQw
MEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUUz
MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjJCNjZGQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBK
U09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMg
LyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAw
QTBCMkQwIC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVC
NUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMkI2NkRFMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNT
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyog
SlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NjkwLDYgKzQ4NzMsNyBAQAogCQkJ
CUE3NDgyQjk0MTE2NzExNDcwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhT
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyog
SlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNzY2RDM0MTVBRTI1MzgwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAv
KiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NzEyLDYgKzQ4OTYsNyBAQAogCQkJ
CTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzI5MDA5QzE3OTc2QzYwMDAzMTcyOTggLyogTWFjcm9Bc3NlbWJsZXJB
Uk12Ny5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtl
ZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDc2MiwxNyArNDk0NywyMSBAQAogCQkJCTE0
NzRDMzNDMTZBQTJEOUIwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0Iy
IC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUz
MTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZB
OTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZENEVGIC8q
IFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MzEwN0VD
MDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Mjgw
ODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZl
clZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ4ODUwRUQyMUMzRDAwQjg5NjE5IC8q
IFNhbXBsaW5nVG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjI1NDk0MzE1RjdEQkFBMDA2
NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDQwMkMwRTZB
NzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
NjcwNzE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4RjJCOUUxNzMwNkM4RDAwN0RCREE1IC8qIFNvdXJjZUNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0OURDMTZCMTJFRjI5M0UwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgwNSw2ICs0OTk0LDcg
QEAKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCNjcwQTE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRB
cnJheVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVEOTRGMkUxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFRDk0RjMwMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZ01hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyNTE1ODUz
Q0UwMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmgJKHJldmlzaW9uIDE1NDA5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeVZhbEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQCBpbmxpbmUgYm9vbCBpc09wdGltaXphYmxlSW5kZXhpbmdU
eXBlKEluCiAKIGlubGluZSBib29sIGhhc09wdGltaXphYmxlSW5kZXhpbmdGb3JDbGFzc0luZm8o
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCiB7Ci0gICAgcmV0dXJuIGNsYXNzSW5mby0+dHlw
ZWRBcnJheVN0b3JhZ2VUeXBlICE9IFR5cGVkQXJyYXlOb25lOworICAgIHJldHVybiBpc1R5cGVk
VmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiB9CiAKIGlubGluZSBib29s
IGhhc09wdGltaXphYmxlSW5kZXhpbmcoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05OCwyMyAr
OTgsMjMgQEAgaW5saW5lIEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JJbmRleAogaW5saW5l
IEpJVEFycmF5TW9kZSBqaXRBcnJheU1vZGVGb3JDbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8pCiB7CiAgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkgewotICAgIGNhc2UgVHlwZWRBcnJheUludDg6CisgICAgY2FzZSBUeXBlSW50ODoKICAgICAg
ICAgcmV0dXJuIEpJVEludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlJbnQxNjoKKyAgICBj
YXNlIFR5cGVJbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVEludDE2QXJyYXk7Ci0gICAgY2FzZSBU
eXBlZEFycmF5SW50MzI6CisgICAgY2FzZSBUeXBlSW50MzI6CiAgICAgICAgIHJldHVybiBKSVRJ
bnQzMkFycmF5OwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4
OgogICAgICAgICByZXR1cm4gSklUVWludDhBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50
OENsYW1wZWQ6CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgogICAgICAgICByZXR1cm4gSklU
VWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgorICAgIGNhc2Ug
VHlwZVVpbnQxNjoKICAgICAgICAgcmV0dXJuIEpJVFVpbnQxNkFycmF5OwotICAgIGNhc2UgVHlw
ZWRBcnJheVVpbnQzMjoKKyAgICBjYXNlIFR5cGVVaW50MzI6CiAgICAgICAgIHJldHVybiBKSVRV
aW50MzJBcnJheTsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgorICAgIGNhc2UgVHlwZUZs
b2F0MzI6CiAgICAgICAgIHJldHVybiBKSVRGbG9hdDMyQXJyYXk7Ci0gICAgY2FzZSBUeXBlZEFy
cmF5RmxvYXQ2NDoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gSklURmxv
YXQ2NEFycmF5OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0xMjIsNiArMTIy
LDMzIEBAIGlubGluZSBKSVRBcnJheU1vZGUgaml0QXJyYXlNb2RlRm9yQ2xhc3MKICAgICB9CiB9
CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShK
SVRBcnJheU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVElu
dDhBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgSklUSW50MTZBcnJh
eToKKyAgICAgICAgcmV0dXJuIFR5cGVJbnQxNjsKKyAgICBjYXNlIEpJVEludDMyQXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlSW50MzI7CisgICAgY2FzZSBKSVRVaW50OEFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgSklUVWludDhDbGFtcGVkQXJyYXk6CisgICAg
ICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOworICAgIGNhc2UgSklUVWludDE2QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlVWludDE2OworICAgIGNhc2UgSklUVWludDMyQXJyYXk6CisgICAg
ICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgSklURmxvYXQzMkFycmF5OgorICAgICAg
ICByZXR1cm4gVHlwZUZsb2F0MzI7CisgICAgY2FzZSBKSVRGbG9hdDY0QXJyYXk6CisgICAgICAg
IHJldHVybiBUeXBlRmxvYXQ2NDsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAg
ICAgICByZXR1cm4gTm90VHlwZWRBcnJheTsKKyAgICB9Cit9CisKIGlubGluZSBKSVRBcnJheU1v
ZGUgaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IGlmIChpc09wdGltaXphYmxlSW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMjkgKzI2Niwy
NyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgaWYgKGNs
YXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVy
biBTcGVjRnVuY3Rpb247CiAgICAgCi0gICAgaWYgKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3Jh
Z2VUeXBlICE9IFR5cGVkQXJyYXlOb25lKSB7Ci0gICAgICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50
eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAg
ICAgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlJ
bnQxNjoKLSAgICAgICAgICAgIHJldHVybiBTcGVjSW50MTZBcnJheTsKLSAgICAgICAgY2FzZSBU
eXBlZEFycmF5SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY0ludDMyQXJyYXk7Ci0gICAg
ICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4OgotICAgICAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFy
cmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY1VpbnQ4Q2xhbXBlZEFycmF5OwotICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50
MTY6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQxNkFycmF5OwotICAgICAgICBjYXNlIFR5
cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OwotICAg
ICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgcmV0dXJuIFNwZWNGbG9h
dDMyQXJyYXk7Ci0gICAgICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0NjQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdl
VHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBTcGVjSW50OEFycmF5
OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gU3BlY0ludDE2QXJyYXk7Cisg
ICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBTcGVjSW50MzJBcnJheTsKKyAgICBj
YXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OEFycmF5OworICAgIGNhc2Ug
VHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIFNwZWNVaW50OENsYW1wZWRBcnJheTsK
KyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBTcGVjVWludDE2QXJyYXk7Cisg
ICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gU3BlY1VpbnQzMkFycmF5OworICAg
IGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQzMkFycmF5OworICAg
IGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBTcGVjRmxvYXQ2NEFycmF5OworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAoY2xhc3NJbmZv
LT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8oKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
OCw2ICs0NTgsMzIgQEAgY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoQXJyYQog
ICAgIH0KIH0KIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJheTo6VHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToK
KyAgICAgICAgcmV0dXJuIFR5cGVJbnQ4OworICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Cisg
ICAgICAgIHJldHVybiBUeXBlSW50MTY7CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAg
ICAgICAgcmV0dXJuIFR5cGVJbnQzMjsKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAg
ICAgICByZXR1cm4gVHlwZVVpbnQ4OworICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OgorICAgICAgICByZXR1cm4gVHlwZVVpbnQ4Q2xhbXBlZDsKKyAgICBjYXNlIEFycmF5OjpVaW50
MTZBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7CisgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6CisgICAgICAgIHJldHVybiBUeXBlVWludDMyOworICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOworICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheToKKyAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBOb3RUeXBlZEFycmF5OworICAgIH0KK30KKwogdm9pZCBBcnJheU1v
ZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQodHlwZSgp
LCBhcnJheUNsYXNzKCksIHNwZWN1bGF0aW9uKCksIGNvbnZlcnNpb24oKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlzaW9uIDE1NDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw2ICsxMDQsOCBAQCBjb25zdCBjaGFyKiBhcnJheUNsYXNzVG9TdHJpbmcoQXJyYXk6
OkNsCiBjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJyYXk6OlNwZWN1bGF0
aW9uKTsKIGNvbnN0IGNoYXIqIGFycmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmF5OjpDb252ZXJz
aW9uKTsKIAorVHlwZWRBcnJheVR5cGUgdG9UeXBlZEFycmF5VHlwZShBcnJheTo6VHlwZSk7CisK
IGNsYXNzIEFycmF5TW9kZSB7CiBwdWJsaWM6CiAgICAgQXJyYXlNb2RlKCkKQEAgLTM4MCw2ICsz
ODIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHlwZSgpID09IEFycmF5OjpTdHJpbmc7
CiAgICAgfQogICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0b1R5cGVkQXJyYXlUeXBlKHR5cGUoKSk7CisgICAgfQor
ICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcnJheU1vZGUmIG90aGVyKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBvdGhlci50eXBlKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY2NywzNyArMjY2NywxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRz
KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgp
LT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBl
ZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFy
cmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZt
KCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVk
VHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50
MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2pp
dC52bSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNp
Z25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXko
bV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3Qp
LCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBu
b2RlLCBzaXplb2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBhcnJheU1vZGUudHlwZWRBcnJh
eVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShu
b2RlLCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg3
Myw0NiArMjg0OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoaW50OF90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICAgICAgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDE2X3Qp
LCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlW
YWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5
cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5
cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBlZEFycmF5
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShtX2ppdC52bSgpLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5n
cHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50OF90KSwgVW5zaWduZWRUeXBl
ZEFycmF5LCBDbGFtcFJvdW5kaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1
dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT51aW50MTZBcnJheURlc2NyaXB0b3Io
KSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZih1aW50MTZfdCksIFVu
c2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCksIGJh
c2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDMyX3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KG1faml0LnZtKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgYmFz
ZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5vZGUsIHNpemVvZihmbG9hdCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KG1faml0LnZt
KCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IGFycmF5TW9kZS50eXBlZEFycmF5VHlw
ZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNvbXBp
bGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCksIG5v
ZGUsIHR5cGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRC
eVZhbEZvckZsb2F0VHlwZWRBcnJheShiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwg
dHlwZSk7CisgICAgICAgIH0gfQogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MSwzNyArMjU4MSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uQXJndW1lbnRzKG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQ4QXJy
YXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQ4X3QpLCBTaWduZWRUeXBlZEFycmF5KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG1faml0LnZtKCktPmludDE2
QXJyYXlEZXNjcmlwdG9yKCksIG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJh
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoaW50MzJfdCksIFNpZ25lZFR5cGVk
QXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJy
YXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0o
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKSwgbm9kZSwgc2l6ZW9mKHVpbnQ4X3QpLCBVbnNpZ25l
ZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVp
bnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG1faml0LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXpl
b2YodWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIG5v
ZGUsIHNpemVvZih1aW50MTZfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDMyQXJyYXlEZXNjcmlw
dG9yKCksIG5vZGUsIHNpemVvZih1aW50MzJfdCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobV9qaXQudm0oKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLCBub2RlLCBzaXplb2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNj
cmlwdG9yKCksIG5vZGUsIHNpemVvZihkb3VibGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5
VHlwZSgpOworICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2Rl
LCB0eXBlKTsKKyAgICAgICAgfSB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjg3Miw0
NiArMjg0OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVk
QXJyYXkobV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9w
ZXJ0eS5ncHIoKSwgbm9kZSwgc2l6ZW9mKGludDhfdCksIFNpZ25lZFR5cGVkQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZB
cnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQu
dm0oKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKSwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCks
IG5vZGUsIHNpemVvZihpbnQxNl90KSwgU2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAg
ICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShtX2ppdC52bSgpLT5pbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKGludDMyX3QpLCBTaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YodWludDhf
dCksIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgICAgIGNv
bXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+dWludDhDbGFtcGVkQXJy
YXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2Yo
dWludDhfdCksIFVuc2lnbmVkVHlwZWRBcnJheSwgQ2xhbXBSb3VuZGluZyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkobV9qaXQudm0oKS0+
dWludDE2QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2Rl
LCBzaXplb2YodWludDE2X3QpLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KG1faml0LnZtKCktPnVpbnQz
MkFycmF5RGVzY3JpcHRvcigpLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSwgbm9kZSwgc2l6
ZW9mKHVpbnQzMl90KSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDMy
QXJyYXlEZXNjcmlwdG9yKCksIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXpl
b2YoZmxvYXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0NjRBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckZs
b2F0VHlwZWRBcnJheShtX2ppdC52bSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIGJhc2Uu
Z3ByKCksIHByb3BlcnR5LmdwcigpLCBub2RlLCBzaXplb2YoZG91YmxlKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBh
cnJheU1vZGUudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkK
KyAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KGJhc2UuZ3By
KCksIHByb3BlcnR5LmdwcigpLCBub2RlLCB0eXBlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCksIG5vZGUsIHR5cGUpOworICAgICAgICB9IH0KIAogICAgICAgICBicmVh
azsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MywzMiArNTgz
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQogICAgIH0KIH0K
ICAgICAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6dHlwZWRB
cnJheURlc2NyaXB0b3IoQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKLSAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIHJldHVy
biAmbV9qaXQudm0oKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6Oklu
dDE2QXJyYXk6Ci0gICAgICAgIHJldHVybiAmbV9qaXQudm0oKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKTsKLSAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0
LnZtKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpOwot
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0
LnZtKCktPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVp
bnQxNkFycmF5OgotICAgICAgICByZXR1cm4gJm1faml0LnZtKCktPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKLSAgICAgICAgcmV0dXJuICZtX2ppdC52bSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCk7Ci0gICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OgotICAgICAgICByZXR1cm4gJm1f
aml0LnZtKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklU
OjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wR1BSLCBBcnJheU1vZGUg
YXJyYXlNb2RlLCBJbmRleGluZ1R5cGUgc2hhcGUpCiB7CiAgICAgc3dpdGNoIChhcnJheU1vZGUu
YXJyYXlDbGFzcygpKSB7CkBAIC02OTQsOCArNjY4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcnJheShOb2RlKiBubwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAK
LSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2Ny
aXB0b3Iobm9kZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpKSkgewogICAgICAgICBub1Jlc3VsdChtX2N1cnJlbnROb2RlKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzI3LDIyICs2OTksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAgZXhw
ZWN0ZWRDbGFzc0luZm8gPSBBcmd1bWVudHM6OmluZm8oKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAg
Y2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAg
IGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFy
cmF5OgotICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgIGNhc2UgQXJyYXk6OkZsb2F0
MzJBcnJheToKLSAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6Ci0gICAgICAgIGV4cGVjdGVk
Q2xhc3NJbmZvID0gcmVzdWx0LT5tX2NsYXNzSW5mbzsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZXhw
ZWN0ZWRDbGFzc0luZm8gPSBjbGFzc0luZm9Gb3JUeXBlKG5vZGUtPmFycmF5TW9kZSgpLnR5cGVk
QXJyYXlUeXBlKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9B
U1NFUlQoZXhwZWN0ZWRDbGFzc0luZm8pOworICAgIAogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTI2
MDEsOCArMjU2NCwxMCBAQCBzdGF0aWMgdm9pZCBjb21waWxlQ2xhbXBEb3VibGVUb0J5dGUoSklU
CiAKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBub2RlLCBz
aXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MpCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9k
ZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAg
IAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7
CkBAIC0yNjE5LDE2ICsyNTg0LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uSW4KICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBzd2l0Y2gg
KGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChzaWduZWRuZXNz
ID09IFNpZ25lZFR5cGVkQXJyYXkpCisgICAgICAgIGlmIChpc1NpZ25lZCh0eXBlKSkKICAgICAg
ICAgICAgIG1faml0LmxvYWQ4U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSksIHJlc3VsdFJlZyk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09u
ZSksIHJlc3VsdFJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYg
KHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgaWYgKGlzU2lnbmVkKHR5
cGUpKQogICAgICAgICAgICAgbV9qaXQubG9hZDE2U2lnbmVkKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3byks
IHJlc3VsdFJlZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1faml0LmxvYWQxNihNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNUd28pLCByZXN1bHRSZWcpOwpAQCAtMjYzOSwxMiArMjYwNSwxMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQ1JBU0goKTsKICAgICB9Ci0gICAgaWYgKGVsZW1lbnRTaXplIDwgNCB8fCBzaWduZWRuZXNz
ID09IFNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8
IGlzU2lnbmVkKHR5cGUpKSB7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0UmVnLCBub2Rl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoZWxlbWVudFNpemUg
PT0gNCAmJiBzaWduZWRuZXNzID09IFVuc2lnbmVkVHlwZWRBcnJheSk7CisgICAgQVNTRVJUKGVs
ZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKICAgICBpZiAobm9kZS0+
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIGZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSwgVmFsdWVSZWNvdmVy
eTo6dWludDMySW5HUFIocmVzdWx0UmVnKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKQEAgLTI2NTksOCArMjYyNSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkluCiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJy
YXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyByb3VuZGluZykKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkK
IHsKKyAgICBBU1NFUlQoaXNJbnQodHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIApAQCAtMjY3Nyw4ICsyNjQ1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGRvdWJsZSBkID0ganNWYWx1ZS5hc051bWJlcigp
OwotICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplID09IDEpOworICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7
CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAgICAgICAgICAg
ICBkID0gY2xhbXBEb3VibGVUb0J5dGUoZCk7CiAgICAgICAgIH0KICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0yNjkzLDggKzI2NjEsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsK
ICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPcC5ncHIoKSwgc2NyYXRjaFJlZyk7Ci0gICAg
ICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CiAg
ICAgICAgICAgICAgICAgY29tcGlsZUNsYW1wSW50ZWdlclRvQnl0ZShtX2ppdCwgc2NyYXRjaFJl
Zyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2YWx1ZS5hZG9wdChzY3JhdGNoKTsKQEAg
LTI3MDMsOCArMjY3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckkKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0g
ICAgICAgICAgICBpZiAocm91bmRpbmcgPT0gQ2xhbXBSb3VuZGluZykgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7
CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZh
bHVlVXNlKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
ICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBmbG9hdFNjcmF0Y2godGhpcyk7CkBAIC0yNzI0LDcg
KzI2OTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAg
ICAgICAgICAgICAgbm90TmFOLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWlsZWQ7Ci0gICAgICAgICAgICAgICAg
aWYgKHNpZ25lZG5lc3MgPT0gU2lnbmVkVHlwZWRBcnJheSkKKyAgICAgICAgICAgICAgICBpZiAo
aXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IG1faml0LmJyYW5j
aFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgTWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElm
VHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgZmFpbGVkID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb1VpbnQzMihmcHIsIGdwciwg
TWFjcm9Bc3NlbWJsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwpAQCAtMjc0OSw5ICsyNzE3
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEFTU0VS
VCh2YWx1ZUdQUiAhPSBzdG9yYWdlUmVnKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRP
ZkJvdW5kczsKICAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9m
ZnNldCkpOworICAgICAgICBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwogCi0gICAgc3dpdGNoIChl
bGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNl
IDE6CiAgICAgICAgIG1faml0LnN0b3JlOCh2YWx1ZS5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMjc2OSw4ICsyNzM3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIE5vZGUqIG5vZGUsIHNpemVfdCBlbGVtZW50
U2l6ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOworICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7CkBAIC0yNzg2LDggKzI3NTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7
Ci0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsK
KyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgogICAgICAgICBt
X2ppdC5sb2FkRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRm91ciksIHJlc3VsdFJlZyk7CiAgICAgICAg
IG1faml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVnKTsKQEAgLTI4
MDgsOCArMjc3OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZs
CiAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9k
ZSogbm9kZSwgc2l6ZV90IGVsZW1lbnRTaXplKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHks
IE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzRmxvYXQo
dHlwZSkpOworICAgIAogICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKSk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOwogICAgIApAQCAtMjgyNCwxMCArMjc5NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAgICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBub2Rl
LT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2ppdC5ncmFwaCgpLCBub2RlLCBtX3N0YXRl
LmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRP
ZkJvdW5kczsKLSAgICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeVZhbCkKLSAgICAgICAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9m
ZnNldCkpOworICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5VmFsKSB7CisgICAgICAgIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgfQogICAg
IAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5
cGUpKSB7CiAgICAgY2FzZSA0OiB7CiAgICAgICAgIG1faml0Lm1vdmVEb3VibGUodmFsdWVGUFIs
IHNjcmF0Y2hGUFIpOwogICAgICAgICBtX2ppdC5jb252ZXJ0RG91YmxlVG9GbG9hdCh2YWx1ZUZQ
Uiwgc2NyYXRjaEZQUik7CkBAIC00MDMzLDggKzQwMDksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CiAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIAotICAgIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9k
ZS0+YXJyYXlNb2RlKCkpOwotICAgIAogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkp
LCBzdG9yYWdlUmVnKTsKQEAgLTQwNDgsOCArNDAyMiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlQoZGVzY3JpcHRvcik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci0+bV9zdG9yYWdlT2Zm
c2V0KSwgc3RvcmFnZVJlZyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVkVmlldyhub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksCisgICAgICAgICAgICBzdG9yYWdlUmVnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIApAQCAtNDE1MCw4ICs0MTI2LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5ndGgoTm9kZSogbm9kZSkKIHsKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUtPmFycmF5TW9kZSgp
KTsKLQogICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2FzZSBB
cnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOgpAQCAtNDE5MSwxNiArNDE2NSwx
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGNv
bXBpbGVHZXRBcmd1bWVudHNMZW5ndGgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCkpKTsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgYmFzZSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgQVNT
RVJUKGRlc2NyaXB0b3IpOwotICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci0+bV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KKyAg
ICB9IH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVj
ayhOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTczLDEwICsxOTcz
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2UoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6
ZSwgVHlwZWRBcnJheVNpZ25lZG5lc3MpOwotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUqLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRu
ZXNzLCBUeXBlZEFycmF5Um91bmRpbmcgPSBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiwgTm9kZSosIHNpemVfdCBlbGVtZW50U2l6ZSk7Ci0gICAgdm9pZCBjb21waWxlUHV0QnlWYWxG
b3JGbG9hdFR5cGVkQXJyYXkoY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwor
ICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdl
dEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lk
IGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHBy
b3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0
aW9uTm9DaGVjayhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9u
KE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKQEAgLTIxMTgsOCAr
MjExOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogdHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKLSAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0
aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlLCBJbmRleGluZ1R5cGUpOwogICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0
aEluZGV4aW5nVHlwZVJlZywgQXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29weVRva2VuLmgJKHJldmlzaW9uIDE1
NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlUb2tlbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw4IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBDb3B5VG9r
ZW4gewotICAgIEJ1dHRlcmZseUNvcHlUb2tlbgorICAgIEJ1dHRlcmZseUNvcHlUb2tlbiwKKyAg
ICBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9EZWZlckdDLmgJKHJldmlzaW9uIDE1NDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksMjQgQEAgcHJpdmF0ZToKICAgICBIZWFwJiBtX2hlYXA7CiB9OwogCitjbGFzcyBE
ZWZlckdDRm9yQVdoaWxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWZlckdDRm9yQVdo
aWxlKTsKK3B1YmxpYzoKKyAgICBEZWZlckdDRm9yQVdoaWxlKEhlYXAmIGhlYXApCisgICAgICAg
IDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBtX2hlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOworICAgIH0KKyAgICAKKyAgICB+RGVmZXJHQ0ZvckFXaGlsZSgpCisgICAgeworICAg
ICAgICBtX2hlYXAuZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IERlZmVyR0NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1Jl
ZkNvdW50ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0lu
Y29taW5nUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBHQ0luY29taW5nUmVmQ291bnRlZF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkX2gK
KworI2luY2x1ZGUgPHd0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKKworLy8gQSBDLWhl
YXAtYWxsb2NhdGVkIG9iamVjdCB0aGF0IG1heSBoYXZlIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGNv
dW50cworLy8gZHVlIHRvIGluY29taW5nIHJlZmVyZW5jZXMgZnJvbSB0aGUgaGVhcCwgd2hpY2gg
YXJlIHRyYWNrZWQgaW4KKy8vIHJldmVyc2U6IHRoZSBvYmplY3Qga25vd3MgaXRzIGluY29taW5n
IHJlZmVyZW5jZXMuIFN1Y2ggb2JqZWN0cyBhbHNvCisvLyBoYXZlIHRoZSBpbnZhcmlhbnQgdGhh
dCB0aGV5IGRvbid0IGhhdmUgcmVmZXJlbmNlcyBiYWNrIGludG8gdGhlIEdDCisvLyBoZWFwLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgR0NJbmNvbWluZ1JlZkNvdW50ZWQgOiBwdWJs
aWMgRGVmZXJyYWJsZVJlZkNvdW50ZWQ8VD4geworcHVibGljOgorICAgIEdDSW5jb21pbmdSZWZD
b3VudGVkKCkKKyAgICAgICAgOiBtX2VuY29kZWRQb2ludGVyKDApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB+R0NJbmNvbWluZ1JlZkNvdW50ZWQoKQorICAgIHsKKyAgICAgICAgaWYgKGhhc1Zl
Y3Rvck9mQ2VsbHMoKSkKKyAgICAgICAgICAgIGRlbGV0ZSB2ZWN0b3JPZkNlbGxzKCk7CisgICAg
fQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIWhhc0FueUluY29taW5nKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRvbigpKQorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIHJldHVybiB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsKKyAgICB9CisgICAgCisgICAg
SlNDZWxsKiBpbmNvbWluZ1JlZmVyZW5jZUF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChoYXNBbnlJbmNvbWluZygpKTsKKyAgICAgICAgaWYgKGhhc1NpbmdsZXRv
bigpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBz
aW5nbGV0b24oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmVjdG9yT2ZDZWxscygpLT5h
dChpbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIEl0J3MgZ2VuZXJhbGx5IG5vdCBhIGdvb2Qg
aWRlYSB0byBjYWxsIHRoaXMgZGlyZWN0bHksIHNpbmNlIGlmIHRoaXMKKyAgICAvLyByZXR1cm5z
IHRydWUsIHlvdSdyZSBzdXBwb3NlZCB0byBhZGQgdGhpcyBvYmplY3QgdG8gdGhlIEdDJ3MgbGlz
dC4KKyAgICAvLyBDYWxsIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0OjphZGRSZWZlcmVuY2UoKSBp
bnN0ZWFkLgorICAgIGJvb2wgYWRkSW5jb21pbmdSZWZlcmVuY2UoSlNDZWxsKik7CisgICAgCisg
ICAgLy8gQSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHdlIHdpc2ggdG8ga2VlcCB0
aGUgaW5jb21pbmcKKyAgICAvLyByZWZlcmVuY2UsIGFuZCBmYWxzZSBpZiB3ZSBkb24ndC4gVGhp
cyBtYXkgZGVsZXRlIHRoZSBvYmplY3QsCisgICAgLy8gYW5kIGlmIGl0IGRvZXMgc28sIHRoaXMg
cmV0dXJucyB0cnVlLiBJbiBnZW5lcmFsLCB5b3UgZG9uJ3Qgd2FudAorICAgIC8vIHRvIHVzZSB0
aGlzIHdpdGggYSBmaWx0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGZhbHNlIHVubGVzcwor
ICAgIC8vIHlvdSdyZSBhbHNvIHdhbGtpbmcgdGhlIEdDJ3MgbGlzdC4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGaWx0ZXJGdW5jdGlvblR5cGU+CisgICAgYm9vbCBmaWx0ZXJJbmNvbWluZ1JlZmVy
ZW5jZXMoRmlsdGVyRnVuY3Rpb25UeXBlJik7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1
aW50cHRyX3Qgc2luZ2xldG9uRmxhZygpIHsgcmV0dXJuIDE7IH0KKyAgICAKKyAgICBib29sIGhh
c1ZlY3Rvck9mQ2VsbHMoKSBjb25zdCB7IHJldHVybiAhKG1fZW5jb2RlZFBvaW50ZXIgJiBzaW5n
bGV0b25GbGFnKCkpOyB9CisgICAgYm9vbCBoYXNBbnlJbmNvbWluZygpIGNvbnN0IHsgcmV0dXJu
ICEhbV9lbmNvZGVkUG9pbnRlcjsgfQorICAgIGJvb2wgaGFzU2luZ2xldG9uKCkgY29uc3QgeyBy
ZXR1cm4gaGFzQW55SW5jb21pbmcoKSAmJiAhaGFzVmVjdG9yT2ZDZWxscygpOyB9CisgICAgCisg
ICAgSlNDZWxsKiBzaW5nbGV0b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Np
bmdsZXRvbigpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX2VuY29k
ZWRQb2ludGVyICYgfnNpbmdsZXRvbkZsYWcoKSk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxK
U0NlbGwqPiogdmVjdG9yT2ZDZWxscygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFz
VmVjdG9yT2ZDZWxscygpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxWZWN0b3I8SlND
ZWxsKj4qPihtX2VuY29kZWRQb2ludGVyKTsKKyAgICB9CisgICAgCisgICAgLy8gU2luZ2xldG9u
IGZsYWcgaXMgc2V0OiB0aGlzIGlzIGEgSlNDZWxsKi4KKyAgICAvLyBTaW5nbGV0b24gZmxhZyBu
b3Qgc2V0OiB0aGlzIGlzIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBjZWxscy4KKyAgICB1aW50
cHRyX3QgbV9lbmNvZGVkUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3Vu
dGVkSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZD
b3VudGVkSW5saW5lc19oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lc19oCisK
KyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdS
ZWZDb3VudGVkPFQ+OjphZGRJbmNvbWluZ1JlZmVyZW5jZShKU0NlbGwqIGNlbGwpCit7CisgICAg
aWYgKCFoYXNBbnlJbmNvbWluZygpKSB7CisgICAgICAgIG1fZW5jb2RlZFBvaW50ZXIgPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKSB8IHNpbmdsZXRvbkZsYWcoKTsKKyAgICAgICAgdGhp
cy0+c2V0SXNEZWZlcnJlZCh0cnVlKTsKKyAgICAgICAgQVNTRVJUKGhhc1NpbmdsZXRvbigpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIEFTU0VSVChIZWFwOjpoZWFw
KGluY29taW5nUmVmZXJlbmNlQXQoMCkpID09IEhlYXA6OmhlYXAoY2VsbCkpOworICAgIAorICAg
IGlmIChoYXNTaW5nbGV0b24oKSkgeworICAgICAgICBWZWN0b3I8SlNDZWxsKj4qIHZlY3RvciA9
IG5ldyBWZWN0b3I8SlNDZWxsKj4oKTsKKyAgICAgICAgdmVjdG9yLT5hcHBlbmQoc2luZ2xldG9u
KCkpOworICAgICAgICB2ZWN0b3ItPmFwcGVuZChjZWxsKTsKKyAgICAgICAgbV9lbmNvZGVkUG9p
bnRlciA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZlY3Rvcik7CisgICAgICAgIEFTU0VSVCho
YXNWZWN0b3JPZkNlbGxzKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAor
ICAgIHZlY3Rvck9mQ2VsbHMoKS0+YXBwZW5kKGNlbGwpOworICAgIHJldHVybiBmYWxzZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3RlbXBsYXRlPHR5cGVuYW1lIEZpbHRlckZ1bmN0aW9u
VHlwZT4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNvdW50ZWQ8VD46OmZpbHRlckluY29taW5nUmVmZXJl
bmNlcyhGaWx0ZXJGdW5jdGlvblR5cGUmIGZpbHRlckZ1bmN0aW9uKQoreworICAgIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJGaWx0ZXJpbmcgaW5jb21pbmcgcmVmZXJlbmNlcy5cbiIpOworICAgIAorICAgIGlmICgh
aGFzQW55SW5jb21pbmcoKSkgeworICAgICAgICBBU1NFUlQoIXRoaXMtPmlzRGVmZXJyZWQoKSk7
CisgICAgICAgIEFTU0VSVCh0aGlzLT5yZWZDb3VudCgpKTsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSGFzIG5vIGluY29taW5nLlxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHRoaXMtPmlzRGVmZXJyZWQo
KSk7CisgICAgCisgICAgaWYgKGhhc1NpbmdsZXRvbigpKSB7CisgICAgICAgIGlmIChmaWx0ZXJG
dW5jdGlvbihzaW5nbGV0b24oKSkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgIFNpbmdsZXRvbiBwYXNzZWQuXG4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmluZyBzaW5nbGV0b24uXG4iKTsKKyAgICAg
ICAgbV9lbmNvZGVkUG9pbnRlciA9IDA7CisgICAgICAgIEFTU0VSVCghaGFzQW55SW5jb21pbmco
KSk7CisgICAgICAgIHRoaXMtPnNldElzRGVmZXJyZWQoZmFsc2UpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAg
IEhhcyAiLCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSwgIiBlbnRyaWVzLlxuIik7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JPZkNlbGxzKCktPnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChmaWx0ZXJGdW5jdGlvbih2ZWN0b3JPZkNlbGxzKCktPmF0KGkpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB2ZWN0b3JPZkNlbGxzKCktPmF0KGktLSkgPSB2ZWN0b3JP
ZkNlbGxzKCktPmxhc3QoKTsKKyAgICAgICAgdmVjdG9yT2ZDZWxscygpLT5yZW1vdmVMYXN0KCk7
CisgICAgfQorICAgIAorICAgIGlmICh2ZWN0b3JPZkNlbGxzKCktPnNpemUoKSA+PSAyKSB7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgU3RpbGwgaGFzICIs
IHZlY3Rvck9mQ2VsbHMoKS0+c2l6ZSgpLCAiIGVudHJpZXMuXG4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAodmVjdG9yT2ZDZWxscygpLT5pc0VtcHR5KCkp
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICBSZW1vdmlu
Zy5cbiIpOworICAgICAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgICAgICBtX2VuY29k
ZWRQb2ludGVyID0gMDsKKyAgICAgICAgQVNTRVJUKCFoYXNBbnlJbmNvbWluZygpKTsKKyAgICAg
ICAgdGhpcy0+c2V0SXNEZWZlcnJlZChmYWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgU2hyaW5raW5n
IHRvIHNpbmdsZXRvbi5cbiIpOworICAgIEpTQ2VsbCogc2luZ2xldG9uID0gdmVjdG9yT2ZDZWxs
cygpLT5hdCgwKTsKKyAgICBkZWxldGUgdmVjdG9yT2ZDZWxscygpOworICAgIG1fZW5jb2RlZFBv
aW50ZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzaW5nbGV0b24pIHwgc2luZ2xldG9uRmxh
ZygpOworICAgIEFTU0VSVChoYXNTaW5nbGV0b24oKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZD
b3VudGVkU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBHQ0luY29taW5nUmVmQ291bnRlZFNldF9oCisjZGVmaW5lIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0X2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCisvLyBUID0gc29tZSBzdWJ0eXBlIG9mIEdDSW5jb21pbmdSZWZDb3VudGVk
LCBtdXN0IHN1cHBvcnQgYSBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKQorLy8gbWV0aG9kLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0IHsKK3B1Ymxp
YzoKKyAgICBHQ0luY29taW5nUmVmQ291bnRlZFNldCgpOworICAgIH5HQ0luY29taW5nUmVmQ291
bnRlZFNldCgpOworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmF0aXZlIG9iamVj
dCBpcyBuZXcgdG8gdGhpcyBzZXQuCisgICAgYm9vbCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgVCop
OworICAgIAorICAgIHZvaWQgc3dlZXAoKTsKKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXM7IH07CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29sIHJl
bW92ZUFsbChKU0NlbGwqKTsKKyAgICBzdGF0aWMgYm9vbCByZW1vdmVEZWFkKEpTQ2VsbCopOwor
ICAgIAorICAgIFZlY3RvcjxUKj4gbV92ZWN0b3I7CisgICAgc2l6ZV90IG1fYnl0ZXM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19o
CisjZGVmaW5lIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lc19oCisKKyNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQ8VD46
OkdDSW5jb21pbmdSZWZDb3VudGVkU2V0KCkKKyAgICA6IG1fYnl0ZXMoMCkKK3sKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0dDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojp+R0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXQoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSBtX3ZlY3Rvci5zaXplKCk7
IGktLTspCisgICAgICAgIG1fdmVjdG9yW2ldLT5maWx0ZXJJbmNvbWluZ1JlZmVyZW5jZXMocmVt
b3ZlQWxsKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQ8VD46OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIFQqIG9iamVjdCkKK3sKKyAg
ICBpZiAoIW9iamVjdC0+YWRkSW5jb21pbmdSZWZlcmVuY2UoY2VsbCkpIHsKKyAgICAgICAgQVNT
RVJUKG9iamVjdC0+aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgQVNTRVJUKG9iamVjdC0+bnVtYmVy
T2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgbV92ZWN0b3IuYXBwZW5kKG9iamVjdCk7CisgICAgbV9ieXRlcyArPSBvYmplY3QtPmdjU2l6
ZUVzdGltYXRlSW5CeXRlcygpOworICAgIEFTU0VSVChvYmplY3QtPmlzRGVmZXJyZWQoKSk7Cisg
ICAgQVNTRVJUKG9iamVjdC0+bnVtYmVyT2ZJbmNvbWluZ1JlZmVyZW5jZXMoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIEdDSW5jb21pbmdSZWZD
b3VudGVkU2V0PFQ+Ojpzd2VlcCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zl
Y3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBUKiBvYmplY3QgPSBtX3ZlY3RvcltpXTsKKyAg
ICAgICAgc2l6ZV90IHNpemUgPSBvYmplY3QtPmdjU2l6ZUVzdGltYXRlSW5CeXRlcygpOworICAg
ICAgICBBU1NFUlQob2JqZWN0LT5pc0RlZmVycmVkKCkpOworICAgICAgICBBU1NFUlQob2JqZWN0
LT5udW1iZXJPZkluY29taW5nUmVmZXJlbmNlcygpKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmZp
bHRlckluY29taW5nUmVmZXJlbmNlcyhyZW1vdmVEZWFkKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBtX2J5dGVzIC09IHNpemU7CisgICAgICAgIG1fdmVjdG9yW2ktLV0gPSBtX3Zl
Y3Rvci5sYXN0KCk7CisgICAgICAgIG1fdmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+Ojpy
ZW1vdmVBbGwoSlNDZWxsKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citib29sIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PFQ+OjpyZW1vdmVEZWFkKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gSGVhcDo6aXNNYXJrZWQoY2VsbCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxp
bmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTQw
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCisj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVh
cFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTM1OCw2ICszNTksMTQgQEAgdm9pZCBIZWFwOjpqZXR0
aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUAogICAgIG1fZGZnQ29kZUJsb2Nrcy5qZXR0aXNvbihj
b2RlQmxvY2spOwogfQogCit2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFy
cmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKG1fYXJyYXlCdWZmZXJzLmFkZFJlZmVyZW5j
ZShjZWxsLCBidWZmZXIpKSB7CisgICAgICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsK
KyAgICAgICAgZGlkQWxsb2NhdGUoYnVmZmVyLT5nY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSk7Cisg
ICAgfQorfQorCiB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRv
ciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgZW5k
ID0gbV9wcm90ZWN0ZWRWYWx1ZXMuZW5kKCk7CkBAIC02MjEsMTQgKzYzMCwxOSBAQCBzaXplX3Qg
SGVhcDo6b2JqZWN0Q291bnQoKQogICAgIHJldHVybiBtX29iamVjdFNwYWNlLm9iamVjdENvdW50
KCk7CiB9CiAKK3NpemVfdCBIZWFwOjpleHRyYVNpemUoKQoreworICAgIHJldHVybiBtX2V4dHJh
TWVtb3J5VXNhZ2UgKyBtX2FycmF5QnVmZmVycy5zaXplKCk7Cit9CisKIHNpemVfdCBIZWFwOjpz
aXplKCkKIHsKLSAgICByZXR1cm4gbV9vYmplY3RTcGFjZS5zaXplKCkgKyBtX3N0b3JhZ2VTcGFj
ZS5zaXplKCkgKyBtX2V4dHJhTWVtb3J5VXNhZ2U7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
c2l6ZSgpICsgbV9zdG9yYWdlU3BhY2Uuc2l6ZSgpICsgZXh0cmFTaXplKCk7CiB9CiAKIHNpemVf
dCBIZWFwOjpjYXBhY2l0eSgpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0U3BhY2UuY2FwYWNpdHko
KSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCk7CisgICAgcmV0dXJuIG1fb2JqZWN0U3BhY2Uu
Y2FwYWNpdHkoKSArIG1fc3RvcmFnZVNwYWNlLmNhcGFjaXR5KCkgKyBleHRyYVNpemUoKTsKIH0K
IAogc2l6ZV90IEhlYXA6OnByb3RlY3RlZEdsb2JhbE9iamVjdENvdW50KCkKQEAgLTcwNyw2ICs3
MjEsMTIgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIGRh
dGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2VuZGlmCiAgICAgCisg
ICAgZG91YmxlIGJlZm9yZSA9IDA7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiW0dDIiwgc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCA/ICIgKGVhZ2VyIHN3ZWVw
KSIgOiAiIiwgIjogIik7CisgICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICB9
CisgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2UgQ29sbGVj
dGlvbiIpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgpOwpAQCAt
NzQ1LDYgKzc2NSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dn
CiAgICAgfQogCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CisgICAgCisgICAgewor
ICAgICAgICBHQ1BIQVNFKFN3ZWVwaW5nQXJyYXlCdWZmZXJzKTsKKyAgICAgICAgbV9hcnJheUJ1
ZmZlcnMuc3dlZXAoKTsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIG1fYmxvY2tTbmFwc2hvdC5y
ZXNpemUobV9vYmplY3RTcGFjZS5ibG9ja3MoKS5zZXQoKS5zaXplKCkpOwpAQCAtODE1LDYgKzg0
MCwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAKICAgICBp
ZiAoT3B0aW9uczo6c2hvd09iamVjdFN0YXRpc3RpY3MoKSkKICAgICAgICAgSGVhcFN0YXRpc3Rp
Y3M6OnNob3dPYmplY3RTdGF0aXN0aWNzKHRoaXMpOworICAgIAorICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7CisgICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtcywgIiwgY3VycmVudEhlYXBTaXplIC8gMTAy
NCwgIiBrYl1cbiIpOworICAgIH0KIAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAg
ICAgZGF0YUxvZ0YoIkpTQyBHQyBmaW5pc2hpbmcgY29sbGVjdGlvbi5cbiIpOwpAQCAtOTI0LDEy
ICs5NTQsMTYgQEAgdm9pZCBIZWFwOjppbmNyZW1lbnREZWZlcnJhbERlcHRoKCkKICAgICBtX2Rl
ZmVycmFsRGVwdGgrKzsKIH0KIAotdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5k
R0NJZk5lZWRlZCgpCit2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGgoKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG1fZGVmZXJyYWxEZXB0aCA+PSAxKTsKICAgICAKICAgICBtX2RlZmVy
cmFsRGVwdGgtLTsKLSAgICAKK30KKwordm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRo
QW5kR0NJZk5lZWRlZCgpCit7CisgICAgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogICAgIGNv
bGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw5ICsyMiwxMSBAQAogI2lmbmRlZiBIZWFwX2gK
ICNkZWZpbmUgSGVhcF9oCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJs
b2NrQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJERkdD
b2RlQmxvY2tzLmgiCisjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNs
dWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNs
dWRlICJIYW5kbGVTdGFjay5oIgpAQCAtMTQ0LDYgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENv
ZGVCbG9jaz4pOwogCisgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5
IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHNpemVfdCBjYXBhY2l0eSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgb2Jq
ZWN0Q291bnQoKTsKQEAgLTE3OSwxMSArMTgyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAgICAgCiAgICAgICAgIGNv
bnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0
dWJSb3V0aW5lczsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxs
KiwgQXJyYXlCdWZmZXIqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb3BpZWRCbG9jazsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIERlZmVyR0M7CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZWZlckdDRm9yQVdoaWxl
OwogICAgICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogICAgICAgICBm
cmllbmQgY2xhc3MgSGFuZGxlU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUU3R1YlJvdXRp
bmU7CkBAIC0yMzAsNiArMjM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJsb2NrQWxs
b2NhdG9yJiBibG9ja0FsbG9jYXRvcigpOwogICAgICAgICAKICAgICAgICAgdm9pZCBpbmNyZW1l
bnREZWZlcnJhbERlcHRoKCk7CisgICAgICAgIHZvaWQgZGVjcmVtZW50RGVmZXJyYWxEZXB0aCgp
OwogICAgICAgICB2b2lkIGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKCk7CiAK
ICAgICAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFwVHlwZTsKQEAgLTI0NSw2ICsyNTIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgQmxvY2tBbGxvY2F0b3IgbV9ibG9ja0FsbG9jYXRvcjsK
ICAgICAgICAgTWFya2VkU3BhY2UgbV9vYmplY3RTcGFjZTsKICAgICAgICAgQ29waWVkU3BhY2Ug
bV9zdG9yYWdlU3BhY2U7CisgICAgICAgIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0PEFycmF5QnVm
ZmVyPiBtX2FycmF5QnVmZmVyczsKICAgICAgICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlVc2FnZTsK
IAogI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9XZWFrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcg
KzkxLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIFdlYWs8VD46OgogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBXZWFrPFQ+Ojp3YXMoVCogb3RoZXIpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxUKj4obV9pbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCkpID09
IG90aGVyOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9pbXBsLT5qc1ZhbHVlKCkuYXND
ZWxsKCkpID09IG90aGVyOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgYm9vbCBX
ZWFrPFQ+OjpvcGVyYXRvciEoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogYXJyYXlDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVy
biBjYWxsRnJhbWUtPnZtKCkuYXJyYXlDb25zdHJ1Y3RvclRhYmxlOyB9CiAgICAgICAgIHN0YXRp
YyBjb25zdCBIYXNoVGFibGUqIGFycmF5UHJvdG90eXBlVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5hcnJheVByb3RvdHlwZVRhYmxlOyB9CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShDYWxsRnJh
bWUqIGNhbGxGcmFtZSkgeyByZXR1cm4gY2FsbEZyYW1lLT52bSgpLmJvb2xlYW5Qcm90b3R5cGVU
YWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRhVmlld1RhYmxlKENh
bGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZGF0YVZpZXdUYWJs
ZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlVGFibGU7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZUNvbnN0cnVjdG9yVGFibGUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+dm0oKS5kYXRlQ29uc3RydWN0b3JUYWJs
ZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxl
KENhbGxGcmFtZSogY2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPnZtKCkuZXJyb3JQcm90
b3R5cGVUYWJsZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTQw
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODIsOCArNDgyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRE
b3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3Vz
U2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKLSAgICAgICAgSnVtcExpc3QgZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFy
cmF5U2lnbmVkbmVzcyk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiwgc2l6ZV90IGVsZW1lbnRTaXplKTsKKyAgICAgICAgSnVtcExpc3QgZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIFR5cGVkQXJyYXlUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJh
eVR5cGUpOwogICAgICAgICAKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2Ug
aXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCiAgICAgICAgIC8vIFRo
ZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVydHkgaXMgaW50LWNoZWNr
ZWQgYW5kCkBAIC01MDMsOCArNTAzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAg
ICAgICAgSnVtcExpc3QgZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IENv
bnRpZ3VvdXNTaGFwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwotICAgICAgICBKdW1wTGlz
dCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBzaXplX3QgZWxlbWVudFNpemUs
IFR5cGVkQXJyYXlTaWduZWRuZXNzLCBUeXBlZEFycmF5Um91bmRpbmcpOwotICAgICAgICBKdW1w
TGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIHNpemVfdCBlbGVtZW50
U2l6ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CisgICAgICAg
IEp1bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCiAgICAgICAgIGVu
dW0gRmluYWxPYmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksMzUgKzE1NDksMTMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgogICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQ4
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEs
IFNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDE2QXJy
YXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLCAyLCBT
aWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRJbnQzMkFycmF5
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgU2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhBcnJheToK
LSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCksIDEsIFVuc2ln
bmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDhDbGFtcGVk
QXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT51aW50OENsYW1wZWRBcnJheURlc2NyaXB0
b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBK
SVRVaW50MTZBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRC
eVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpLCAyLCBVbnNpZ25lZFR5cGVkQXJyYXkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCksIDQsIFVuc2lnbmVkVHlwZWRBcnJheSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSklURmxvYXQzMkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFy
cmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCksIDQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEZsb2F0NjRB
cnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
LCA4KTsKLSAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKKyAg
ICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2Rl
KGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRG
bG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUp
OworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAgICAgSnVtcCBkb25lID0ganVtcCgpOwpA
QCAtMTYxOCwzNSArMTU5NiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChC
eVZhbEluCiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVEludDhBcnJheToKLSAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1f
dm0tPmludDhBcnJheURlc2NyaXB0b3IoKSwgMSwgU2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVS
b3VuZGluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUSW50MTZBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPmludDE2QXJyYXlEZXNjcmlwdG9yKCksIDIsIFNpZ25lZFR5cGVk
QXJyYXksIFRydW5jYXRlUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVElu
dDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBtX3ZtLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
LCA0LCBTaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRVaW50OEFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDhB
cnJheURlc2NyaXB0b3IoKSwgMSwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVuY2F0ZVJvdW5kaW5n
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIG1fdm0tPnVpbnQ4Q2xhbXBlZEFycmF5RGVzY3JpcHRvcigpLCAxLCBVbnNp
Z25lZFR5cGVkQXJyYXksIENsYW1wUm91bmRpbmcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVFVpbnQxNkFycmF5OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgbV92bS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCksIDIsIFVuc2lnbmVkVHlwZWRBcnJheSwgVHJ1bmNhdGVSb3VuZGluZyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklUVWludDMyQXJyYXk6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCBt
X3ZtLT51aW50MzJBcnJheURlc2NyaXB0b3IoKSwgNCwgVW5zaWduZWRUeXBlZEFycmF5LCBUcnVu
Y2F0ZVJvdW5kaW5nKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRGbG9hdDMyQXJyYXk6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIG1fdm0tPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKSwgNCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURmxvYXQ2NEFycmF5OgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCBtX3ZtLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCksIDgpOwotICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOworICAgICAgICBUeXBlZEFycmF5VHlw
ZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAg
ICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVk
QXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAg
ICBlbHNlIAorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5
VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAKQEAgLTE2NjgsOCArMTYyMywxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbChCeVZhbEluCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfdmFsX2dlbmVyaWMp
KTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciwgc2l6ZV90IGVsZW1lbnRTaXplLCBUeXBlZEFycmF5U2lnbmVkbmVz
cyBzaWduZWRuZXNzKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0
eXBlKQogeworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisgICAgCiAgICAgLy8gVGhlIGJlc3Qg
d2F5IHRvIHRlc3QgdGhlIGFycmF5IHR5cGUgaXMgdG8gdXNlIHRoZSBjbGFzc0luZm8uIFdlIG5l
ZWQgdG8gZG8gc28gd2l0aG91dAogICAgIC8vIGNsb2JiZXJpbmcgdGhlIHJlZ2lzdGVyIHRoYXQg
aG9sZHMgdGhlIGluZGV4aW5nIHR5cGUsIGJhc2UsIGFuZCBwcm9wZXJ0eS4KIApAQCAtMTY4OSwx
OSArMTY0NiwxOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAg
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNo
YWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1cmU6OmNsYXNz
SW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fY2xhc3NJbmZvKSk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRy
ZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpKSk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgYmFzZSk7CisgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhzY3JhdGNoLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JUeXBlKHR5
cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGJhc2UpOwogICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUpIHsKKyAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoc2ln
bmVkbmVzcyA9PSBTaWduZWRUeXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkp
CiAgICAgICAgICAgICBsb2FkOFNpZ25lZChCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVz
T25lKSwgcmVzdWx0UGF5bG9hZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWQ4KEJh
c2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoc2lnbmVkbmVzcyA9PSBTaWduZWRU
eXBlZEFycmF5KQorICAgICAgICBpZiAoaXNTaWduZWQodHlwZSkpCiAgICAgICAgICAgICBsb2Fk
MTZTaWduZWQoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxv
YWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KGJhc2UsIHBy
b3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOwpAQCAtMTcxNCw3ICsxNjcxLDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5R2V0QgogICAgIH0KICAgICAKICAg
ICBKdW1wIGRvbmU7Ci0gICAgaWYgKGVsZW1lbnRTaXplID09IDQgJiYgc2lnbmVkbmVzcyA9PSBV
bnNpZ25lZFR5cGVkQXJyYXkpIHsKKyAgICBpZiAodHlwZSA9PSBUeXBlVWludDMyKSB7CiAgICAg
ICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFBh
eWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CiAgICAgICAgIAogICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShyZXN1bHRQYXlsb2FkLCBmcFJlZ1QwKTsKQEAgLTE3NDAsOCArMTY5NywxMCBAQCBK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCCiAgICAgcmV0dXJuIHNsb3dD
YXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZh
bChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKKyAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7CisgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2Ug
PSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CkBAIC0xNzU4LDExICsx
NzE3LDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2UKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxl
QnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZv
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
YmFzZSwgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBiYXNlKTsKKyAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHNjcmF0Y2gsIFN0cnVjdHVyZTo6
Y2xhc3NJbmZvT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKGNsYXNzSW5mb0ZvclR5cGUodHlwZSkp
KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHks
IEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSwgYmFzZSk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRj
aCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CiAgICAgICAgIGxvYWRGbG9hdChC
YXNlSW5kZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOwogICAgICAgICBj
b252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKQEAgLTE3ODksOCArMTc0OCwx
MCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAgcmV0dXJu
IHNsb3dDYXNlczsgICAgCiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBzaXplX3Qg
ZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTaWduZWRuZXNzIHNpZ25lZG5lc3MsIFR5cGVkQXJyYXlS
b3VuZGluZyByb3VuZGluZykKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsK
KyAgICAKICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTgwOCw4ICsxNzY5LDggQEAgSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaFB0cihOb3RF
cXVhbCwgQWRkcmVzcyhlYXJseVNjcmF0Y2gsIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV9jbGFzc0luZm8pKTsKLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgZGVz
Y3JpcHRvci5tX2xlbmd0aE9mZnNldCkpKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKICAgICAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2Ny
YXRjaCk7CkBAIC0xODIxLDExICsxNzgyLDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50
VHlwZWRBcnJheVB1dEIKICAgICAKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50
byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0
aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxhdGVTY3JhdGNoKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkp
LCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgaWYgKHJvdW5kaW5nID09IENsYW1wUm91bmRpbmcp
IHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplID09IDEpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHNpZ25lZG5lc3MsIHNpZ25lZG5lc3MgPSBVbnNpZ25lZFR5cGVkQXJyYXkpOworICAgIGlm
IChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09
IDEpOworICAgICAgICBBU1NFUlQoIWlzU2lnbmVkKHR5cGUpKTsKICAgICAgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIo
MHhmZikpOwogICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJs
eVNjcmF0Y2gsIFRydXN0ZWRJbW0zMigweGZmKSk7CiAgICAgICAgIHhvcjMyKGVhcmx5U2NyYXRj
aCwgZWFybHlTY3JhdGNoKTsKQEAgLTE4MzYsNyArMTc5Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKICAg
ICB9CiAgICAgCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gs
IEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTg1Myw4ICsxODE0LDEwIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEIKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yLCBzaXplX3QgZWxlbWVudFNpemUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CisgICAgQVNT
RVJUKGlzRmxvYXQodHlwZSkpOworICAgIAogICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xODcyLDgg
KzE4MzUsOCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKGVhcmx5U2NyYXRjaCwgU3RydWN0dXJl
OjpjbGFzc0luZm9PZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX2NsYXNzSW5m
bykpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0
eSwgQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSkpOworICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoZWFybHlTY3JhdGNoLCBT
dHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihjbGFzc0luZm9Gb3JU
eXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0
aCgpKSkpOwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKQEAgLTE4OTgsOSArMTg2MSw5IEBAIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAKICAgICAvLyBXZSB3b3VsZCBi
ZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRo
ZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIGxh
dGVTY3JhdGNoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7CiAgICAgCi0gICAgc3dpdGNoIChlbGVt
ZW50U2l6ZSkgeworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6
CiAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KGZwUmVnVDAsIGZwUmVnVDApOwogICAgICAg
ICBzdG9yZUZsb2F0KGZwUmVnVDAsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRp
bWVzRm91cikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5
QnVmZmVyLmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCwxMCArMTAsMTAgQEAKICAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpAQCAtMjYsMTQgKzI2LDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKIAotI2luY2x1ZGUg
IkFycmF5QnVmZmVyVmlldy5oIgotCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKyNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgQXJyYXlCdWZmZXI6OnRy
YW5zZmVyKEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCwgVmVjdG9yPFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+ID4mIG5ldXRlcmVkVmlld3MpCitib29sIEFycmF5QnVmZmVyOjp0cmFuc2ZlcihB
cnJheUJ1ZmZlckNvbnRlbnRzJiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBr
ZWVwQWxpdmUodGhpcyk7CiAKQEAgLTQyLDEzICs0MSw5IEBAIGJvb2wgQXJyYXlCdWZmZXI6OnRy
YW5zZmVyKEFycmF5QnVmZmVyQ28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IGJvb2wgYWxsVmlld3NBcmVOZXV0ZXJhYmxlID0gdHJ1ZTsKLSAgICBmb3IgKEFycmF5QnVmZmVy
VmlldyogaSA9IG1fZmlyc3RWaWV3OyBpOyBpID0gaS0+bV9uZXh0VmlldykgewotICAgICAgICBp
ZiAoIWktPmlzTmV1dGVyYWJsZSgpKQotICAgICAgICAgICAgYWxsVmlld3NBcmVOZXV0ZXJhYmxl
ID0gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNOZXV0ZXJhYmxlID0gIW1fcGluQ291bnQ7CiAK
LSAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlKQorICAgIGlmIChpc05ldXRlcmFibGUpCiAg
ICAgICAgIG1fY29udGVudHMudHJhbnNmZXIocmVzdWx0KTsKICAgICBlbHNlIHsKICAgICAgICAg
bV9jb250ZW50cy5jb3B5VG8ocmVzdWx0KTsKQEAgLTU2LDM2ICs1MSwxMyBAQCBib29sIEFycmF5
QnVmZmVyOjp0cmFuc2ZlcihBcnJheUJ1ZmZlckNvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgd2hpbGUgKG1fZmlyc3RWaWV3KSB7Ci0gICAgICAgIEFycmF5QnVmZmVy
VmlldyogY3VycmVudCA9IG1fZmlyc3RWaWV3OwotICAgICAgICByZW1vdmVWaWV3KGN1cnJlbnQp
OwotICAgICAgICBpZiAoYWxsVmlld3NBcmVOZXV0ZXJhYmxlIHx8IGN1cnJlbnQtPmlzTmV1dGVy
YWJsZSgpKQotICAgICAgICAgICAgY3VycmVudC0+bmV1dGVyKCk7Ci0gICAgICAgIG5ldXRlcmVk
Vmlld3MuYXBwZW5kKGN1cnJlbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJPZkluY29t
aW5nUmVmZXJlbmNlcygpOyBpLS07KSB7CisgICAgICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3
ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGluY29taW5nUmVmZXJlbmNlQXQo
aSkpOworICAgICAgICBpZiAodmlldykKKyAgICAgICAgICAgIHZpZXctPm5ldXRlcigpOwogICAg
IH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcnJheUJ1ZmZlcjo6YWRkVmlldyhBcnJh
eUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgdmlldy0+bV9idWZmZXIgPSB0aGlzOwotICAgIHZp
ZXctPm1fcHJldlZpZXcgPSAwOwotICAgIHZpZXctPm1fbmV4dFZpZXcgPSBtX2ZpcnN0VmlldzsK
LSAgICBpZiAobV9maXJzdFZpZXcpCi0gICAgICAgIG1fZmlyc3RWaWV3LT5tX3ByZXZWaWV3ID0g
dmlldzsKLSAgICBtX2ZpcnN0VmlldyA9IHZpZXc7Ci19Ci0KLXZvaWQgQXJyYXlCdWZmZXI6OnJl
bW92ZVZpZXcoQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIEFTU0VSVCh0aGlzID09IHZp
ZXctPm1fYnVmZmVyKTsKLSAgICBpZiAodmlldy0+bV9uZXh0VmlldykKLSAgICAgICAgdmlldy0+
bV9uZXh0Vmlldy0+bV9wcmV2VmlldyA9IHZpZXctPm1fcHJldlZpZXc7Ci0gICAgaWYgKHZpZXct
Pm1fcHJldlZpZXcpCi0gICAgICAgIHZpZXctPm1fcHJldlZpZXctPm1fbmV4dFZpZXcgPSB2aWV3
LT5tX25leHRWaWV3OwotICAgIGlmIChtX2ZpcnN0VmlldyA9PSB2aWV3KQotICAgICAgICBtX2Zp
cnN0VmlldyA9IHZpZXctPm1fbmV4dFZpZXc7Ci0gICAgdmlldy0+bV9wcmV2VmlldyA9IHZpZXct
Pm1fbmV4dFZpZXcgPSAwOwotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLX0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gMTU0MDkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTAsMTAgKzEwLDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKQEAgLTI2LDE1ICsyNiwxNyBAQAogI2lmbmRlZiBBcnJheUJ1ZmZlcl9oCiAjZGVmaW5l
IEFycmF5QnVmZmVyX2gKIAotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSAiR0NJ
bmNvbWluZ1JlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWFrLmgiCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKK2NsYXNzIEpT
QXJyYXlCdWZmZXI7CiAKIGNsYXNzIEFycmF5QnVmZmVyQ29udGVudHMgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEFycmF5QnVmZmVyQ29udGVudHMpOwpAQCAtNDUsNyArNDcsNyBAQCBwdWJs
aWM6CiAgICAgeyB9CiAKICAgICBpbmxpbmUgfkFycmF5QnVmZmVyQ29udGVudHMoKTsKLQorICAg
IAogICAgIHZvaWQqIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KICAgICB1bnNpZ25lZCBzaXpl
SW5CeXRlcygpIHsgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7IH0KIApAQCAtODYsMTIgKzg4LDEzIEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKIH07CiAKLWNsYXNzIEFycmF5
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKK2NsYXNzIEFycmF5QnVm
ZmVyIDogcHVibGljIEdDSW5jb21pbmdSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUodW5zaWdu
ZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgc3RhdGljIGlu
bGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGUoQXJyYXlCdWZmZXIqKTsKICAgICBz
dGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZShjb25zdCB2b2lkKiBz
b3VyY2UsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpOwogICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gY3JlYXRlKEFycmF5QnVmZmVyQ29udGVudHMmKTsKKyAgICBzdGF0aWMg
aW5saW5lIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGNyZWF0ZUFkb3B0ZWQoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7CiAKICAgICAvLyBPbmx5IGZvciB1c2UgYnkgVWlu
dDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQuCiAgICAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIG51bUVs
ZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwpAQCAtOTksMTQgKzEwMiwxNiBAQCBw
dWJsaWM6CiAgICAgaW5saW5lIHZvaWQqIGRhdGEoKTsKICAgICBpbmxpbmUgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0OwogICAgIGlubGluZSB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Cisg
ICAgCisgICAgaW5saW5lIHNpemVfdCBnY1NpemVFc3RpbWF0ZUluQnl0ZXMoKSBjb25zdDsKIAog
ICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQgYmVnaW4sIGludCBl
bmQpIGNvbnN0OwogICAgIGlubGluZSBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBzbGljZShpbnQg
YmVnaW4pIGNvbnN0OworICAgIAorICAgIGlubGluZSB2b2lkIHBpbigpOworICAgIGlubGluZSB2
b2lkIHVucGluKCk7CiAKLSAgICB2b2lkIGFkZFZpZXcoQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAg
dm9pZCByZW1vdmVWaWV3KEFycmF5QnVmZmVyVmlldyopOwotCi0gICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgdHJhbnNmZXIoQXJyYXlCdWZmZXJDb250ZW50cyYsIFZlY3RvcjxSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiA+JiBuZXV0ZXJlZFZpZXdzKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
Ym9vbCB0cmFuc2ZlcihBcnJheUJ1ZmZlckNvbnRlbnRzJik7CiAgICAgYm9vbCBpc05ldXRlcmVk
KCkgeyByZXR1cm4gIW1fY29udGVudHMubV9kYXRhOyB9CiAKICAgICB+QXJyYXlCdWZmZXIoKSB7
IH0KQEAgLTExOSw4ICsxMjQsMTEgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdW5zaWduZWQgY2xh
bXBJbmRleChpbnQgaW5kZXgpIGNvbnN0OwogICAgIHN0YXRpYyBpbmxpbmUgaW50IGNsYW1wVmFs
dWUoaW50IHgsIGludCBsZWZ0LCBpbnQgcmlnaHQpOwogCisgICAgdW5zaWduZWQgbV9waW5Db3Vu
dDsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIG1fY29udGVudHM7Ci0gICAgQXJyYXlCdWZmZXJW
aWV3KiBtX2ZpcnN0VmlldzsKKworcHVibGljOgorICAgIFdlYWs8SlNBcnJheUJ1ZmZlcj4gbV93
cmFwcGVyOwogfTsKIAogaW50IEFycmF5QnVmZmVyOjpjbGFtcFZhbHVlKGludCB4LCBpbnQgbGVm
dCwgaW50IHJpZ2h0KQpAQCAtMTU5LDYgKzE2NywxMiBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBBcnJheUJ1ZmZlcjo6Y3JlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheUJ1ZmZlcihj
b250ZW50cykpOwogfQogCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3Jl
YXRlQWRvcHRlZChjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBieXRlTGVuZ3RoKQoreworICAg
IEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHMoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSksIGJ5
dGVMZW5ndGgpOworICAgIHJldHVybiBjcmVhdGUoY29udGVudHMpOworfQorCiBQYXNzUmVmUHRy
PEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBu
dW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKQogewogICAgIHJldHVybiBjcmVh
dGUobnVtRWxlbWVudHMsIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250ZW50czo6RG9u
dEluaXRpYWxpemUpOwpAQCAtMTc0LDcgKzE4OCw3IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IEFycmF5QnVmZmVyOjpjcmUKIH0KIAogQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKEFycmF5QnVm
ZmVyQ29udGVudHMmIGNvbnRlbnRzKQotICAgIDogbV9maXJzdFZpZXcoMCkKKyAgICA6IG1fcGlu
Q291bnQoMCkKIHsKICAgICBjb250ZW50cy50cmFuc2ZlcihtX2NvbnRlbnRzKTsKIH0KQEAgLTE5
NCw2ICsyMDgsMTEgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAog
ICAgIHJldHVybiBtX2NvbnRlbnRzLm1fc2l6ZUluQnl0ZXM7CiB9CiAKK3NpemVfdCBBcnJheUJ1
ZmZlcjo6Z2NTaXplRXN0aW1hdGVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZW9m
KEFycmF5QnVmZmVyKSArIHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZUxlbmd0aCgpKTsKK30KKwog
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OnNsaWNlKGludCBiZWdpbiwgaW50
IGVuZCkgY29uc3QKIHsKICAgICByZXR1cm4gc2xpY2VJbXBsKGNsYW1wSW5kZXgoYmVnaW4pLCBj
bGFtcEluZGV4KGVuZCkpOwpAQCAtMjE4LDE1ICsyMzcsMjMgQEAgdW5zaWduZWQgQXJyYXlCdWZm
ZXI6OmNsYW1wSW5kZXgoaW50IGluZAogICAgIHJldHVybiBjbGFtcFZhbHVlKGluZGV4LCAwLCBj
dXJyZW50TGVuZ3RoKTsKIH0KIAordm9pZCBBcnJheUJ1ZmZlcjo6cGluKCkKK3sKKyAgICBtX3Bp
bkNvdW50Kys7Cit9CisKK3ZvaWQgQXJyYXlCdWZmZXI6OnVucGluKCkKK3sKKyAgICBtX3BpbkNv
dW50LS07Cit9CisKIHZvaWQgQXJyYXlCdWZmZXJDb250ZW50czo6dHJ5QWxsb2NhdGUodW5zaWdu
ZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSwgQXJyYXlCdWZmZXJDb250
ZW50czo6SW5pdGlhbGl6YXRpb25Qb2xpY3kgcG9saWN5LCBBcnJheUJ1ZmZlckNvbnRlbnRzJiBy
ZXN1bHQpCiB7Ci0gICAgLy8gRG8gbm90IGFsbG93IDMyLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90
YWwgc2l6ZS4KLSAgICAvLyBGSVhNRTogV2h5IG5vdD8gVGhlIHRyeUZhc3RDYWxsb2MgZnVuY3Rp
b24gYWxyZWFkeSBjaGVja3MgaXRzIGFyZ3VtZW50cywKLSAgICAvLyBhbmQgd2lsbCBmYWlsIGlm
IHRoZXJlIGlzIGFueSBvdmVyZmxvdywgc28gd2h5IHNob3VsZCB3ZSBpbmNsdWRlIGEKLSAgICAv
LyByZWR1ZGFudCB1bm5lY2Vzc2FyaWx5IHJlc3RyaWN0aXZlIGNoZWNrIGhlcmU/CisgICAgLy8g
RG8gbm90IGFsbG93IDMxLWJpdCBvdmVyZmxvdyBvZiB0aGUgdG90YWwgc2l6ZS4KICAgICBpZiAo
bnVtRWxlbWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgdG90YWxTaXplID0gbnVtRWxlbWVudHMg
KiBlbGVtZW50Qnl0ZVNpemU7Ci0gICAgICAgIGlmICh0b3RhbFNpemUgLyBudW1FbGVtZW50cyAh
PSBlbGVtZW50Qnl0ZVNpemUpIHsKKyAgICAgICAgaWYgKHRvdGFsU2l6ZSAvIG51bUVsZW1lbnRz
ICE9IGVsZW1lbnRCeXRlU2l6ZQorICAgICAgICAgICAgfHwgdG90YWxTaXplID4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkgewogICAg
ICAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IDA7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTI1NCw2ICsyODEsNiBAQCBBcnJheUJ1ZmZlckNvbnRlbnRzOjp+QXJyYXlCdWZmZXJD
b250ZW50CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogdXNpbmcgSlNDOjpBcnJheUJ1ZmZlcjsKLXVz
aW5nIEpTQzo6QXJyYXlCdWZmZXJDb250ZW50czsKIAogI2VuZGlmIC8vIEFycmF5QnVmZmVyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlCdWZmZXJWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZl
clZpZXcuY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMzYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCkKLSAg
ICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQotICAgICwgbV9pc05ldXRlcmFibGUodHJ1ZSkK
LSAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKLSAgICAsIG1fcHJldlZpZXcoMCkKLSAgICAsIG1fbmV4
dFZpZXcoMCkKK0FycmF5QnVmZmVyVmlldzo6QXJyYXlCdWZmZXJWaWV3KAorICAgIFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KQorICAgICAg
ICA6IG1fYnl0ZU9mZnNldChieXRlT2Zmc2V0KQorICAgICAgICAsIG1faXNOZXV0ZXJhYmxlKHRy
dWUpCisgICAgICAgICwgbV9idWZmZXIoYnVmZmVyKQogewogICAgIG1fYmFzZUFkZHJlc3MgPSBt
X2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX2J5dGVP
ZmZzZXQpIDogMDsKLSAgICBpZiAobV9idWZmZXIpIAotICAgICAgICBtX2J1ZmZlci0+YWRkVmll
dyh0aGlzKTsKIH0KIAogQXJyYXlCdWZmZXJWaWV3Ojp+QXJyYXlCdWZmZXJWaWV3KCkKIHsKLSAg
ICBpZiAobV9idWZmZXIpCi0gICAgICAgIG1fYnVmZmVyLT5yZW1vdmVWaWV3KHRoaXMpOworICAg
IGlmICghbV9pc05ldXRlcmFibGUpCisgICAgICAgIG1fYnVmZmVyLT51bnBpbigpOwogfQogCi12
b2lkIEFycmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3ZvaWQgQXJyYXlCdWZmZXJWaWV3OjpzZXRO
ZXV0ZXJhYmxlKGJvb2wgZmxhZykKIHsKLSAgICBtX2J1ZmZlciA9IDA7Ci0gICAgbV9ieXRlT2Zm
c2V0ID0gMDsKKyAgICBpZiAoZmxhZyA9PSBtX2lzTmV1dGVyYWJsZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG1faXNOZXV0ZXJhYmxlID0gZmxhZzsKKyAgICAKKyAgICBpZiAoIW1fYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZsYWcpCisgICAgICAgIG1fYnVm
ZmVyLT51bnBpbigpOworICAgIGVsc2UKKyAgICAgICAgbV9idWZmZXItPnBpbigpOwogfQogCi19
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NyArMjcsNyBAQAogI2RlZmluZSBBcnJheUJ1ZmZlclZpZXdfaAogCiAjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKLQorI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBA
IC0zNiw3NiArMzYsODkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTQXJyYXlCdWZm
ZXJWaWV3OworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBFeGVjU3RhdGU7CisKIGNsYXNz
IEFycmF5QnVmZmVyVmlldyA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyVmlldz4gewog
cHVibGljOgotICAgIGVudW0gVmlld1R5cGUgewotICAgICAgICBUeXBlSW50OCwKLSAgICAgICAg
VHlwZVVpbnQ4LAotICAgICAgICBUeXBlVWludDhDbGFtcGVkLAotICAgICAgICBUeXBlSW50MTYs
Ci0gICAgICAgIFR5cGVVaW50MTYsCi0gICAgICAgIFR5cGVJbnQzMiwKLSAgICAgICAgVHlwZVVp
bnQzMiwKLSAgICAgICAgVHlwZUZsb2F0MzIsCi0gICAgICAgIFR5cGVGbG9hdDY0LAotICAgICAg
ICBUeXBlRGF0YVZpZXcKLSAgICB9OwotICAgIHZpcnR1YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFR5cGVkQXJyYXlUeXBlIGdldFR5cGUoKSBjb25zdCA9IDA7
CiAKKyAgICBib29sIGlzTmV1dGVyZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFt
X2J1ZmZlciB8fCBtX2J1ZmZlci0+aXNOZXV0ZXJlZCgpOworICAgIH0KKyAgICAKICAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlz
TmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9idWZm
ZXI7CiAgICAgfQogCiAgICAgdm9pZCogYmFzZUFkZHJlc3MoKSBjb25zdAogICAgIHsKKyAgICAg
ICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1
cm4gbV9iYXNlQWRkcmVzczsKICAgICB9CiAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0KCkgY29u
c3QKICAgICB7CisgICAgICAgIGlmIChpc05ldXRlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgcmV0dXJuIG1fYnl0ZU9mZnNldDsKICAgICB9CiAKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHNldE5ldXRlcmFibGUo
Ym9vbCBmbGFnKSB7IG1faXNOZXV0ZXJhYmxlID0gZmxhZzsgfQorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2V0TmV1dGVyYWJsZShib29sIGZsYWcpOwogICAgIGJvb2wgaXNOZXV0ZXJhYmxl
KCkgY29uc3QgeyByZXR1cm4gbV9pc05ldXRlcmFibGU7IH0KIAogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2aXJ0dWFsIH5BcnJheUJ1ZmZlclZpZXcoKTsKIAotcHJvdGVjdGVkOgotICAgIFdURl9F
WFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZl
clZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKLQotICAgIGlubGluZSBib29sIHNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKLQotICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBh
cnJheVNpemUsIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOwotCiAgICAgLy8g
SGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVy
IGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAg
IHN0YXRpYyBib29sIHZlcmlmeVN1YlJhbmdlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbnVtRWxlbWVudHMpCisgICAgc3RhdGlj
IGJvb2wgdmVyaWZ5U3ViUmFuZ2UoCisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1
ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgbnVt
RWxlbWVudHMpCiAgICAgewotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOwogICAgICAgICBpZiAoc2l6ZW9mKFQpID4gMSAmJiBieXRlT2Zmc2V0ICUgc2l6ZW9mKFQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICBpZiAoYnl0ZU9mZnNldCA+IGJ5dGVMZW5ndGgp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0Vs
ZW1lbnRzID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gYnl0ZU9mZnNldCkgLyBzaXplb2YoVCk7
CisgICAgICAgIHVuc2lnbmVkIHJlbWFpbmluZ0VsZW1lbnRzID0gKGJ5dGVMZW5ndGggLSBieXRl
T2Zmc2V0KSAvIHNpemVvZihUKTsKICAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gcmVtYWluaW5n
RWxlbWVudHMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXJWaWV3KiB3cmFwKEV4ZWNT
dGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIFdURl9F
WFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZlclZpZXcoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgc2V0SW1wbChBcnJheUJ1ZmZl
clZpZXcqLCB1bnNpZ25lZCBieXRlT2Zmc2V0KTsKKworICAgIGlubGluZSBib29sIHNldFJhbmdl
SW1wbChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YUJ5dGVMZW5ndGgsIHVuc2lnbmVkIGJ5
dGVPZmZzZXQpOworCisgICAgaW5saW5lIGJvb2wgemVyb1JhbmdlSW1wbCh1bnNpZ25lZCBieXRl
T2Zmc2V0LCBzaXplX3QgcmFuZ2VCeXRlTGVuZ3RoKTsKKworICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoCisgICAgICAgIGludCBzdGFydCwgaW50IGVuZCwg
dW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCog
bGVuZ3RoKTsKIAogICAgIC8vIElucHV0IG9mZnNldCBpcyBpbiBudW1iZXIgb2YgZWxlbWVudHMg
ZnJvbSB0aGlzIGFycmF5J3MgdmlldzsKICAgICAvLyBvdXRwdXQgb2Zmc2V0IGlzIGluIG51bWJl
ciBvZiBieXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlcidzIHZpZXcuCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50
cyhQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGFycmF5Qnl0ZU9mZnNl
dCwgdW5zaWduZWQgKm9mZnNldCwgdW5zaWduZWQgKm51bUVsZW1lbnRzKQorICAgIHN0YXRpYyB2
b2lkIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHMoCisgICAgICAgIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgdW5zaWduZWQgYXJyYXlCeXRlT2Zmc2V0LAorICAgICAg
ICB1bnNpZ25lZCAqb2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCAqbnVtRWxlbWVudHMpCiAgICAg
ewogICAgICAgICB1bnNpZ25lZCBtYXhPZmZzZXQgPSAoVUlOVF9NQVggLSBhcnJheUJ5dGVPZmZz
ZXQpIC8gc2l6ZW9mKFQpOwogICAgICAgICBpZiAoKm9mZnNldCA+IG1heE9mZnNldCkgewpAQCAt
MTE5LDggKzEzMiw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgKm51bUVsZW1lbnRzID0gc3RkOjpt
aW4ocmVtYWluaW5nRWxlbWVudHMsICpudW1FbGVtZW50cyk7CiAgICAgfQogCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZpcnR1YWwgdm9pZCBuZXV0ZXIoKTsKLQogICAgIC8vIFRoaXMgaXMgdGhl
IGFkZHJlc3Mgb2YgdGhlIEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgYnl0ZSBvZmZz
ZXQuCiAgICAgdm9pZCogbV9iYXNlQWRkcmVzczsKIApAQCAtMTMwLDggKzE0MSw2IEBAIHByb3Rl
Y3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFycmF5QnVmZmVyOwogICAgIFJlZlB0
cjxBcnJheUJ1ZmZlcj4gbV9idWZmZXI7Ci0gICAgQXJyYXlCdWZmZXJWaWV3KiBtX3ByZXZWaWV3
OwotICAgIEFycmF5QnVmZmVyVmlldyogbV9uZXh0VmlldzsKIH07CiAKIGJvb2wgQXJyYXlCdWZm
ZXJWaWV3OjpzZXRJbXBsKEFycmF5QnVmZmVyVmlldyogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQpCkBAIC0xNzYsNyArMTg1LDggQEAgYm9vbCBBcnJheUJ1ZmZlclZpZXc6Onplcm9SYW5nZUlt
cGwodW5zaQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFycmF5QnVmZmVyVmlldzo6Y2Fs
Y3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlT
aXplLCB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQordm9pZCBBcnJheUJ1ZmZl
clZpZXc6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aCgKKyAgICBpbnQgc3RhcnQsIGludCBlbmQs
IHVuc2lnbmVkIGFycmF5U2l6ZSwgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCkK
IHsKICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCArPSBhcnJheVNpemU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTU0
MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBIYXNo
RW50cnk7CitjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIHN0cnVjdCBIYXNoVGFibGU7CiAKIHN0
cnVjdCBNZXRob2RUYWJsZSB7CkBAIC05Niw2ICs5NywxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUg
ewogCiAgICAgdHlwZWRlZiBib29sICgqR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRnVuY3Rpb25Q
dHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKICAgICBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JGdW5jdGlvblB0ciBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3I7CisgICAgCisgICAgdHlwZWRlZiB2b2lkICgqU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7CisgICAgCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4gKCpHZXRUeXBlZEFycmF5SW1wbCkoSlNBcnJheUJ1ZmZlclZpZXcqKTsK
KyAgICBHZXRUeXBlZEFycmF5SW1wbCBnZXRUeXBlZEFycmF5SW1wbDsKIH07CiAKICNkZWZpbmUg
Q1JFQVRFX01FTUJFUl9DSEVDS0VSKG1lbWJlcikgXApAQCAtMTM5LDYgKzE0Niw4IEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OnB1dERpcmVjdFZpcnR1YWwsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBcCisgICAgICAgICZDbGFzc05hbWU6OnNs
b3dEb3duQW5kV2FzdGVNZW1vcnksIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0VHlwZWRBcnJh
eUltcGwgXAogICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50
aWZpZXJzLmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vbklkZW50aWZpZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAK
IC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCiAjZGVmaW5lIEpTQ19DT01NT05f
SURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8oQXJyYXkp
IFwKKyAgICBtYWNybyhBcnJheUJ1ZmZlcikgXAorICAgIG1hY3JvKEJZVEVTX1BFUl9FTEVNRU5U
KSBcCiAgICAgbWFjcm8oQm9vbGVhbikgXAogICAgIG1hY3JvKERhdGUpIFwKICAgICBtYWNybyhF
cnJvcikgXApAQCAtNTUsNiArNTcsOSBAQAogICAgIG1hY3JvKGFwcGx5KSBcCiAgICAgbWFjcm8o
YXJndW1lbnRzKSBcCiAgICAgbWFjcm8oYmluZCkgXAorICAgIG1hY3JvKGJ1ZmZlcikgXAorICAg
IG1hY3JvKGJ5dGVMZW5ndGgpIFwKKyAgICBtYWNybyhieXRlT2Zmc2V0KSBcCiAgICAgbWFjcm8o
Ynl0ZWNvZGUpIFwKICAgICBtYWNybyhieXRlY29kZUluZGV4KSBcCiAgICAgbWFjcm8oYnl0ZWNv
ZGVzKSBcCkBAIC0xMTIsOSArMTE3LDExIEBACiAgICAgbWFjcm8ocHJvcGVydHlJc0VudW1lcmFi
bGUpIFwKICAgICBtYWNybyhwcm90b3R5cGUpIFwKICAgICBtYWNybyhzZXQpIFwKKyAgICBtYWNy
byhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwK
ICAgICBtYWNybyhzdGFjaykgXAorICAgIG1hY3JvKHN1YmFycmF5KSBcCiAgICAgbWFjcm8odGVz
dCkgXAogICAgIG1hY3JvKHRvRXhwb25lbnRpYWwpIFwKICAgICBtYWNybyh0b0ZpeGVkKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRhVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGF0YVZpZXcuaCIKKworI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YVZpZXc6OkRhdGFWaWV3
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgYnl0ZUxlbmd0aCkKKyAgICA6IEFycmF5QnVmZmVyVmlldyhidWZmZXIsIGJ5dGVPZmZz
ZXQpCisgICAgLCBtX2J5dGVMZW5ndGgoYnl0ZUxlbmd0aCkKK3sKK30KKworUGFzc1JlZlB0cjxE
YXRhVmlldz4gRGF0YVZpZXc6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5n
dGgpKTsKK30KKworSlNBcnJheUJ1ZmZlclZpZXcqIERhdGFWaWV3Ojp3cmFwKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNEYXRh
Vmlldzo6Y3JlYXRlKAorICAgICAgICBleGVjLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUoVHlwZURhdGFWaWV3KSwgYnVmZmVyKCksIGJ5dGVPZmZzZXQoKSwKKyAgICAgICAgYnl0
ZUxlbmd0aCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRGF0YVZpZXdfaAorI2RlZmluZSBEYXRhVmlld19oCisKKyNpbmNs
dWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIERhdGFW
aWV3IDogcHVibGljIEFycmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgRGF0YVZpZXco
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5
dGVMZW5ndGgpOworICAgIAorcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGFWaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgdmlydHVhbCB1bnNp
Z25lZCBieXRlTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5dGVMZW5n
dGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgVHlwZWRBcnJheVR5cGUgZ2V0VHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gVHlwZURhdGFWaWV3OworICAgIH0KKworICAgIHZp
cnR1YWwgSlNBcnJheUJ1ZmZlclZpZXcqIHdyYXAoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0KHVuc2lnbmVkIG9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAg
ICBpZiAoc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0
ZUxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIHJldHVybiBUKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqc3RhdHVzID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihvZmZzZXQgKyBzaXplb2YoVCkgPD0gYnl0ZUxlbmd0aCgpKTsKKyAgICAgICAg
cmV0dXJuIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKAorICAgICAgICAgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2Jhc2VBZGRyZXNzKSArIG9mZnNldCks
CisgICAgICAgICAgICBsaXR0bGVFbmRpYW4pOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHZvaWQgc2V0KHVuc2lnbmVkIG9mZnNldCwgVCB2YWx1ZSwgYm9vbCBs
aXR0bGVFbmRpYW4sIGJvb2wqIHN0YXR1cyA9IDApCisgICAgeworICAgICAgICBpZiAoc3RhdHVz
KSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZW9mKFQpID4gYnl0ZUxlbmd0aCgpKSB7
CisgICAgICAgICAgICAgICAgKnN0YXR1cyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpzdGF0dXMgPSB0cnVlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNl
dCArIHNpemVvZihUKSA8PSBieXRlTGVuZ3RoKCkpOworICAgICAgICAqcmVpbnRlcnByZXRfY2Fz
dDxUKj4oc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYmFzZUFkZHJlc3MpICsgb2Zmc2V0KSA9Cisg
ICAgICAgICAgICBmbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbih2YWx1ZSwgbGl0dGxlRW5kaWFuKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9ieXRlTGVuZ3RoOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEYXRhVmlld19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GbG9hdDMyQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKICAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgpA
QCAtMjcsODEgKzI2LDkgQEAKICNpZm5kZWYgRmxvYXQzMkFycmF5X2gKICNkZWZpbmUgRmxvYXQz
MkFycmF5X2gKIAotI2luY2x1ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0MzJBcnJheSA6IHB1
YmxpYyBUeXBlZEFycmF5QmFzZTxmbG9hdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUg
UGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0
YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IGNyZWF0ZShjb25zdCBmbG9hdCog
YXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZs
b2F0MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3
aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAg
Ly8gbm90IHJldHVybiB0aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91
dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJy
YXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5
cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFz
ZTxmbG9hdD46Om1fbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBUeXBlZEFy
cmF5QmFzZTxmbG9hdD46OmRhdGEoKVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUp
OwotICAgIH0KLQotICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gc3ViYXJyYXko
aW50IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IHN1
YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBl
IGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDMyOwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgRmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIC8vIE1h
a2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBU
eXBlZEFycmF5QmFzZTxmbG9hdD47Ci19OwotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxv
YXQzMkFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFy
cmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OmNyZWF0ZShjb25zdCBmbG9hdCogYXJy
YXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZmxvYXQ+
OjpjcmVhdGU8RmxvYXQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxG
bG9hdDMyQXJyYXk+IEZsb2F0MzJBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJl
dHVybiBUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxGbG9hdDMyQXJyYXk+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDMyQXJyYXk+IEZsb2F0
MzJBcnJheTo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDMyQXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0MzJBcnJheTo6RmxvYXQzMkFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotICAgIDogVHlwZWRBcnJheUJhc2U8ZmxvYXQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3Ro
KQotewotfQotCi1QYXNzUmVmUHRyPEZsb2F0MzJBcnJheT4gRmxvYXQzMkFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgo
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8RmxvYXQzMkFycmF5PiBGbG9hdDMyQXJyYXk6OnN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEZs
b2F0MzJBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1
ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6RmxvYXQzMkFycmF5OwogCiAjZW5kaWYg
Ly8gRmxvYXQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RmxvYXQ2NEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmxvYXQ2NEFycmF5LmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Zsb2F0NjRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDk4ICsxMCwyNSBAQAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
ICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAK
ICNpZm5kZWYgRmxvYXQ2NEFycmF5X2gKICNkZWZpbmUgRmxvYXQ2NEFycmF5X2gKIAotI2luY2x1
ZGUgIlR5cGVkQXJyYXlCYXNlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEZsb2F0NjRBcnJheSA6IHB1YmxpYyBUeXBlZEFycmF5QmFz
ZTxkb3VibGU+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2
NEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVhdGUoY29uc3QgZG91YmxlKiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gY3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdXNpbmcgVHlwZWRBcnJheUJhc2U8ZG91
YmxlPjo6c2V0OwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBUeXBlZEFycmF5QmFzZTxkb3VibGU+OjptX2xl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgVHlwZWRBcnJheUJhc2U8ZG91Ymxl
Pjo6ZGF0YSgpW2luZGV4XSA9IHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpOwotICAgIH0KLQot
ICAgIGlubGluZSBQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBj
b25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVGbG9hdDY0OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBpbmxpbmUgRmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIAotICAgIC8vIE1ha2UgY29u
c3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgotICAgIGZyaWVuZCBjbGFzcyBUeXBlZEFy
cmF5QmFzZTxkb3VibGU+OwotfTsKLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRB
cnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJh
c2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4obGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6Y3JlYXRlKGNvbnN0IGRvdWJsZSogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6
Y3JlYXRlPEZsb2F0NjRBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8Rmxv
YXQ2NEFycmF5PiBGbG9hdDY0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBi
dWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlPEZsb2F0NjRBcnJheT4oYnVmZmVyLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2
NEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1
cm4gVHlwZWRBcnJheUJhc2U8ZG91YmxlPjo6Y3JlYXRlVW5pbml0aWFsaXplZDxGbG9hdDY0QXJy
YXk+KGxlbmd0aCk7Ci19Ci0KLUZsb2F0NjRBcnJheTo6RmxvYXQ2NEFycmF5KFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3Ro
KQotICAgIDogVHlwZWRBcnJheUJhc2U8ZG91YmxlPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0
aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+IEZsb2F0NjRBcnJheTo6c3ViYXJy
YXkoaW50IHN0YXJ0KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3Ro
KCkpOwotfQotCi1QYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4gRmxvYXQ2NEFycmF5OjpzdWJhcnJh
eShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5SW1wbDxG
bG9hdDY0QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNs
dWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6OkZsb2F0NjRBcnJheTsKIAogI2VuZGlm
IC8vIEZsb2F0NjRBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKyNkZWZpbmUg
R2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5j
bHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgorY2xhc3MgR2VuZXJpY1R5cGVkQXJyYXlWaWV3IDogcHVibGljIEFy
cmF5QnVmZmVyVmlldyB7Citwcm90ZWN0ZWQ6CisgICAgR2VuZXJpY1R5cGVkQXJyYXlWaWV3KFBh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5l
cmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZShjb25zdCB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW5lcmljVHlw
ZWRBcnJheVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KGJhc2VBZGRyZXNzKCkpOyB9
CisgICAgCisgICAgYm9vbCBzZXQoR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBhcnJh
eSwgdW5zaWduZWQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNldEltcGwoYXJyYXks
IG9mZnNldCAqIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgc2V0UmFuZ2UoY29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogZGF0YSwgc2l6
ZV90IGRhdGFMZW5ndGgsIHVuc2lnbmVkIG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
ZXRSYW5nZUltcGwoCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
YXRhKSwKKyAgICAgICAgICAgIGRhdGFMZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSksCisgICAgICAgICAgICBvZmZzZXQgKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHplcm9SYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHNp
emVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gemVyb1JhbmdlSW1wbChvZmZzZXQg
KiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksIGxlbmd0aCAqIHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgemVyb0ZpbGwoKSB7IHpl
cm9SYW5nZSgwLCBsZW5ndGgoKSk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzTmV1dGVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbV9sZW5ndGg7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdW5z
aWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbGVuZ3RoKCkg
KiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CisgICAgfQorCisgICAgdHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7
CisgICAgICAgIHJldHVybiBkYXRhKClbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCB0aGlzLT5sZW5ndGgoKSk7Cisg
ICAgICAgIGRhdGEoKVtpbmRleF0gPSBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2hlY2tJbmJvdW5kRGF0YSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXMtPmxlbmd0
aCgpOworICAgICAgICByZXR1cm4gKG9mZnNldCA8PSBsZW5ndGgKKyAgICAgICAgICAgICYmIG9m
ZnNldCArIHBvcyA8PSBsZW5ndGgKKyAgICAgICAgICAgIC8vIGNoZWNrIG92ZXJmbG93CisgICAg
ICAgICAgICAmJiBvZmZzZXQgKyBwb3MgPj0gb2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgUGFz
c1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFydCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc+IHN1YmFycmF5KGludCBzdGFy
dCwgaW50IGVuZCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBUeXBlZEFycmF5VHlwZSBnZXRU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBBZGFwdG9yOjp0eXBlVmFsdWU7Cisg
ICAgfQorCisgICAgdmlydHVhbCBKU0FycmF5QnVmZmVyVmlldyogd3JhcChFeGVjU3RhdGUqLCBK
U0dsb2JhbE9iamVjdCopOworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBHZW5lcmljVHlwZWRBcnJheVZpZXdf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXNf
aAorI2RlZmluZSBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzX2gKKworI2luY2x1ZGUgIkdl
bmVyaWNUeXBlZEFycmF5Vmlldy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpHZW5lcmljVHlwZWRBcnJheVZpZXcoCisgICAgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpCisgICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQorICAgICwgbV9s
ZW5ndGgobGVuZ3RoKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1Jl
ZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHR5cGVu
YW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+CitQYXNzUmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PiA+IEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIGNvbnN0IHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVm
UHRyPEdlbmVyaWNUeXBlZEFycmF5Vmlldz4gcmVzdWx0ID0gY3JlYXRlKGxlbmd0aCk7CisgICAg
bWVtY3B5KHJlc3VsdC0+ZGF0YSgpLCBhcnJheSwgbGVuZ3RoICogc2l6ZW9mKHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPiBH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsK
KyAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPHR5cGVuYW1lIEFkYXB0b3I6OlR5cGU+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBHZW5lcmljVHlwZWRBcnJheVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+ID4KK0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPQorICAgICAgICBBcnJheUJ1ZmZlcjo6Y3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAw
LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorUGFzc1JlZlB0cjxH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4gPgorR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1YmFycmF5
KHN0YXJ0LCBsZW5ndGgoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitQYXNz
UmVmUHRyPEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiA+CitHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj46OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKK3sKKyAg
ICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgo
c3RhcnQsIGVuZCwgdGhpcy0+bGVuZ3RoKCksICZvZmZzZXQsICZsZW5ndGgpOworICAgIGNsYW1w
T2Zmc2V0QW5kTnVtRWxlbWVudHM8QWRhcHRvcjo6VHlwZT4oYnVmZmVyKCksIGJ5dGVPZmZzZXQo
KSwgJm9mZnNldCwgJmxlbmd0aCk7CisgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0
LCBsZW5ndGgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNBcnJheUJ1ZmZl
clZpZXcqIEdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6d3JhcCgKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEFk
YXB0b3I6OkpTVmlld1R5cGU6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0oKSwgZ2xvYmFsT2Jq
ZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKEFkYXB0b3I6OnR5cGVWYWx1ZSksIHRoaXMpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ0hl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4
aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQnV0dGVyZmx5
OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgU3RydWN0dXJlOwpAQCAtNjQs
NiArNjUsOSBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgcHVibGljTGVuZ3RoKCkgeyByZXR1cm4g
dS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0UHVibGljTGVuZ3RoKHVpbnQz
Ml90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9IGF1eFdvcmQ7IH0KICAgICAK
KyAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVybiB1LnR5cGVkQXJyYXkuYnVm
ZmVyOyB9CisgICAgdm9pZCBzZXRBcnJheUJ1ZmZlcihBcnJheUJ1ZmZlciogYnVmZmVyKSB7IHUu
dHlwZWRBcnJheS5idWZmZXIgPSBidWZmZXI7IH0KKyAgICAKICAgICBzdGF0aWMgSW5kZXhpbmdI
ZWFkZXIqIGZyb20oQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgewogICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxJbmRleGluZ0hlYWRlcio+KGJ1dHRlcmZseSkgLSAxOwpAQCAtMTE3
LDYgKzEyMSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
OyAvLyBUaGUgbWVhbmluZyBvZiB0aGlzIGZpZWxkIGRlcGVuZHMgb24gdGhlIGFycmF5IHR5cGUs
IGJ1dCBmb3IgYWxsIEpTQXJyYXlzIHdlIHJlbHkgb24gdGhpcyBiZWluZyB0aGUgcHVibGljbHkg
dmlzaWJsZSBsZW5ndGggKGFycmF5Lmxlbmd0aCkuCiAgICAgICAgICAgICB1aW50MzJfdCB2ZWN0
b3JMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4g
VGhlIGFjdHVhbCBzaXplIG9mIHRoZSBzdG9yYWdlIGRlcGVuZHMgb24gdGhpcywgYW5kIHRoZSB0
eXBlLgogICAgICAgICB9IGxlbmd0aHM7CisgICAgICAgIAorICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcjsKKyAgICAgICAgfSB0eXBlZEFycmF5OwogICAg
IH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJh
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDhBcnJh
eS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnQ4QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMSwxMCArMTAsMTAgQEAKICAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgpAQCAtMjcsNzcgKzI2LDkgQEAKICNpZm5kZWYgSW50OEFycmF5X2gK
ICNkZWZpbmUgSW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQ4
QXJyYXkgOiBwdWJsaWMgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ4X3Q+IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUo
Y29uc3QgaW50OF90KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8SW50OEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25s
eSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxl
ZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNj
cmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRy
PEludDhBcnJheT4gY3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
dXNpbmcgVHlwZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotICAgIHVzaW5nIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50OF90Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50OEFy
cmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPElu
dDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgVmlld1R5cGUgZ2V0VHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gVHlwZUlu
dDg7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGlubGluZSBJbnQ4QXJyYXkoUGFzc1JlZlB0cjxB
cnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAg
ICAvLyBNYWtlIGNvbnN0cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQg
Y2xhc3MgVHlwZWRBcnJheUJhc2U8aW50OF90PjsKLX07Ci0KLVBhc3NSZWZQdHI8SW50OEFycmF5
PiBJbnQ4QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50OEFycmF5PiBJbnQ4QXJyYXk6OmNyZWF0ZShjb25zdCBpbnQ4X3QqIGFycmF5LCB1
bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDhfdD46OmNy
ZWF0ZTxJbnQ4QXJyYXk+KGFycmF5LCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPEludDhBcnJh
eT4gSW50OEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJy
YXlCYXNlPGludDhfdD46OmNyZWF0ZTxJbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6Y3JlYXRlVW5pbml0
aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGlu
dDhfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50OEFycmF5PihsZW5ndGgpOwotfQotCi1JbnQ4
QXJyYXk6OkludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRBcnJheUJh
c2U8aW50OF90PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0
cjxJbnQ4QXJyYXk+IEludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25zdAotewotICAg
IHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVmUHRyPEludDhB
cnJheT4gSW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN1YmFycmF5SW1wbDxJbnQ4QXJyYXk+KHN0YXJ0LCBlbmQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1c2luZyBKU0M6Oklu
dDhBcnJheTsKIAogI2VuZGlmIC8vIEludDhBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnQxNkFycmF5LmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDE2QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAsMTAgKzEw
LDEwIEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgog
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI2LDc3ICsy
Niw5IEBACiAjaWZuZGVmIEludDE2QXJyYXlfaAogI2RlZmluZSBJbnQxNkFycmF5X2gKIAotI2lu
Y2x1ZGUgIkludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNs
YXNzIEFycmF5QnVmZmVyOwotCi1jbGFzcyBJbnQxNkFycmF5IDogcHVibGljIEludGVncmFsVHlw
ZWRBcnJheUJhc2U8aW50MTZfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxJbnQxNkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5s
aW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gY3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1
bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMg
a25vd24gdGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0
dXJuIHRoZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcg
Zmlyc3QuCi0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDE2QXJyYXk+IGNyZWF0ZVVu
aW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNl
PGludDE2X3Q+OjpzZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQxNl90
Pjo6c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8SW50MTZBcnJheT4gc3ViYXJyYXkoaW50
IHN0YXJ0KSBjb25zdDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBzdWJhcnJh
eShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRU
eXBlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlSW50MTY7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGlubGluZSBJbnQxNkFycmF5KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1
bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gTWFrZSBjb25z
dHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJy
YXlCYXNlPGludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5
OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTxp
bnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50
MTZBcnJheT4gSW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IGludDE2X3QqIGFycmF5LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludDE2X3Q+OjpjcmVhdGU8
SW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MTZBcnJheT4g
SW50MTZBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWdu
ZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5
QmFzZTxpbnQxNl90Pjo6Y3JlYXRlPEludDE2QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVu
Z3RoKTsKLX0KLQotUGFzc1JlZlB0cjxJbnQxNkFycmF5PiBJbnQxNkFycmF5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8
aW50MTZfdD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MTZBcnJheT4obGVuZ3RoKTsKLX0KLQot
SW50MTZBcnJheTo6SW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFsVHlwZWRB
cnJheUJhc2U8aW50MTZfdD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCi17Ci19Ci0KLVBh
c3NSZWZQdHI8SW50MTZBcnJheT4gSW50MTZBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dAotewotICAgIHJldHVybiBzdWJhcnJheShzdGFydCwgbGVuZ3RoKCkpOwotfQotCi1QYXNzUmVm
UHRyPEludDE2QXJyYXk+IEludDE2QXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPEludDE2QXJyYXk+KHN0YXJ0LCBlbmQp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgogCiB1
c2luZyBKU0M6OkludDE2QXJyYXk7CiAKICNlbmRpZiAvLyBJbnQxNkFycmF5X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludDMyQXJyYXkuaAkocmV2aXNpb24gMTU0
MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50MzJBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTExLDEwICsxMCwxMCBAQAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CkBAIC0yNyw3NCArMjYsOSBAQAogI2lmbmRlZiBJbnQzMkFycmF5X2gKICNkZWZpbmUgSW50MzJB
cnJheV9oCiAKLSNpbmNsdWRlICJJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBJbnQzMkFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJh
c2U8aW50PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEludDMyQXJy
YXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBjcmVhdGUoY29uc3QgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsK
LSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8SW50MzJBcnJheT4gY3JlYXRlKFBhc3NSZWZQ
dHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwot
Ci0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3duIHRoZSBlbnRpcmUg
YXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0aGVzZSByZXN1bHRz
IGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0LgotICAgIHN0YXRp
YyBpbmxpbmUgUGFzc1JlZlB0cjxJbnQzMkFycmF5PiBjcmVhdGVVbmluaXRpYWxpemVkKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0gICAg
dXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7Ci0KLSAgICBpbmxpbmUgUGFz
c1JlZlB0cjxJbnQzMkFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0OwotICAgIGlubGlu
ZSBQYXNzUmVmUHRyPEludDMyQXJyYXk+IHN1YmFycmF5KGludCBzdGFydCwgaW50IGVuZCkgY29u
c3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFR5cGVJbnQzMjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgaW5saW5lIEludDMy
QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xh
c3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPGludD47Ci19OwotCi1QYXNzUmVm
UHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0g
ICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihsZW5ndGgp
OwotfQotCi1QYXNzUmVmUHRyPEludDMyQXJyYXk+IEludDMyQXJyYXk6OmNyZWF0ZShjb25zdCBp
bnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihhcnJheSwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0
cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0
dXJuIFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxJbnQzMkFycmF5PihidWZmZXIsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVk
QXJyYXlCYXNlPGludD46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQ8SW50MzJBcnJheT4obGVuZ3RoKTsK
LX0KLQotSW50MzJBcnJheTo6SW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZm
ZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IEludGVncmFs
VHlwZWRBcnJheUJhc2U8aW50PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQot
UGFzc1JlZlB0cjxJbnQzMkFycmF5PiBJbnQzMkFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NS
ZWZQdHI8SW50MzJBcnJheT4gSW50MzJBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5k
KSBjb25zdAotewotICAgIHJldHVybiBzdWJhcnJheUltcGw8SW50MzJBcnJheT4oc3RhcnQsIGVu
ZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAK
IHVzaW5nIEpTQzo6SW50MzJBcnJheTsKIAogI2VuZGlmIC8vIEludDMyQXJyYXlfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlci5oIgorCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUg
IlJlamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlC
dWZmZXI6OnNfaW5mbyA9IHsKKyAgICAiQXJyYXlCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlCdWZmZXIpfTsKKworSlNBcnJheUJ1ZmZlcjo6
SlNBcnJheUJ1ZmZlcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFy
cmF5QnVmZmVyPiBhcnJheUJ1ZmZlcikKKyAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAs
IG1faW1wbChhcnJheUJ1ZmZlci5nZXQoKSkKK3sKK30KKwordm9pZCBKU0FycmF5QnVmZmVyOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIHZtLmhlYXAuYWRkUmVmZXJlbmNlKHRoaXMsIG1faW1wbCk7Cit9CisKK0pTQXJyYXlCdWZm
ZXIqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBwYXNzZWRCdWZmZXIpCit7CisgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgSlNBcnJheUJ1ZmZlciog
cmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZl
cj4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXIodm0sIHN0cnVjdHVyZSwgYnVmZmVy
KTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitTdHJ1Y3R1cmUqIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwK
KyAgICAgICAgTm9uQXJyYXkpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOworICAgIAor
ICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgp
IHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5
dGVMZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlCdWZmZXI6OmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsCisgICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9i
amVjdCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYnl0ZUxlbmd0aCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAg
ICAgICAgICBqc051bWJlcih0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKSksIERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlcjo6cHV0
KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAg
ICBKU0FycmF5QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihjZWxs
KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5i
eXRlTGVuZ3RoKSB7CisgICAgICAgIHJlamVjdChleGVjLCBzbG90LmlzU3RyaWN0TW9kZSgpLCAi
QXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBhcnJheSBidWZmZXIgcHJvcGVydHku
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQmFzZTo6cHV0KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXI6OmRlZmluZU93blByb3BlcnR5KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNBcnJheUJ1ZmZlciog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAgICBp
ZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKQorICAg
ICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byBkZWZp
bmUgcmVhZC1vbmx5IGFycmF5IGJ1ZmZlciBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICByZXR1cm4g
QmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyKj4oY2VsbCk7CisgICAgCisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOworfQorCit2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcygKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZl
ciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKKyAgICAKKyAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgIAorICAgIEJhc2U6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIEpTQXJyYXlCdWZmZXJfaAorCisjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNBcnJheUJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBKU0FycmF5QnVmZmVyKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICAKK3B1YmxpYzoKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNBcnJheUJ1ZmZlciogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4pOworICAgIAorICAgIEFycmF5QnVmZmVy
KiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CisgICAgCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3Rv
dHlwZSk7CisgICAgCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJik7CisgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Cisg
ICAgCisgICAgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOworCitwcml2YXRlOgorICAgIEFycmF5QnVmZmVyKiBtX2ltcGw7Cit9OworCitpbmxp
bmUgQXJyYXlCdWZmZXIqIHRvQXJyYXlCdWZmZXIoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4odmFsdWUp
OworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHdyYXBw
ZXItPmltcGwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5
QnVmZmVyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNz
SW5mbyBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsKKyAgICAiRnVuY3Rpb24i
LCAmQmFzZTo6c19pbmZvLCAwLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yKQorfTsKKworSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3IoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQor
eworfQorCit2b2lkIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKiBwcm90b3R5cGUpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sICJBcnJheUJ1ZmZlciIpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHByb3RvdHlwZSwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDEpLCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSk7Cit9CisKK0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvciog
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGUoCisgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUq
IHByb3RvdHlwZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I+KHZtLmhlYXApKQorICAgICAgICBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3RvdHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworU3RydWN0dXJlKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0FycmF5QnVmZmVy
Q29uc3RydWN0b3IqIGNvbnN0cnVjdG9yID0KKyAgICAgICAganNDYXN0PEpTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBsZW5ndGg7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgeworICAgICAgICBsZW5ndGggPSBleGVj
LT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBk
b2Vzbid0IHNheSBzbywgaXQgaXMgaW4gZmFjdCBjb3JyZWN0IHRvIHNheQorICAgICAgICAvLyAi
bmV3IEFycmF5QnVmZmVyKCkiLiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcg
YW4gYXJyYXkgYnVmZmVyCisgICAgICAgIC8vIHdpdGggYSB6ZXJvIGxlbmd0aC4KKyAgICAgICAg
bGVuZ3RoID0gMDsKKyAgICB9CisgICAgCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIg
PSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCwgMSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBKU0FycmF5QnVmZmVyKiByZXN1
bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUoCisgICAgICAgIGV4ZWMtPnZtKCksIGNvbnN0cnVj
dG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKKyAg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0NvbnN0cnVjdFR5
cGUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAorICAgIEpTQ2Vs
bCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlcjsKKyAgICByZXR1cm4gQ29uc3Ry
dWN0VHlwZUhvc3Q7Cit9CisKK0NhbGxUeXBlIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0
Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEFycmF5QnVmZmVyOworICAgIHJldHVybiBDYWxsVHlw
ZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKworI2lu
Y2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGU7CisKK2NsYXNzIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6
IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEludGVybmFs
RnVuY3Rpb24gQmFzZTsKKworcHJvdGVjdGVkOgorICAgIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUq
LCBKU0FycmF5QnVmZmVyUHJvdG90eXBlKik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJik7CisgICAg
c3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMu
aCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAg
IAorICAgIEpTQXJyYXlCdWZmZXIqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlC
dWZmZXIqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2
ZXIgb2Ygc2xpY2UgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIuIikpOworICAgIAorICAgIGlmICgh
ZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiU2xpY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3Vt
ZW50LiIpKTsKKyAgICAKKyAgICBpbnQzMl90IGJlZ2luID0gZXhlYy0+YXJndW1lbnQoMCkudG9J
bnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgaW50MzJfdCBlbmQ7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CisgICAgICAgIGVuZCA9IGV4
ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxl
bmd0aCgpOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3QnVmZmVyID0gdGhpc09i
amVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGNh
bGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCk7CisgICAgCisg
ICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIHN0cnVjdHVyZSwgbmV3QnVmZmVyKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0FycmF5QnVmZmVyUHJvdG90eXBl
OjpzX2luZm8gPSB7CisgICAgIkFycmF5QnVmZmVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5QnVmZmVyUHJvdG90eXBlKQorfTsKKwor
SlNBcnJheUJ1ZmZlclByb3RvdHlwZTo6SlNBcnJheUJ1ZmZlclByb3RvdHlwZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit2
b2lkIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIAorICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNsaWNlLCBhcnJheUJ1ZmZlclByb3Rv
RnVuY1NsaWNlLCBEb250RW51bSwgMik7Cit9CisKK0pTQXJyYXlCdWZmZXJQcm90b3R5cGUqIEpT
QXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogcHJvdG90eXBl
ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBcnJheUJ1ZmZlclByb3Rv
dHlwZT4odm0uaGVhcCkpCisgICAgICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUodm0sIHN0cnVj
dHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5pc2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgIHJldHVybiBwcm90b3R5cGU7Cit9CisKK1N0cnVjdHVyZSogSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZl
clByb3RvdHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kik7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNBcnJheUJ1ZmZlclByb3RvdHlwZSogY3JlYXRlKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyUHJvdG90eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJWaWV3LmgiCisKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIlJlamVjdC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlCdWZmZXJWaWV3OjpzX2luZm8gPSB7CisgICAg
IkFycmF5QnVmZmVyVmlldyIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNBcnJheUJ1ZmZlclZpZXcpCit9OworCitKU0FycmF5QnVmZmVyVmlldzo6Q29uc3RydWN0
aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLAorICAgIElu
aXRpYWxpemF0aW9uTW9kZSBtb2RlKQorICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKKyAgICAsIG1fYnV0dGVyZmx5KDApCit7CisgICAgaWYgKGxlbmd0aCA8PSBm
YXN0U2l6ZUxpbWl0KSB7CisgICAgICAgIC8vIEF0dGVtcHQgR0MgYWxsb2NhdGlvbi4KKyAgICAg
ICAgdm9pZCogdGVtcDsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplT2YobGVuZ3RoLCBlbGVt
ZW50U2l6ZSk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgc2l6
ZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICBtX3ZlY3RvciA9IHRlbXA7CisgICAgICAgIG1fbW9kZSA9IEZh
c3RUeXBlZEFycmF5OworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1vZGUg
PT0gWmVyb0ZpbGwpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90KiBhc1dvcmRzID0gc3RhdGljX2Nh
c3Q8dWludDY0X3QqPihtX3ZlY3Rvcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
aXplIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaS0tOykKKyAgICAgICAgICAgICAgICBhc1dvcmRzW2ld
ID0gMDsKKyAgICAgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIAor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG9uJ3QgYWxsb3cgYSB0eXBlZCBhcnJh
eSB0byB1c2UgbW9yZSB0aGFuIDJHQi4KKyAgICBpZiAobGVuZ3RoID4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KElOVF9NQVgpIC8gZWxlbWVudFNpemUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAobW9kZSA9PSBaZXJvRmlsbCkgeworICAgICAgICBpZiAoIXRyeUZhc3RDYWxsb2MobGVu
Z3RoLCBlbGVtZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW5ndGggKiBlbGVt
ZW50U2l6ZSkuZ2V0VmFsdWUobV92ZWN0b3IpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzdGF0aWNfY2FzdDxzaXpl
X3Q+KGxlbmd0aCkgKiBlbGVtZW50U2l6ZSk7CisgICAgCisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CisgICAgbV9tb2RlID0gT3ZlcnNpemVUeXBlZEFycmF5OworfQorCitKU0FycmF5QnVm
ZmVyVmlldzo6Q29uc3RydWN0aW9uQ29udGV4dDo6Q29uc3RydWN0aW9uQ29udGV4dCgKKyAgICBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJh
eUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
OiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgLCBtX3ZlY3RvcihzdGF0aWNfY2FzdDx1aW50
OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSkgKyBieXRlT2Zmc2V0KQorICAgICwgbV9sZW5ndGgo
bGVuZ3RoKQorICAgICwgbV9tb2RlKFdhc3RlZnVsVHlwZWRBcnJheSkKK3sKKyAgICBJbmRleGlu
Z0hlYWRlciBpbmRleGluZ0hlYWRlcjsKKyAgICBpbmRleGluZ0hlYWRlci5zZXRBcnJheUJ1ZmZl
cihhcnJheUJ1ZmZlci5nZXQoKSk7CisgICAgbV9idXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZSh2bSwgMCwgMCwgMCwgdHJ1ZSwgaW5kZXhpbmdIZWFkZXIsIDApOworfQorCitKU0FycmF5QnVm
ZmVyVmlldzo6SlNBcnJheUJ1ZmZlclZpZXcoVk0mIHZtLCBDb25zdHJ1Y3Rpb25Db250ZXh0JiBj
b250ZXh0KQorICAgIDogQmFzZSh2bSwgY29udGV4dC5zdHJ1Y3R1cmUoKSwgY29udGV4dC5idXR0
ZXJmbHkoKSkKKyAgICAsIG1fdmVjdG9yKGNvbnRleHQudmVjdG9yKCkpCisgICAgLCBtX2xlbmd0
aChjb250ZXh0Lmxlbmd0aCgpKQorICAgICwgbV9tb2RlKGNvbnRleHQubW9kZSgpKQoreworfQor
Cit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHN3aXRjaCAobV9tb2RlKSB7CisgICAgY2Fz
ZSBGYXN0VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT3ZlcnNpemVUeXBl
ZEFycmF5OgorICAgICAgICB2bS5oZWFwLmFkZEZpbmFsaXplcih0aGlzLCBmaW5hbGl6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgdm0u
aGVhcC5hZGRSZWZlcmVuY2UodGhpcywgYnV0dGVyZmx5KCktPmluZGV4aW5nSGVhZGVyKCktPmFy
cmF5QnVmZmVyKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93blByb3Bl
cnR5U2xvdCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU0FycmF5QnVm
ZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7
CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNl
dCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRoaXNPYmplY3QtPmJ5dGVPZmZz
ZXQoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKSB7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIt
PnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IHRoaXNPYmplY3QtPmJ1ZmZlcigpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCkgeworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2Ny
aXB0b3IoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZU9mZnNldCgpKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChwcm9w
ZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgICAgICBleGVjLT52bSgpLm1fdHlwZWRBcnJh
eUNvbnRyb2xsZXItPnRvSlMoCisgICAgICAgICAgICAgICAgZXhlYywgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIHRoaXNPYmplY3QtPmJ1ZmZlcigpKSwKKyAgICAgICAgICAgIERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OnB1
dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5ieXRlTGVuZ3RoCisgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuYnl0ZU9mZnNldAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ1ZmZlcikgeworICAgICAgICByZWplY3QoZXhlYywgc2xvdC5pc1N0cmljdE1v
ZGUoKSwgIkF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gcmVhZC1vbmx5IHR5cGVkIGFycmF5IHByb3Bl
cnR5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEJhc2U6OnB1dCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKworYm9vbCBKU0Fy
cmF5QnVmZmVyVmlldzo6ZGVmaW5lT3duUHJvcGVydHkoCisgICAgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVj
dCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxl
bmd0aAorICAgICAgICB8fCBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVPZmZzZXQKKyAgICAgICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5idWZmZXIpCisgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgc2hvdWxkVGhyb3csICJBdHRl
bXB0aW5nIHRvIGRlZmluZSByZWFkLW9ubHkgdHlwZWQgYXJyYXkgcHJvcGVydHkuIik7CisgICAg
CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTQXJyYXlC
dWZmZXJWaWV3OjpkZWxldGVQcm9wZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KGNlbGwpOworICAgIGlm
IChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgKKyAgICAg
ICAgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0Cisg
ICAgICAgIHx8IHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3Bl
cnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNBcnJheUJ1
ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcygKKyAgICBKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIGxlbmd0aC9ieXRl
T2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94LgorICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICAgICAgYXJyYXku
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsKKyAgICAgICAgYXJyYXkuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKKyAgICAgICAgYXJyYXkuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOworICAgIH0KKyAgICAKKyAgICBCYXNlOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwor
fQorCit2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpmaW5hbGl6ZShKU0NlbGwqIGNlbGwpCit7Cisg
ICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KGNlbGwpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNp
emVUeXBlZEFycmF5IHx8IHRoaXNPYmplY3QtPm1fbW9kZSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXkp
OworICAgIGlmICh0aGlzT2JqZWN0LT5tX21vZGUgPT0gT3ZlcnNpemVUeXBlZEFycmF5KQorICAg
ICAgICBmYXN0RnJlZSh0aGlzT2JqZWN0LT5tX3ZlY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
QXJyYXlCdWZmZXJWaWV3X2gKKyNkZWZpbmUgSlNBcnJheUJ1ZmZlclZpZXdfaAorCisjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoaXMgY2xhc3Mgc2VydmVz
IHR3byBwdXJwb3NlczoKKy8vCisvLyAxKSBJdCBwcm92aWRlcyB0aG9zZSBwYXJ0cyBvZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldyB0aGF0IGRvbid0IGRlcGVuZAorLy8gICAgb24gdGVtcGxhdGUg
cGFyYW1ldGVycy4KKy8vCisvLyAyKSBJdCByZXByZXNlbnRzIHRoZSBET00vV2ViQ29yZS12aXNp
YmxlICJKU0FycmF5QnVmZmVyVmlldyIgdHlwZSwgd2hpY2gKKy8vICAgIEMrKyBjb2RlIHVzZXMg
d2hlbiBpdCB3YW50cyB0byBwYXNzIGFyb3VuZCBhIHZpZXcgb2YgYW4gYXJyYXkgYnVmZmVyCisv
LyAgICB3aXRob3V0IGNvbmNlcm4gZm9yIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdmlldy4KKy8v
CisvLyBUaGVzZSB0d28gcm9sZXMgYXJlIHF1aXRlIGRpZmZlcmVudC4gKDEpIGlzIGp1c3QgYSBt
YXR0ZXIgb2Ygb3B0aW1pemluZworLy8gY29tcGlsZSBhbmQgbGluayB0aW1lcyBieSBoYXZpbmcg
YXMgbXVjaCBjb2RlIGFuZCBkYXRhIGFzIHBvc3NpYmxlIG5vdAorLy8gYmUgc3ViamVjdCB0byB0
ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbi4gKDIpIGlzICphbG1vc3QqIGEgbWF0dGVyIG9mCisvLyBz
ZW1hbnRpY3M7IGluZGVlZCBhdCB0aGUgdmVyeSBsZWFzdCBpdCBpcyBhIG1hdHRlciBvZiBvYmV5
aW5nIGEgY29udHJhY3QKKy8vIHRoYXQgd2UgaGF2ZSB3aXRoIFdlYkNvcmUgcmlnaHQgbm93Lgor
Ly8KKy8vIE9uZSBjb252ZW5pZW50IHRoaW5nIHRoYXQgc2F2ZXMgdXMgZnJvbSB0b28gbXVjaCBj
cmF6eSBpcyB0aGF0CisvLyBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGluc3RhbnRpYWJsZS4KKwor
Ly8gVHlwZWQgYXJyYXkgdmlld3MgaGF2ZSBkaWZmZXJlbnQgbW9kZXMgZGVwZW5kaW5nIG9uIGhv
dyBiaWcgdGhleSBhcmUgYW5kCisvLyB3aGV0aGVyIHRoZSB1c2VyIGhhcyBkb25lIGFueXRoaW5n
IHRoYXQgcmVxdWlyZXMgYSBzZXBhcmF0ZSBiYWNraW5nCisvLyBidWZmZXIgb3IgdGhlIERPTS1z
cGVjaWZpZWQgbmV1dGVyaW5nIGNhcGFiaWxpdGllcy4KK2VudW0gVHlwZWRBcnJheU1vZGUgewor
ICAgIC8vIFNtYWxsIGFuZCBmYXN0IHR5cGVkIGFycmF5LiBCIGlzIHVudXNlZCwgViBwb2ludHMg
dG8gYSB2ZWN0b3IKKyAgICAvLyBhbGxvY2F0ZWQgaW4gY29waWVkIHNwYWNlLCBhbmQgTSA9IEZh
c3RUeXBlZEFycmF5LiBWJ3MgbGl2ZW5lc3MgaXMKKyAgICAvLyBkZXRlcm1pbmVkIGVudGlyZWx5
IGJ5IHRoZSB2aWV3J3MgbGl2ZW5lc3MuCisgICAgRmFzdFR5cGVkQXJyYXksCisgICAgCisgICAg
Ly8gQSBsYXJnZSB0eXBlZCBhcnJheSB0aGF0IHN0aWxsIGF0dGVtcHRzIG5vdCB0byB3YXN0ZSB0
b28gbXVjaAorICAgIC8vIG1lbW9yeS4gQiBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhIHNs
b3QgdGhhdCBjb3VsZCBob2xkIGEKKyAgICAvLyBidWZmZXIgcG9pbnRlciwgViBwb2ludHMgdG8g
YSB2ZWN0b3IgYWxsb2NhdGVkIHVzaW5nIGZhc3RDYWxsb2MoKSwKKyAgICAvLyBhbmQgTSA9IE92
ZXJzaXplVHlwZWRBcnJheS4gVidzIGxpdmVuZXNzIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkK
KyAgICAvLyB0aGUgdmlldydzIGxpdmVuZXNzLCBhbmQgdGhlIHZpZXcgd2lsbCBhZGQgYSBmaW5h
bGl6ZXIgdG8gZGVsZXRlIFYuCisgICAgT3ZlcnNpemVUeXBlZEFycmF5LAorICAgIAorICAgIC8v
IEEgdHlwZWQgYXJyYXkgdGhhdCB3YXMgdXNlZCBpbiBzb21lIGNyYXp5IHdheS4gQidzIEluZGV4
aW5nSGVhZGVyCisgICAgLy8gaXMgaGlqYWNrZWQgdG8gY29udGFpbiBhIHJlZmVyZW5jZSB0byB0
aGUgbmF0aXZlIGFycmF5IGJ1ZmZlci4gVGhlCisgICAgLy8gbmF0aXZlIHR5cGVkIGFycmF5IHZp
ZXcgcG9pbnRzIGJhY2sgdG8gdGhlIEpTIHZpZXcuIFYgcG9pbnRzIHRvIGEKKyAgICAvLyB2ZWN0
b3IgYWxsb2NhdGVkIHVzaW5nIHdoby1rbm93cy13aGF0LCBhbmQgTSA9IFdhc3RlZnVsVHlwZWRB
cnJheS4KKyAgICAvLyBUaGUgdmlldyBkb2VzIG5vdCBvd24gdGhlIHZlY3Rvci4KKyAgICBXYXN0
ZWZ1bFR5cGVkQXJyYXksCit9OworCisvLyBXaGVuIFdlYkNvcmUgdXNlcyBhIEpTQXJyYXlCdWZm
ZXJWaWV3LCBpdCBleHBlY3RzIHRvIGJlIGFibGUgdG8gZ2V0IHRoZSBuYXRpdmUKKy8vIEFycmF5
QnVmZmVyIGFuZCBsaXR0bGUgZWxzZS4gVGhpcyByZXF1aXJlcyBzbG93aW5nIGRvd24gYW5kIHdh
c3RpbmcgbWVtb3J5LAorLy8gYW5kIHRoZW4gYWNjZXNzaW5nIHRoaW5ncyB2aWEgdGhlIEJ1dHRl
cmZseS4gV2hlbiBKUyB1c2VzIGEgSlNBcnJheUJ1ZmZlclZpZXcKKy8vIGl0IGlzIGFsd2F5cyB2
aWEgdGhlIHVzdWFsIG1ldGhvZHMgaW4gdGhlIE1ldGhvZFRhYmxlLCBzbyB0aGlzIGNsYXNzJ3MK
Ky8vIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIGhhcyBubyBuZWVkIHRvIGV2ZW4gZXhpc3QgLSB3
ZSBjb3VsZCBhdCBhbnkgdGltZSBzaW5rCisvLyBjb2RlIGludG8gSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcgaWYgaXQgd2FzIGNvbnZlbmllbnQuCisKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3IDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOworICAgIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmYXN0U2l6ZUxp
bWl0ID0gMTAwMDsKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVPZih1aW50MzJfdCBsZW5n
dGgsIHVpbnQzMl90IGVsZW1lbnRTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChsZW5ndGgg
KiBlbGVtZW50U2l6ZSArIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKQorICAgICAgICAgICAg
JiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAxKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICBjbGFzcyBDb25zdHJ1Y3Rpb25Db250ZXh0IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29uc3RydWN0aW9uQ29udGV4dCk7CisgICAgICAgIAorICAgIHB1YmxpYzoKKyAgICAgICAg
ZW51bSBJbml0aWFsaXphdGlvbk1vZGUgeyBaZXJvRmlsbCwgRG9udEluaXRpYWxpemUgfTsKKyAg
ICAgICAgCisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0cnVjdGlvbkNvbnRleHQoVk0m
LCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IGVsZW1lbnRTaXplLCBJbml0
aWFsaXphdGlvbk1vZGUgPSBaZXJvRmlsbCk7CisgICAgICAgIAorICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSBDb25zdHJ1Y3Rpb25Db250ZXh0KAorICAgICAgICAgICAgVk0mLCBTdHJ1Y3R1cmUq
LCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3N0cnVjdHVyZTsgfQorICAgICAgICAKKyAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorICAgICAgICB2
b2lkKiB2ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgICAgICB1aW50MzJf
dCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgICAgICBUeXBlZEFycmF5
TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CisgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5KCkgY29uc3QgeyByZXR1cm4gbV9idXR0ZXJmbHk7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICAgICAgdm9pZCog
bV92ZWN0b3I7CisgICAgICAgIHVpbnQzMl90IG1fbGVuZ3RoOworICAgICAgICBUeXBlZEFycmF5
TW9kZSBtX21vZGU7CisgICAgICAgIEJ1dHRlcmZseSogbV9idXR0ZXJmbHk7CisgICAgfTsKKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0FycmF5QnVmZmVyVmlldyhWTSYsIENvbnN0cnVj
dGlvbkNvbnRleHQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJik7CisgICAgCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsK
KyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRp
b25Nb2RlKTsKKyAgICAKK3B1YmxpYzoKKyAgICAvLyBBbGxvY2F0ZXMgdGhlIGZ1bGwtb24gbmF0
aXZlIGJ1ZmZlci4gQWxzbyBtb3ZlcyB0aGUgZGF0YSBpbnRvIHRoZSBDIGhlYXAKKyAgICAvLyBp
ZiBuZWNlc3NhcnkuCisgICAgdm9pZCBzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnko
KTsKKyAgICAKKyAgICBUeXBlZEFycmF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
OyB9CisgICAgQXJyYXlCdWZmZXIqIGJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiBpbXBsKCk7CisgICAgdm9pZCBuZXV0ZXIoKTsKKyAgICAKKyAgICB2b2lkKiB2ZWN0
b3IoKSB7IHJldHVybiBtX3ZlY3RvcjsgfQorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorCisgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVmVj
dG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX3ZlY3Rv
cik7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mTW9kZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5
QnVmZmVyVmlldywgbV9tb2RlKTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGZpbmFs
aXplKEpTQ2VsbCopOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgdm9pZCogbV92ZWN0
b3I7CisgICAgdWludDMyX3QgbV9sZW5ndGg7CisgICAgVHlwZWRBcnJheU1vZGUgbV9tb2RlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0FycmF5QnVmZmVyVmlld19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU0FycmF5QnVmZmVyVmlld0lubGluZXNfaAorI2RlZmluZSBKU0FycmF5
QnVmZmVyVmlld0lubGluZXNfaAorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lubGluZSB2
b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpzbG93RG93bkFuZFdhc3RlTWVtb3J5SWZOZWNlc3Nhcnko
KQoreworICAgIGlmIChtX21vZGUgIT0gV2FzdGVmdWxUeXBlZEFycmF5KQorICAgICAgICBtZXRo
b2RUYWJsZSgpLT5zbG93RG93bkFuZFdhc3RlTWVtb3J5KHRoaXMpOworfQorCitpbmxpbmUgQXJy
YXlCdWZmZXIqIEpTQXJyYXlCdWZmZXJWaWV3OjpidWZmZXIoKQoreworICAgIHNsb3dEb3duQW5k
V2FzdGVNZW1vcnlJZk5lY2Vzc2FyeSgpOworICAgIHJldHVybiBidXR0ZXJmbHkoKS0+aW5kZXhp
bmdIZWFkZXIoKS0+YXJyYXlCdWZmZXIoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBKU0FycmF5QnVmZmVyVmlldzo6aW1wbCgpCit7CisgICAgcmV0dXJuIG1ldGhv
ZFRhYmxlKCktPmdldFR5cGVkQXJyYXlJbXBsKHRoaXMpOworfQorCitpbmxpbmUgdm9pZCBKU0Fy
cmF5QnVmZmVyVmlldzo6bmV1dGVyKCkKK3sKKyAgICBBU1NFUlQobV9tb2RlID09IFdhc3RlZnVs
VHlwZWRBcnJheSk7CisgICAgbV9sZW5ndGggPSAwOworICAgIG1fdmVjdG9yID0gMDsKK30KKwor
aW5saW5lIHVuc2lnbmVkIEpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KCkKK3sKKyAgICBp
ZiAobV9tb2RlICE9IFdhc3RlZnVsVHlwZWRBcnJheSkgeworICAgICAgICBBU1NFUlQobV9tb2Rl
ID09IEZhc3RUeXBlZEFycmF5IHx8IG1fbW9kZSA9PSBPdmVyc2l6ZVR5cGVkQXJyYXkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcHRyZGlmZl90IGRlbHRhID0KKyAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fdmVjdG9yKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZGVsdGEpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHJlc3VsdCkgPT0gZGVsdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNTQwOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgpAQCAt
MjIzLDQgKzIyNCwxNSBAQCBib29sIEpTQ2VsbDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpT
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEpTQ2VsbDo6c2xvd0Rvd25BbmRXYXN0ZU1l
bW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQ2VsbDo6Z2V0VHlwZWRB
cnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE1NDA5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlVHJhaXRz
Lmg+CkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb3B5VmlzaXRv
cjsKIGNsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXJWaWV3OwogY2xhc3MgSlNE
ZXN0cnVjdGlibGVPYmplY3Q7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKQEAgLTE0OSw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJl
KiB1bnZhbGlkYXRlZFN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fc3RydWN0dXJlLnVudmFsaWRhdGVk
R2V0KCk7IH0KICNlbmRpZgogICAgICAgICAKLSAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5
cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZWRBcnJheU5vbmU7CisgICAgc3RhdGljIGNv
bnN0IFR5cGVkQXJyYXlUeXBlIFR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9IE5vdFR5cGVkQXJyYXk7
CiBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CkBAIC0xNjcsNiAr
MTY4LDggQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlw
dG9yJik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNB
cnJheUJ1ZmZlclZpZXcqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUGFzc1JlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXcuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlldy5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0Rh
dGFWaWV3LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEYXRh
Vmlldy5oIgorI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTRGF0YVZpZXc6OnNfaW5mbyA9IHsK
KyAgICAiRGF0YVZpZXciLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRGF0YVZpZXcpfTsKKworSlNEYXRhVmlldzo6SlNEYXRhVmlldyhWTSYgdm0sIENvbnN0cnVj
dGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250ZXh0KQoreworfQorCitK
U0RhdGFWaWV3KiBKU0RhdGFWaWV3OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAor
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgpCit7CisgICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBwYXNzZWRCdWZmZXI7CisgICAgaWYgKCFBcnJheUJ1
ZmZlclZpZXc6OnZlcmlmeVN1YlJhbmdlPHVpbnQ4X3Q+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0
ZUxlbmd0aCkpIHsKKyAgICAgICAgdGhyb3dWTUVycm9yKAorICAgICAgICAgICAgZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiQnl0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvdXQgb2YgcmFuZ2Ug
b2YgYnVmZmVyIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQodm0sIHN0cnVjdHVyZSwg
YnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7Cisg
ICAgSlNEYXRhVmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNEYXRhVmlldz4odm0uaGVhcCkpIEpTRGF0YVZpZXcodm0sIGNvbnRleHQpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTRGF0
YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK0pTRGF0YVZpZXcqIEpTRGF0YVZpZXc6OmNyZWF0ZShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCkKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBKU0RhdGFWaWV3OjpzZXQoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCB1bnNpZ25lZCwgdW5zaWduZWQpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BM
QVRGT1JNKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPERhdGFWaWV3PiBK
U0RhdGFWaWV3Ojp0eXBlZEltcGwoKQoreworICAgIHJldHVybiBEYXRhVmlldzo6Y3JlYXRlKGJ1
ZmZlcigpLCBieXRlT2Zmc2V0KCksIGxlbmd0aCgpKTsKK30KKworYm9vbCBKU0RhdGFWaWV3Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
SlNEYXRhVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RhdGFWaWV3Kj4ob2JqZWN0KTsKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+bV9sZW5ndGgpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30K
KworYm9vbCBKU0RhdGFWaWV3OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0RhdGFWaWV3KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTRGF0YVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpIHsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVyKHRoaXNPYmplY3QtPm1fbGVuZ3RoKSwgRG9u
dEVudW0gfCBSZWFkT25seSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgSlNEYXRhVmlldzo6c2xvd0Rv
d25BbmRXYXN0ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopCit7CisgICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7Cit9CisKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0RhdGFW
aWV3OjpnZXRUeXBlZEFycmF5SW1wbChKU0FycmF5QnVmZmVyVmlldyogb2JqZWN0KQoreworICAg
IEpTRGF0YVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNEYXRhVmlldyo+KG9iamVjdCk7Cisg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPnR5cGVkSW1wbCgpOworfQorCitTdHJ1Y3R1cmUqIEpTRGF0
YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZSgKKyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwKKyAgICAgICAgTm9uQXJyYXkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNEYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRGF0YVZp
ZXdfaAorI2RlZmluZSBKU0RhdGFWaWV3X2gKKworI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
RGF0YVZpZXcgOiBwdWJsaWMgSlNBcnJheUJ1ZmZlclZpZXcgeworcHVibGljOgorICAgIHR5cGVk
ZWYgSlNBcnJheUJ1ZmZlclZpZXcgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZWxl
bWVudFNpemUgPSAxOworICAgIAorcHJvdGVjdGVkOgorICAgIEpTRGF0YVZpZXcoVk0mLCBDb25z
dHJ1Y3Rpb25Db250ZXh0Jik7CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIEpTRGF0YVZpZXcq
IGNyZWF0ZSgKKyAgICAgICAgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOworICAgIAorICAgIC8vIER1bW15IG1ldGhvZHMsIHdoaWNoIGRvbid0IGFjdHVhbGx5IHdv
cms7IHRoZXNlIGFyZSBqdXN0IGluIHBsYWNlIHRvCisgICAgLy8gcGxhY2F0ZSBzb21lIHRlbXBs
YXRlIHNwZWNpYWxpemF0aW9uIHdlIGRvIGVsc2V3aGVyZS4KKyAgICBzdGF0aWMgSlNEYXRhVmll
dyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBKU0RhdGFWaWV3KiBjcmVhdGUoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBKU09iamVj
dCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBQYXNzUmVm
UHRyPERhdGFWaWV3PiB0eXBlZEltcGwoKTsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRB
cnJheVR5cGUgVHlwZWRBcnJheVN0b3JhZ2VUeXBlID0gVHlwZURhdGFWaWV3OworCitwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYpOworCisgICAgc3RhdGljIHZvaWQgc2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeShKU0FycmF5QnVmZmVyVmlldyopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5
QnVmZmVyVmlldz4gZ2V0VHlwZWRBcnJheUltcGwoSlNBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICAK
K3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0RhdGFWaWV3
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRhVmlld1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRGF0YVZpZXdQcm90b3R5cGUuaCIKKwor
I2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNEYXRhVmlldy5oIgorI2luY2x1ZGUgIkxv
b2t1cC5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRh
cHRvcnMuaCIKKyNpbmNsdWRlIDx3dGYvRmxpcEJ5dGVzLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gSlNEYXRhVmlld1Byb3RvdHlwZTo6c19pbmZvID0geworICAgICJE
YXRhVmlld1Byb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIEV4ZWNTdGF0ZTo6ZGF0YVZpZXdU
YWJsZSwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGF0YVZpZXdQcm90b3R5cGUpCit9Owor
CisvKiBTb3VyY2UgZm9yIEpTRGF0YVZpZXdQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBkYXRhVmll
d1RhYmxlCisgIGdldEludDggICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldEludDgg
ICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBnZXRVaW50OCAgICAgICAg
ICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAgZ2V0SW50MTYgICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0
SW50MTYgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldFVpbnQxNiAg
ICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQxNiAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gICAgICAgMAorICBnZXRJbnQzMiAgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQzMiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgZ2V0VWlu
dDMyICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jR2V0VWludDMyICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAgICAgICAwCisgIGdldEZsb2F0MzIgICAgICAgICAgICBkYXRhVmlld1By
b3RvRnVuY0dldEZsb2F0MzIgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBn
ZXRGbG9hdDY0ICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNHZXRGbG9hdDY0ICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0SW50OCAgICAgICAgICAgICAgIGRhdGFW
aWV3UHJvdG9GdW5jU2V0SW50OCAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgIHNldFVpbnQ4ICAgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVuY1NldFVpbnQ4ICAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICBzZXRJbnQxNiAgICAgICAgICAgICAg
ZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQxNiAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgc2V0VWludDE2ICAgICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgIHNldEludDMyICAgICAgICAg
ICAgICBkYXRhVmlld1Byb3RvRnVuY1NldEludDMyICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICBzZXRVaW50MzIgICAgICAgICAgICAgZGF0YVZpZXdQcm90b0Z1bmNTZXRV
aW50MzIgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgc2V0RmxvYXQzMiAg
ICAgICAgICAgIGRhdGFWaWV3UHJvdG9GdW5jU2V0RmxvYXQzMiAgICAgICAgICBEb250RW51bXxG
dW5jdGlvbiAgICAgICAwCisgIHNldEZsb2F0NjQgICAgICAgICAgICBkYXRhVmlld1Byb3RvRnVu
Y1NldEZsb2F0NjQgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorQGVuZAorKi8K
KworSlNEYXRhVmlld1Byb3RvdHlwZTo6SlNEYXRhVmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCitKU0Rh
dGFWaWV3UHJvdG90eXBlKiBKU0RhdGFWaWV3UHJvdG90eXBlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBKU0RhdGFWaWV3UHJvdG90eXBlKiBwcm90b3R5cGUg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0RhdGFWaWV3UHJvdG90eXBl
Pih2bS5oZWFwKSkKKyAgICAgICAgSlNEYXRhVmlld1Byb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcHJvdG90eXBl
OworfQorCitTdHJ1Y3R1cmUqIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSgK
KyAgICBWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgdm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7Cit9CisKK2Jvb2wgSlNEYXRhVmlld1Byb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlT
bG90KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0
aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KAorICAgICAgICBleGVjLCBFeGVjU3RhdGU6OmRhdGFW
aWV3VGFibGUoZXhlYyksIGpzQ2FzdDxKU0RhdGFWaWV3UHJvdG90eXBlKj4ob2JqZWN0KSwKKyAg
ICAgICAgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU0RhdGFWaWV3UHJvdG90eXBl
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlw
dG9yPEpTT2JqZWN0PigKKyAgICAgICAgZXhlYywgRXhlY1N0YXRlOjpkYXRhVmlld1RhYmxlKGV4
ZWMpLCBqc0Nhc3Q8SlNEYXRhVmlld1Byb3RvdHlwZSo+KG9iamVjdCksCisgICAgICAgIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CitF
bmNvZGVkSlNWYWx1ZSBnZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0RhdGFWaWV3
KiBkYXRhVmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNEYXRhVmlldyo+KGV4ZWMtPnRoaXNWYWx1ZSgp
KTsKKyAgICBpZiAoIWRhdGFWaWV3KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgb2YgRGF0YVZpZXcgbWV0aG9kIG11c3Qg
YmUgYSBEYXRhVmlldy4iKSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpLiIpKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIGJvb2wgbGl0dGxlRW5kaWFuID0g
ZmFsc2U7CisgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRv
cjo6VHlwZSk7CisgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50
KCkgPj0gMikgeworICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT5hcmd1bWVudCgxKS50b0Jv
b2xlYW4oZXhlYyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGggPSBkYXRhVmlldy0+bGVuZ3RoKCk7CisgICAgaWYgKGVs
ZW1lbnRTaXplID4gYnl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ID4gYnl0ZUxlbmd0aCAtIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJPdXQgb2YgYm91bmRzIGFjY2VzcyIpKTsKKyAg
ICAKKyAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmlldy0+
dmVjdG9yKCkpICsgYnl0ZU9mZnNldCk7CisgICAgCisgICAgaWYgKG5lZWRUb0ZsaXBCeXRlc0lm
TGl0dGxlRW5kaWFuKGxpdHRsZUVuZGlhbikpCisgICAgICAgIHZhbHVlID0gZmxpcEJ5dGVzKHZh
bHVlKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEFkYXB0b3I6OnRvSlNWYWx1
ZSh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorRW5jb2RlZEpTVmFs
dWUgc2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNEYXRhVmlldyogZGF0YVZpZXcg
PSBqc0R5bmFtaWNDYXN0PEpTRGF0YVZpZXcqPihleGVjLT50aGlzVmFsdWUoKSk7CisgICAgaWYg
KCFkYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBl
RXJyb3IoZXhlYywgIlJlY2VpdmVyIG9mIERhdGFWaWV3IG1ldGhvZCBtdXN0IGJlIGEgRGF0YVZp
ZXcuIikpOworICAgIAorICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTmVlZCBh
dCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkuIikpOworICAg
IAorICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihl
eGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSB2YWx1ZSA9IEFkYXB0b3I6OnRvTmF0aXZlKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDEpKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgYm9vbCBsaXR0bGVFbmRpYW4gPSBmYWxz
ZTsKKyAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpU
eXBlKTsKKyAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+
PSAzKSB7CisgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPmFyZ3VtZW50KDIpLnRvQm9vbGVh
bihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgYnl0ZUxlbmd0aCA9IGRhdGFWaWV3LT5sZW5ndGgoKTsKKyAgICBpZiAoZWxlbWVu
dFNpemUgPiBieXRlTGVuZ3RoIHx8IGJ5dGVPZmZzZXQgPiBieXRlTGVuZ3RoIC0gc2l6ZW9mKHR5
cGVuYW1lIEFkYXB0b3I6OlR5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIk91dCBvZiBib3VuZHMgYWNjZXNzIikpOworICAgIAor
ICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pKQorICAg
ICAgICB2YWx1ZSA9IGZsaXBCeXRlcyh2YWx1ZSk7CisgICAgCisgICAgKnJlaW50ZXJwcmV0X2Nh
c3Q8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkYXRhVmll
dy0+dmVjdG9yKCkpICsgYnl0ZU9mZnNldCkgPSB2YWx1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEludDgoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXREYXRhPEludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRJbnQxNihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MTZBZGFwdG9yPihleGVjKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1
bmNHZXRJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8SW50MzJB
ZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50OChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldERhdGE8VWludDhBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNHZXRVaW50MTYoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBnZXREYXRhPFVpbnQxNkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldFVpbnQz
MihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERhdGE8VWludDMyQWRhcHRvcj4o
ZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3
UHJvdG9GdW5jR2V0RmxvYXQzMihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERh
dGE8RmxvYXQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY0dldEZsb2F0NjQoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXREYXRhPEZsb2F0NjRBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRJbnQ4KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxJbnQ4QWRhcHRvcj4oZXhlYyk7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9G
dW5jU2V0SW50MTYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRhPEludDE2
QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGFWaWV3UHJvdG9GdW5jU2V0SW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBzZXREYXRhPEludDMyQWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDgoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBzZXREYXRhPFVpbnQ4QWRhcHRvcj4oZXhlYyk7Cit9CisKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGFWaWV3UHJvdG9GdW5jU2V0VWludDE2
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxVaW50MTZBZGFwdG9yPihl
eGVjKTsKK30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQ
cm90b0Z1bmNTZXRVaW50MzIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBzZXREYXRh
PFVpbnQzMkFkYXB0b3I+KGV4ZWMpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRhVmlld1Byb3RvRnVuY1NldEZsb2F0MzIoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBzZXREYXRhPEZsb2F0MzJBZGFwdG9yPihleGVjKTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0YVZpZXdQcm90b0Z1bmNTZXRGbG9hdDY0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gc2V0RGF0YTxGbG9hdDY0QWRhcHRvcj4oZXhl
Yyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjaW5jbHVkZSAiSlNEYXRhVmlld1Byb3Rv
dHlwZS5sdXQuaCIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRh
Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0RhdGFWaWV3UHJvdG90
eXBlX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU0RhdGFWaWV3UHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAg
SlNEYXRhVmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworCitwdWJsaWM6CisgICAgc3Rh
dGljIEpTRGF0YVZpZXdQcm90b3R5cGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOworICAgIAor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKAorICAgICAgICBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTRGF0YVZpZXdQcm90b3R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRmxvYXQzMkFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Zsb2F0MzJBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgSlNGbG9hdDMyQXJyYXlfaAorI2RlZmluZSBKU0Zsb2F0MzJBcnJheV9oCisKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU0Zsb2F0MzJBcnJheV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2NEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGbG9hdDY0QXJyYXku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRmxvYXQ2
NEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Zsb2F0NjRBcnJheV9oCisj
ZGVmaW5lIEpTRmxvYXQ2NEFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKwor
I2VuZGlmIC8vIEpTRmxvYXQ2NEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3X2gKKworI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXJWaWV3LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBDbGFzc0luZm8qIGdldEludDhBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BS
SVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7CitKU19FWFBP
UlRfUFJJVkFURSBjb25zdCBDbGFzc0luZm8qIGdldEludDMyQXJyYXlDbGFzc0luZm8oKTsKK0pT
X0VYUE9SVF9QUklWQVRFIGNvbnN0IENsYXNzSW5mbyogZ2V0VWludDhBcnJheUNsYXNzSW5mbygp
OworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50OENsYW1wZWRBcnJh
eUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBnZXRVaW50
MTZBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJbmZvKiBn
ZXRVaW50MzJBcnJheUNsYXNzSW5mbygpOworSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgQ2xhc3NJ
bmZvKiBnZXRGbG9hdDMyQXJyYXlDbGFzc0luZm8oKTsKK0pTX0VYUE9SVF9QUklWQVRFIGNvbnN0
IENsYXNzSW5mbyogZ2V0RmxvYXQ2NEFycmF5Q2xhc3NJbmZvKCk7CisKKy8vIEEgdHlwZWQgYXJy
YXkgdmlldyBpcyBvdXIgcmVwcmVzZW50YXRpb24gb2YgYSB0eXBlZCBhcnJheSBvYmplY3QgYXMg
c2VlbgorLy8gZnJvbSBKYXZhU2NyaXB0LiBGb3IgZXhhbXBsZToKKy8vCisvLyB2YXIgbyA9IG5l
dyBJbnQ4QXJyYXkoMTAwKTsKKy8vCisvLyBIZXJlLCAnbycgcG9pbnRzIHRvIGEgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8aW50OF90Pi4KKy8vCisvLyBWaWV3cyBjb250YWluIGZpdmUgZmllbGRz
OgorLy8KKy8vICAgICBTdHJ1Y3R1cmUqIFMgICAgIC8vIGZyb20gSlNDZWxsCisvLyAgICAgQnV0
dGVyZmx5KiBCICAgICAvLyBmcm9tIEpTT2JqZWN0CisvLyAgICAgRWxlbWVudFR5cGUqIFYKKy8v
ICAgICB1aW50MzJfdCBMCisvLyAgICAgVHlwZWRBcnJheU1vZGUgTQorLy8KKy8vIFRoZXNlIGZp
ZWxkcyB0YWtlIHVwIGEgdG90YWwgb2YgZm91ciBwb2ludGVyLXdpZHRoIHdvcmRzLiBGSVhNRTog
TWFrZQorLy8gaXQgdGFrZSBsZXNzIHdvcmRzIQorLy8KKy8vIEIgaXMgdXN1YWxseSB1bnVzZWQg
YnV0IG1heSBzdG9yZWQgc29tZSBhZGRpdGlvbmFsICJvdmVyZmxvdyIgZGF0YSBmb3IKKy8vIG9u
ZSBvZiB0aGUgbW9kZXMuIFYgYWx3YXlzIHBvaW50cyB0byB0aGUgYmFzZSBvZiB0aGUgdHlwZWQg
YXJyYXkncyBkYXRhLAorLy8gYW5kIG1heSBwb2ludCB0byBlaXRoZXIgR0MtbWFuYWdlZCBjb3Bp
ZWQgc3BhY2UsIG9yIGRhdGEgaW4gdGhlIEMgaGVhcDsKKy8vIHdoaWNoIG9mIHRob3NlIHRoaW5n
cyBpdCBwb2ludHMgdG8gaXMgZ292ZXJuZWQgYnkgdGhlIG1vZGUgYWx0aG91Z2ggZm9yCisvLyBz
aW1wbGUgYWNjZXNzZXMgdG8gdGhlIHZpZXcgeW91IGNhbiBqdXN0IHJlYWQgZnJvbSB0aGUgcG9p
bnRlciBlaXRoZXIKKy8vIHdheS4gTSBzcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHZpZXcuIEwg
aXMgdGhlIGxlbmd0aCwgaW4gdW5pdHMgdGhhdAorLy8gZGVwZW5kIG9uIHRoZSB2aWV3J3MgdHlw
ZS4KKworLy8gVGhlIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3IGlzIHRlbXBsYXRpemVkIGJ5IGFu
IEFkYXB0b3IgdGhhdCBjb250cm9scworLy8gdGhlIGVsZW1lbnQgdHlwZSBhbmQgaG93IGl0J3Mg
Y29udmVydGVkOyBpdCBzaG91bGQgb2JleSB0aGUgZm9sbG93aW5nCisvLyBpbnRlcmZhY2U7IEkg
dXNlIGludDhfdCBhcyBhbiBleGFtcGxlOgorLy8KKy8vIHN0cnVjdCBBZGFwdG9yIHsKKy8vICAg
ICB0eXBlZGVmIGludDhfdCBUeXBlOworLy8gICAgIHR5cGVkZWYgSW50OEFycmF5IFZpZXdUeXBl
OworLy8gICAgIHR5cGVkZWYgSlNJbnQ4QXJyYXkgSlNWaWV3VHlwZTsKKy8vICAgICBzdGF0aWMg
aW50OF90IHRvTmF0aXZlKGRvdWJsZSk7CisvLyAgICAgc3RhdGljIGludDhfdCB0b05hdGl2ZShK
U1ZhbHVlKTsKKy8vICAgICBzdGF0aWMgaW50OF90IHRvTmF0aXZlKEV4ZWNTdGF0ZSosIEpTVmFs
dWUpOworLy8gICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShpbnQ4X3QpOworLy8gICAgIHN0
YXRpYyBkb3VibGUgdG9Eb3VibGUoaW50OF90KTsKKy8vIH07CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyA6IHB1YmxpYyBKU0FycmF5
QnVmZmVyVmlldyB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0FycmF5QnVmZmVyVmlldyBCYXNl
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFt
ZSBBZGFwdG9yOjpUeXBlKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyhWTSYsIENvbnN0cnVjdGlvbkNvbnRleHQmKTsKKyAgICAKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIGNyZWF0ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyogY3JlYXRlVW5pbml0aWFsaXplZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogY3JlYXRlKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRl
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldyogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9y
OjpWaWV3VHlwZT4gaW1wbCk7CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiBj
cmVhdGUoU3RydWN0dXJlKiwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPHR5cGVuYW1lIEFk
YXB0b3I6OlZpZXdUeXBlPiBpbXBsKTsKKyAgICAKKyAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7
IH0KKyAgICBzaXplX3QgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplT2YobV9sZW5ndGgs
IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSk7IH0KKyAgICAKKyAgICBjb25zdCB0eXBl
bmFtZSBBZGFwdG9yOjpUeXBlKiB0eXBlZFZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9y
KTsKKyAgICB9CisgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqPiht
X3ZlY3Rvcik7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgbWVhbnQgdG8gbWF0
Y2ggaW5kZXhlZCBhY2Nlc3MgbWV0aG9kcyB0aGF0IEpTT2JqZWN0CisgICAgLy8gc3VwcG9ydHMg
LSBoZW5jZSB0aGUgc2xpZ2h0IHJlZHVuZGFuY3kuCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNr
bHkodW5zaWduZWQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpIDwgbV9sZW5ndGg7CisgICAg
fQorICAgIGJvb2wgY2FuU2V0SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAg
ICByZXR1cm4gaSA8IG1fbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICB0eXBlbmFtZSBBZGFwdG9y
OjpUeXBlIGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUodW5zaWduZWQgaSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpIDwgbV9sZW5ndGgpOworICAgICAgICByZXR1cm4gdHlwZWRWZWN0b3Io
KVtpXTsKKyAgICB9CisgICAgCisgICAgZG91YmxlIGdldEluZGV4UXVpY2tseUFzRG91YmxlKHVu
c2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6dG9Eb3VibGUoZ2V0SW5k
ZXhRdWlja2x5QXNOYXRpdmVWYWx1ZShpKSk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0
SW5kZXhRdWlja2x5KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICByZXR1cm4gQWRhcHRvcjo6
dG9KU1ZhbHVlKGdldEluZGV4UXVpY2tseUFzTmF0aXZlVmFsdWUoaSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldEluZGV4UXVpY2tseVRvTmF0aXZlVmFsdWUodW5zaWduZWQgaSwgdHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9sZW5n
dGgpOworICAgICAgICB0eXBlZFZlY3RvcigpW2ldID0gdmFsdWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0SW5kZXhRdWlja2x5VG9Eb3VibGUodW5zaWduZWQgaSwgZG91YmxlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0
b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEluZGV4UXVpY2tseSh1
bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5
VG9OYXRpdmVWYWx1ZShpLCBBZGFwdG9yOjp0b05hdGl2ZSh2YWx1ZSkpOworICAgIH0KKyAgICAK
KyAgICBib29sIHNldEluZGV4UXVpY2tseShFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpT
VmFsdWUganNWYWx1ZSkKKyAgICB7CisgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFs
dWUgPSBBZGFwdG9yOjp0b05hdGl2ZShleGVjLCBqc1ZhbHVlKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzZXRJ
bmRleFF1aWNrbHlUb05hdGl2ZVZhbHVlKGksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQWNjZXNzUmFuZ2VRdWlja2x5KHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9mZnNldCA8PSBt
X2xlbmd0aAorICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3RoIDw9IG1fbGVuZ3RoCisgICAg
ICAgICAgICAvLyBjaGVjayBvdmVyZmxvdworICAgICAgICAgICAgJiYgb2Zmc2V0ICsgbGVuZ3Ro
ID49IG9mZnNldDsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBjYW5TZXRRdWlja2x5LCBleGNl
cHQ6IGlmIGl0IHJldHVybnMgZmFsc2UsIGl0IHdpbGwgdGhyb3cgdGhlCisgICAgLy8gYXBwcm9w
cmlhdGUgZXhjZXB0aW9uLgorICAgIGJvb2wgdmFsaWRhdGVSYW5nZShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHN1Y2Nlc3NmdWwsIGFuZCBmYWxzZSBvbiBlcnJvcjsgaXQgd2lsbCB0aHJvdyBvbiBlcnJv
ci4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+CisgICAgYm9vbCBzZXRXaXRoU3Bl
Y2lmaWNUeXBlKEV4ZWNTdGF0ZSosIE90aGVyVHlwZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgYW5k
IGZhbHNlIG9uIGVycm9yOyBpZiBpdCByZXR1cm5zIGZhbHNlCisgICAgLy8gdGhlbiBpdCB3aWxs
IGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbi4KKyAgICBib29sIHNldChFeGVjU3RhdGUqLCBKU09i
amVjdCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAKKyAgICBQYXNz
UmVmUHRyPHR5cGVuYW1lIEFkYXB0b3I6OlZpZXdUeXBlPiB0eXBlZEltcGwoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEFkYXB0b3I6OlZpZXdUeXBlOjpjcmVhdGUoYnVmZmVyKCksIGJ5dGVPZmZz
ZXQoKSwgbGVuZ3RoKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpLCBOb25BcnJheSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOyAvLyBUaGlzIGlzIG5ldmVyIGFjY2Vzc2VkIGRpcmVjdGx5LCBzaW5j
ZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmthZ2Ugb24gc29tZSBjb21waWxlcnMuCisgICAgCisgICAg
c3RhdGljIGNvbnN0IENsYXNzSW5mbyogaW5mbygpCisgICAgeworICAgICAgICBzd2l0Y2ggKEFk
YXB0b3I6OnR5cGVWYWx1ZSkgeworICAgICAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICAgICAg
cmV0dXJuIGdldEludDhBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICAgICAgICAgIHJldHVybiBnZXRJbnQxNkFycmF5Q2xhc3NJbmZvKCk7CisgICAgICAgIGNh
c2UgVHlwZUludDMyOgorICAgICAgICAgICAgcmV0dXJuIGdldEludDMyQXJyYXlDbGFzc0luZm8o
KTsKKyAgICAgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgICAgICByZXR1cm4gZ2V0VWludDhB
cnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAg
ICAgICByZXR1cm4gZ2V0VWludDhDbGFtcGVkQXJyYXlDbGFzc0luZm8oKTsKKyAgICAgICAgY2Fz
ZSBUeXBlVWludDE2OgorICAgICAgICAgICAgcmV0dXJuIGdldFVpbnQxNkFycmF5Q2xhc3NJbmZv
KCk7CisgICAgICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBnZXRVaW50
MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAg
ICAgcmV0dXJuIGdldEZsb2F0MzJBcnJheUNsYXNzSW5mbygpOworICAgICAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0NjRBcnJheUNsYXNzSW5mbygpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5cGUgPSBBZGFwdG9y
Ojp0eXBlVmFsdWU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIHN0cnVjdCBUeXBlZEFy
cmF5Q2xhc3NJbmZvczsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworCisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChK
U0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOworICAgIAorICAgIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIC8vIEFsbG9jYXRl
cyB0aGUgZnVsbC1vbiBuYXRpdmUgYnVmZmVyIGFuZCBtb3ZlcyBkYXRhIGludG8gdGhlIEMgaGVh
cCBpZgorICAgIC8vIG5lY2Vzc2FyeS4gTm90ZSB0aGF0IHRoaXMgbmV2ZXIgYWxsb2NhdGVzIGlu
IHRoZSBHQyBoZWFwLgorICAgIHN0YXRpYyB2b2lkIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoSlNB
cnJheUJ1ZmZlclZpZXcqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
IGdldFR5cGVkQXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3Kik7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPgoraW5saW5lIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRhcHRvcjo6Vmll
d1R5cGU+IHRvTmF0aXZlVHlwZWRWaWV3KEpTVmFsdWUgdmFsdWUpCit7CisgICAgdHlwZW5hbWUg
QWRhcHRvcjo6SlNWaWV3VHlwZSogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8dHlwZW5hbWUgQWRh
cHRvcjo6SlNWaWV3VHlwZSo+KHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiB3cmFwcGVyLT50eXBlZEltcGwoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cl9oCisKKyNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjbGFzcyBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24geworcHVibGljOgorICAg
IHR5cGVkZWYgSW50ZXJuYWxGdW5jdGlvbiBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IqIGNyZWF0ZSgKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqLCBTdHJ1
Y3R1cmUqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIAor
ICAgIERFQ0xBUkVfSU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwg
Q29uc3RydWN0RGF0YSYpOworICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwq
LCBDYWxsRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cklubGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3JJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAi
SlNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3Ry
dWN0b3IuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IDogQmFzZShnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkKK3sKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVmlld0NsYXNzPgordm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPFZp
ZXdDbGFzcz46OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBuYW1lKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBwcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3Ro
LCBqc051bWJlcigzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5CWVRFU19QRVJf
RUxFTUVOVCwganNOdW1iZXIoVmlld0NsYXNzOjplbGVtZW50U2l6ZSksIERvbnRFbnVtIHwgUmVh
ZE9ubHkgfCBEb250RGVsZXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+KgorSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBw
cm90b3R5cGUsCisgICAgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yKiBy
ZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0NvbnN0cnVjdG9yPih2bS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcihnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgcmVzdWx0
LT5maW5pc2hDcmVhdGlvbih2bSwgcHJvdG90eXBlLCBuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitTdHJ1Y3R1cmUqIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAor
ICAgIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgIGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT50eXBlZEFy
cmF5U3RydWN0dXJlKAorICAgICAgICAgICAgVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5
cGUpOworICAgIAorICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKSB7CisgICAgICAgIGlm
IChWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSA9PSBUeXBlRGF0YVZpZXcpCisgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
RGF0YVZpZXcgY29uc3RydWN0b3IgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBkb2N1bWVudGF0aW9uIGRvZXNu
J3Qgc2F5IHNvLCBpdCdzIGNvcnJlY3QgdG8gc2F5CisgICAgICAgIC8vICJuZXcgSW50OEFycmF5
KCkiLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGFsbG9jYXRpbmcgYW4gYXJyYXkgb2YgemVybworICAg
ICAgICAvLyBsZW5ndGguCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNz
OjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCAwKSk7CisgICAgfQorICAgIAorICAgIGlmIChKU0Fy
cmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGV4ZWMt
PmFyZ3VtZW50KDApKSkgeworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGpz
QnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAoZXhl
Yy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50b1VJbnQzMihleGVj
KSA6IDA7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CisgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAg
ICAgICAgICBsZW5ndGggPSBleGVjLT5hcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsKKyAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgJSBWaWV3Q2xhc3M6OmVs
ZW1lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zm
c2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOworICAgICAgICAg
ICAgbGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAvIFZpZXdDbGFzczo6
ZWxlbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShW
aWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgp
KTsKKyAgICB9CisgICAgCisgICAgaWYgKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBl
ID09IFR5cGVEYXRhVmlldykKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVkIEFycmF5QnVmZmVyIGZvciB0aGUgZmlyc3QgYXJn
dW1lbnQuIikpOworICAgIAorICAgIC8vIEZvciBldmVyeXRoaW5nIGJ1dCBEYXRhVmlldywgd2Ug
YWxsb3cgY29uc3RydWN0aW9uIHdpdGggYW55IG9mOgorICAgIC8vIC0gQW5vdGhlciBhcnJheS4g
VGhpcyBjcmVhdGVzIGEgY29weSBvZiB0aGUgb2YgdGhhdCBhcnJheS4KKyAgICAvLyAtIEFuIGlu
dGVnZXIuIFRoaXMgY3JlYXRlcyBhIG5ldyB0eXBlZCBhcnJheSBvZiB0aGF0IGxlbmd0aCBhbmQg
emVyby1pbml0aWFsaXplcyBpdC4KKyAgICAKKyAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKSkpIHsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0KKyAgICAgICAgICAgIG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0Ns
YXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3VsdC0+c2V0KGV4ZWMsIG9iamVj
dCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgfQorICAgIAorICAgIGludCBsZW5ndGg7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
KDApLmlzSW50MzIoKSkKKyAgICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQz
MigpOworICAgIGVsc2UgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxp
ZCBhcnJheSBsZW5ndGggYXJndW1lbnQuIikpOworICAgIGVsc2UgeworICAgICAgICBsZW5ndGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpOworICAgICAg
ICBpZiAobGVuZ3RoICE9IGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxp
ZCBhcnJheSBsZW5ndGggYXJndW1lbnQgKGZyYWN0aW9uYWwgbGVuZ3RocyBub3QgYWxsb3dlZCku
IikpOworICAgIH0KKworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMg
bmVnYXRpdmUuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVh
dGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmll
d0NsYXNzPgorQ29uc3RydWN0VHlwZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
PFZpZXdDbGFzcz46OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29u
c3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdEdlbmVyaWNUeXBlZEFycmF5VmlldzxWaWV3Q2xhc3M+OworICAgIHJldHVybiBDb25zdHJ1
Y3RUeXBlSG9zdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorQ2FsbFR5cGUg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxWaWV3Q2xhc3M+OjpnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3PFZpZXdDbGFzcz47CisgICAg
cmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lc19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisjZGVm
aW5lIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lc19oCisKKyNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXcuaCIKKyNpbmNsdWRlICJSZWplY3QuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5cy5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldygKKyAgICBW
TSYgdm0sIENvbnN0cnVjdGlvbkNvbnRleHQmIGNvbnRleHQpCisgICAgOiBCYXNlKHZtLCBjb250
ZXh0KQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVh
dGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIENvbnN0cnVjdGlvbkNvbnRleHQgY29udGV4dChleGVjLT52bSgpLCBz
dHJ1Y3R1cmUsIGxlbmd0aCwgc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpKTsKKyAgICBp
ZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQorICAgICAgICBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldz4oZXhlYy0+dm0o
KS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcoZXhlYy0+dm0oKSwgY29u
dGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
cmVhdGVVbmluaXRpYWxpemVkKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRl
eHQoCisgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSksCisgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0
aWFsaXplKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQg
PQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXco
ZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbihleGVjLT52
bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcGFzc2VkQnVmZmVyLAorICAgIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBSZWZQdHI8QXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IHBhc3NlZEJ1ZmZlcjsKKyAgICBpZiAoIUFycmF5QnVmZmVyVmlldzo6dmVy
aWZ5U3ViUmFuZ2U8dHlwZW5hbWUgQWRhcHRvcjo6VHlwZT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpKSB7CisgICAgICAgIHRocm93RXJyb3IoCisgICAgICAgICAgICBleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICJCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBi
dWZmZXIiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb25zdHJ1Y3Rpb25Db250
ZXh0IGNvbnRleHQoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGxl
bmd0aCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
KiByZXN1bHQgPQorICAgICAgICBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0dlbmVyaWNU
eXBlZEFycmF5Vmlldz4oZXhlYy0+dm0oKS5oZWFwKSkKKyAgICAgICAgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcoZXhlYy0+dm0oKSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlv
bihleGVjLT52bSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBZGFwdG9yPgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCisgICAgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUGFzc1JlZlB0cjx0eXBlbmFtZSBBZGFwdG9yOjpWaWV3VHlwZT4gaW1wbCkKK3sK
KyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGltcGwtPmJ1ZmZlcigpOworICAgIENv
bnN0cnVjdGlvbkNvbnRleHQgY29udGV4dCh2bSwgc3RydWN0dXJlLCBidWZmZXIsIGltcGwtPmJ5
dGVPZmZzZXQoKSwgaW1wbC0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KKyAgICAgICAgbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXc+KHZtLmhlYXApKQorICAgICAgICBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlldyh2bSwgY29udGV4dCk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4KK0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAorICAgIFBhc3NSZWZQdHI8dHlwZW5hbWUgQWRh
cHRvcjo6Vmlld1R5cGU+IGltcGwpCit7CisgICAgcmV0dXJuIGNyZWF0ZShnbG9iYWxPYmplY3Qt
PnZtKCksIHN0cnVjdHVyZSwgaW1wbCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2YWxpZGF0ZVJhbmdlKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgaWYgKGNhbkFjY2Vzc1JhbmdlUXVpY2tseShvZmZzZXQsIGxlbmd0aCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCAiUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9m
IGJvdW5kcyIpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+Citib29sIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpzZXRXaXRoU3BlY2lmaWNUeXBlKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgT3RoZXJUeXBlKiBvdGhlciwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Cit7CisgICAgLy8gSGFuZGxlIHRoZSBoaWxhcmlvdXMgY2FzZTogdGhlIGFjdCBvZiBnZXR0aW5n
IHRoZSBsZW5ndGggY291bGQgaGF2ZSByZXN1bHRlZAorICAgIC8vIGluIG5ldXRlcmluZy4gV2Vs
bCwgbm8uIFRoYXQnbGwgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgdGhlcmUgY2Fubm90IGJlCisgICAg
Ly8gc2lkZS1lZmZlY3RzIG9uIGdldHRpbmcgdGhlIGxlbmd0aCBvZiBhIHR5cGVkIGFycmF5LiBC
dXQgcHJlZGljdGluZyB3aGVyZSB0aGVyZQorICAgIC8vIGFyZSwgb3IgYXJlbid0LCBzaWRlLWVm
ZmVjdHMgaXMgYSBmb29sJ3MgZ2FtZSBzbyB3ZSByZXNvcnQgdG8gdGhpcyBjaGVhcAorICAgIC8v
IGNoZWNrLiBXb3JzdCBjYXNlLCBpZiB3ZSdyZSB3cm9uZywgcGVvcGxlIHN0YXJ0IHNlZWluZyBs
ZXNzIHRoaW5ncyBnZXQgY29waWVkCisgICAgLy8gYnV0IHdlIHdvbid0IGhhdmUgYSBzZWN1cml0
eSB2dWxuZXJhYmlsaXR5LgorICAgIGxlbmd0aCA9IHN0ZDo6bWluKGxlbmd0aCwgb3RoZXItPmxl
bmd0aCgpKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5n
dGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLT5sZW5ndGgo
KSAhPSBsZW5ndGgpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICJMZW5ndGggb2YgaW5jb21pbmcgYXJyYXkgY2hhbmdlZCB1bmV4cGVjdGVkbHkuIikp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQg
aSA9IGxlbmd0aDsgaS0tOykKKyAgICAgICAgc2V0SW5kZXhRdWlja2x5KG9mZnNldCArIGksIG90
aGVyLT5nZXRJbmRleFF1aWNrbHkoaSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPjo6c2V0KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBj
aSA9IG9iamVjdC0+Y2xhc3NJbmZvKCk7CisgICAgaWYgKGNpLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUgPT0gQWRhcHRvcjo6dHlwZVZhbHVlKSB7CisgICAgICAgIC8vIFRoZSBzdXBlciBmYXN0IGNh
c2U6IHdlIGNhbiBqdXN0IG1lbWNweSBzaW5jZSB3ZSdyZSB0aGUgc2FtZSB0eXBlLgorICAgICAg
ICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyogb3RoZXIgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRB
cnJheVZpZXcqPihvYmplY3QpOworICAgICAgICBsZW5ndGggPSBzdGQ6Om1pbihsZW5ndGgsIG90
aGVyLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXZhbGlkYXRlUmFuZ2UoZXhl
Yywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgbWVtY3B5KHR5cGVkVmVjdG9yKCkgKyBvZmZzZXQsIG90aGVyLT50eXBlZFZlY3Rv
cigpLCBvdGhlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIHN3aXRjaCAoY2ktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgIGNhc2Ug
VHlwZUludDg6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2Fz
dDxKU0ludDhBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpT
SW50MTZBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVJbnQz
MjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTSW50
MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50ODoK
KyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0PEpTVWludDhB
cnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1w
ZWQ6CisgICAgICAgIHJldHVybiBzZXRXaXRoU3BlY2lmaWNUeXBlKGV4ZWMsIGpzQ2FzdDxKU1Vp
bnQ4Q2xhbXBlZEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgVHlw
ZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTVWludDE2QXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNVaW50MzJBcnJheSo+KG9iamVjdCksIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICByZXR1cm4gc2V0V2l0aFNwZWNpZmljVHlwZShleGVjLCBqc0Nhc3Q8
SlNGbG9hdDMyQXJyYXkqPihvYmplY3QpLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgY2FzZSBUeXBl
RmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIHNldFdpdGhTcGVjaWZpY1R5cGUoZXhlYywganNDYXN0
PEpTRmxvYXQ2NEFycmF5Kj4ob2JqZWN0KSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIGNhc2UgTm90
VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzogeworICAgICAgICBpZiAoIXZhbGlk
YXRlUmFuZ2UoZXhlYywgb2Zmc2V0LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAvLyBXZSBjb3VsZCBvcHRpbWl6ZSB0aGlzIGNhc2UuIEJ1dCByaWdodCBub3cs
IHdlIGRvbid0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghc2V0SW5kZXhRdWlja2x5KGV4ZWMsIG9mZnNldCArIGksIG9i
amVjdC0+Z2V0KGV4ZWMsIGkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CisgICAgCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QoCisgICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKHRo
aXNPYmplY3QtPmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3Ro
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUoanNOdW1iZXIodGhpc09iamVjdC0+Ynl0ZUxlbmd0
aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
bmRleCA9IHByb3BlcnR5TmFtZS5hc0luZGV4KCk7CisgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5
TmFtZTo6Tm90QW5JbmRleCAmJiB0aGlzT2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoaW5kZXgp
KSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGlu
ZGV4KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCisgICAgSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+
KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcih0aGlz
T2JqZWN0LT5sZW5ndGgoKSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5ieXRlTGVuZ3RoKSB7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRv
cihqc051bWJlcih0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXggPSBwcm9wZXJ0eU5hbWUuYXNJbmRleCgpOworICAgIGlmIChpbmRleCAhPSBQcm9wZXJ0eU5h
bWU6Ok5vdEFuSW5kZXggJiYgdGhpc09iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGluZGV4KSkg
eworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IodGhpc09iamVjdC0+Z2V0SW5kZXhR
dWlja2x5KGluZGV4KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK3ZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OnB1dCgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlO
YW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgLy8gRmlyZWZv
eCBhcHBlYXJzIHRvIHNpbXBseSBpZ25vcmUgYXR0ZW1wdHMgdG8gc3RvcmUgdG8gdGhlIGxlbmd0
aCBwcm9wZXJ0eS4KKyAgICAgICAgLy8gRXZlbiBpbiBzdHJpY3QgbW9kZS4gSSB3aWxsIGRvIHRo
ZSBzYW1lLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
ID0gcHJvcGVydHlOYW1lLmFzSW5kZXgoKTsKKyAgICBpZiAoaW5kZXggIT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5k
ZXgsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBCYXNlOjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Citib29sIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWZpbmVPd25Qcm9wZXJ0eSgKKyAgICBKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisg
ICAgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIG1hdGNoaW5n
IEZpcmVmb3ggYmVoYXZpb3IuIEluIHBhcnRpY3VsYXIsIGl0IHJlamVjdHMgYWxsIGF0dGVtcHRz
IHRvCisgICAgLy8gZGVmaW5lT3duUHJvcGVydHkgZm9yIGluZGV4ZWQgcHJvcGVydGllcyBvbiB0
eXBlZCBhcnJheXMsIGV2ZW4gaWYgdGhleSdyZSBvdXQKKyAgICAvLyBvZiBib3VuZHMuCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoCisgICAgICAg
IHx8IHByb3BlcnR5TmFtZS5hc0luZGV4KCkgIT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4KQor
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHNob3VsZFRocm93LCAiQXR0ZW1wdGluZyB0byB3
cml0ZSB0byBhIHJlYWQtb25seSB0eXBlZCBhcnJheSBwcm9wZXJ0eS4iKTsKKyAgICAKKyAgICBy
ZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Citib29sIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpkZWxldGVQcm9w
ZXJ0eSgKKyAgICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KGNlbGwpOworICAgIAorICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aAorICAgICAgICB8fCBw
cm9wZXJ0eU5hbWUuYXNJbmRleCgpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0eSh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPgorYm9vbCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCgKKyAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Kj4ob2JqZWN0KTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FSUkFZ
X0lOREVYKSB7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRP
d25Qcm9wZXJ0eVNsb3QoCisgICAgICAgICAgICB0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSksIHNsb3QpOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXRoaXNPYmplY3QtPmNhbkdldEluZGV4UXVpY2tseShwcm9wZXJ0eU5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LT5nZXRJbmRl
eFF1aWNrbHkocHJvcGVydHlOYW1lKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpwdXRCeUluZGV4KAorICAgIEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqPihjZWxsKTsKKyAgICAKKyAgICBpZiAocHJvcGVydHlOYW1lID4gTUFYX0FS
UkFZX0lOREVYKSB7CisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNob3VsZFRocm93KTsK
KyAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KAorICAgICAgICAgICAgdGhp
c09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpLCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5jYW5TZXRJbmRleFF1aWNrbHkocHJvcGVydHlOYW1lKSkgeworICAgICAgICAvLyBZZXMs
IHJlYWxseS4gRmlyZWZveCByZXR1cm5zIHdpdGhvdXQgdGhyb3dpbmcgYW55dGhpbmcgaWYgeW91
IHN0b3JlIGJleW9uZAorICAgICAgICAvLyB0aGUgYm91bmRzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseShleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK2Jvb2wgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKKyAg
ICBKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKQor
eworICAgIGlmIChwcm9wZXJ0eU5hbWUgPiBNQVhfQVJSQVlfSU5ERVgpIHsKKyAgICAgICAgcmV0
dXJuIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KAorICAgICAgICAgICAgY2Vs
bCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgor
dm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldyo+KG9iamVjdCk7CisgICAgCisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKKyAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OworICAgIAorICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2
b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KAorICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1f
bGVuZ3RoOyArK2kpCisgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVyKGV4ZWMsIFN0cmluZzo6
bnVtYmVyKGkpKSk7CisgICAgCisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihjZWxsKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgeworICAgIGNh
c2UgRmFzdFR5cGVkQXJyYXk6IHsKKyAgICAgICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVj
dCwgVHlwZWRBcnJheVZlY3RvckNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV92ZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgT3ZlcnNpemVUeXBlZEFycmF5OiB7CisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFN
ZW1vcnlVc2FnZSh0aGlzT2JqZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIFdhc3RlZnVsVHlwZWRBcnJheToKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+Ojpjb3B5QmFja2luZ1N0b3JlKAorICAgIEpTQ2VsbCogY2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBKU0dlbmVyaWNU
eXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmll
dyo+KGNlbGwpOworICAgIAorICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRv
a2VuCisgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92
ZWN0b3IpKSB7CisgICAgICAgIHZvaWQqIG9sZFZlY3RvciA9IHRoaXNPYmplY3QtPm1fdmVjdG9y
OworICAgICAgICB2b2lkKiBuZXdWZWN0b3IgPSB2aXNpdG9yLmFsbG9jYXRlTmV3U3BhY2UodGhp
c09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIG1lbWNweShuZXdWZWN0b3IsIG9sZFZlY3Rv
ciwgdGhpc09iamVjdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPm1fdmVjdG9y
ID0gbmV3VmVjdG9yOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkVmVjdG9yLCB0aGlzT2Jq
ZWN0LT5ieXRlU2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9y
ZSh0aGlzT2JqZWN0LCB2aXNpdG9yLCB0b2tlbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpzbG93RG93bkFu
ZFdhc3RlTWVtb3J5KEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcqPihvYmplY3QpOworICAgIAorICAgIC8vIFdlIHBsYXkgdGhpcyBnYW1lIGJlY2F1c2Ugd2Ug
d2FudCB0aGlzIHRvIGJlIGNhbGxhYmxlIGV2ZW4gZnJvbSBwbGFjZXMgdGhhdAorICAgIC8vIGRv
bid0IGhhdmUgYWNjZXNzIHRvIEV4ZWNTdGF0ZSogb3IgdGhlIFZNLCBhbmQgd2Ugb25seSBhbGxv
Y2F0ZSBzbyBsaXR0bGUKKyAgICAvLyBtZW1vcnkgaGVyZSB0aGF0IGl0J3Mgbm90IG5lY2Vzc2Fy
eSB0byB0cmlnZ2VyIGEgR0MgLSBqdXN0IGFjY291bnRpbmcgd2hhdAorICAgIC8vIHdlIGhhdmUg
ZG9uZSBpcyBnb29kIGVub3VnaC4gVGhlIHNvcnQgb2YgYml6YXJybyBleGNlcHRpb24gdG8gdGhl
ICJhbGxvY2F0aW5nCisgICAgLy8gbGl0dGxlIG1lbW9yeSIgaXMgd2hlbiB3ZSB0cmFuc2ZlciBh
IGJhY2tpbmcgYnVmZmVyIGludG8gdGhlIEMgaGVhcDsgdGhpcworICAgIC8vIHdpbGwgdGVtcG9y
YXJpbHkgZ2V0IGNvdW50ZWQgdG93YXJkcyBoZWFwIGZvb3RwcmludCAoaW5jb3JyZWN0bHksIGlu
IHRoZSBjYXNlCisgICAgLy8gb2YgYWRvcHRpbmcgYW4gb3ZlcnNpemUgdHlwZWQgYXJyYXkpIGJ1
dCB3ZSBkb24ndCBHQyBoZXJlIGFueXdheS4gVGhhdCdzCisgICAgLy8gYWxtb3N0IGNlcnRhaW5s
eSBmaW5lLiBUaGUgd29yc3QgY2FzZSBpcyBpZiB5b3UgY3JlYXRlZCBhIHRvbiBvZiBmYXN0IHR5
cGVkCisgICAgLy8gYXJyYXlzLCBhbmQgZGlkIG5vdGhpbmcgYnV0IGNhdXNlZCBhbGwgb2YgdGhl
bSB0byBzbG93IGRvd24gYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHlv
dXIgbWVtb3J5IGZvb3RwcmludCB3aWxsIGRvdWJsZSBiZWZvcmUgdGhlIEdDIHJlYWxpemVzIHdo
YXQncworICAgIC8vIHVwLiBCdXQgaWYgeW91IGRvICphbnl0aGluZyogdG8gdHJpZ2dlciBhIEdD
IHdhdGVybWFyayBjaGVjaywgaXQgd2lsbCBrbm93CisgICAgLy8gdGhhdCB5b3UgKmhhZCogZG9u
ZSB0aG9zZSBhbGxvY2F0aW9ucyBhbmQgaXQgd2lsbCBHQyBhcHByb3ByaWF0ZWx5LgorICAgIEhl
YXAqIGhlYXAgPSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpOworICAgIERlZmVyR0NGb3JBV2hpbGUg
ZGVmZXJHQygqaGVhcCk7CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5oYXNJbmRleGlu
Z0hlYWRlcigpKTsKKworICAgIHNpemVfdCBzaXplID0gdGhpc09iamVjdC0+Ynl0ZVNpemUoKTsK
KyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9tb2RlID09IEZhc3RUeXBlZEFycmF5CisgICAg
ICAgICYmICF0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiBzaXplID49IHNpemVvZihJbmRleGlu
Z0hlYWRlcikpIHsKKyAgICAgICAgLy8gUmV1c2UgYWxyZWFkeSBhbGxvY2F0ZWQgbWVtb3J5IGlm
IGF0IGFsbCBwb3NzaWJsZS4KKyAgICAgICAgdGhpc09iamVjdC0+bV9idXR0ZXJmbHkgPQorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SW5kZXhpbmdIZWFkZXIqPih0aGlzT2JqZWN0LT5tX3ZlY3Rv
ciktPmJ1dHRlcmZseSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXNPYmplY3QtPm1fYnV0
dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVPckdyb3dBcnJheVJpZ2h0KAorICAgICAgICAgICAg
dGhpc09iamVjdC0+bV9idXR0ZXJmbHksICpoZWFwLT52bSgpLCB0aGlzT2JqZWN0LCB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBmYWxzZSwgMCwgMCk7CisgICAgfQorCisgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXI7CisgICAgCisgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5tX21vZGUp
IHsKKyAgICBjYXNlIEZhc3RUeXBlZEFycmF5OgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHRoaXNPYmplY3QtPm1fdmVjdG9yLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6
CisgICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJh
Y3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CisgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5v
dyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRl
ZAorICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgorICAgICAgICBidWZmZXIgPSBBcnJheUJ1
ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3RvciwgdGhpc09iamVjdC0+Ynl0
ZUxlbmd0aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgV2FzdGVmdWxU
eXBlZEFycmF5OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+aW5kZXhpbmdI
ZWFkZXIoKS0+c2V0QXJyYXlCdWZmZXIoYnVmZmVyLmdldCgpKTsKKyAgICB0aGlzT2JqZWN0LT5t
X3ZlY3RvciA9IGJ1ZmZlci0+ZGF0YSgpOworICAgIHRoaXNPYmplY3QtPm1fbW9kZSA9IFdhc3Rl
ZnVsVHlwZWRBcnJheTsKKyAgICBoZWFwLT5hZGRSZWZlcmVuY2UodGhpc09iamVjdCwgYnVmZmVy
LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4KK1Bhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PgorSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldFR5cGVk
QXJyYXlJbXBsKEpTQXJyYXlCdWZmZXJWaWV3KiBvYmplY3QpCit7CisgICAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmljVHlwZWRBcnJheVZpZXcq
PihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50eXBlZEltcGwoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b3R5cGVfaAorI2RlZmluZSBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZV9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2xhc3MgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZShWTSYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHN0YXRp
YyBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogY3JlYXRlKAorICAgICAgICBFeGVj
U3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIAorICAgIERFQ0xBUkVf
SU5GTzsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlSW5saW5lcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisjZGVmaW5lIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lc19oCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisj
aW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY1NldChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVmlld0NsYXNzKiB0
aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7
CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiUmVjZWl2ZXIgc2hvdWxkIGJlIGEgdHlwZWQgYXJyYXkg
dmlldyIpKTsKKyAgICAKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkV4cGVjdGVk
IGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpKTsKKyAgICAKKyAgICBKU09iamVjdCogc291cmNlQXJy
YXkgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQoMCkpOworICAgIGlm
ICghc291cmNlQXJyYXkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0IikpOwor
ICAgIAorICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDIpIHsKKyAgICAgICAgb2Zmc2V0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG9m
ZnNldCA9IDA7CisgICAgCisgICAgdW5zaWduZWQgbGVuZ3RoID0gc291cmNlQXJyYXktPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHRoaXNPYmplY3QtPnNldChleGVjLCBzb3Vy
Y2VBcnJheSwgb2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJy
YXkoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIAorICAgIFZpZXdDbGFzcyogdGhpc09i
amVjdCA9IGpzRHluYW1pY0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOworICAg
IGlmICghdGhpc09iamVjdCkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgIlJlY2VpdmVyIHNob3VsZCBiZSBhIHR5cGVkIGFycmF5IHZpZXci
KSk7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJFeHBlY3RlZCBhdCBs
ZWFzdCBvbmUgYXJndW1lbnQiKSk7CisgICAgCisgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAg
IGludDMyX3QgZW5kOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgeworICAg
ICAgICBlbmQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIH0gZWxzZQorICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5s
ZW5ndGgoKTsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGxlbmd0aCBoZXJlOyBsYXRlciBhc3NlcnQg
dGhhdCB0aGUgbGVuZ3RoIGRpZG4ndCBjaGFuZ2UuCisgICAgdW5zaWduZWQgdGhpc0xlbmd0aCA9
IHRoaXNPYmplY3QtPmxlbmd0aCgpOworICAgIAorICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSBpbmRp
Y2VzOiAteCA9PiBsZW5ndGggLSB4CisgICAgaWYgKGJlZ2luIDwgMCkKKyAgICAgICAgYmVnaW4g
PSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KHRoaXNMZW5ndGggKyBiZWdpbiksIDApOworICAg
IGlmIChlbmQgPCAwKQorICAgICAgICBlbmQgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KHRo
aXNMZW5ndGggKyBlbmQpLCAwKTsKKyAgICAKKyAgICAvLyBDbGFtcCB0aGUgaW5kaWNlcyB0byB0
aGUgYm91bmRzIG9mIHRoZSBhcnJheS4KKyAgICBBU1NFUlQoYmVnaW4gPj0gMCk7CisgICAgQVNT
RVJUKGVuZCA+PSAwKTsKKyAgICBiZWdpbiA9IHN0ZDo6bWluKGJlZ2luLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgZW5kID0gc3RkOjptaW4oZW5kLCBzdGF0aWNfY2Fz
dDxpbnQzMl90Pih0aGlzTGVuZ3RoKSk7CisgICAgCisgICAgLy8gQ2xhbXAgZW5kIHRvIGJlZ2lu
LgorICAgIGVuZCA9IHN0ZDo6bWF4KGJlZ2luLCBlbmQpOworICAgIAorICAgIEFTU0VSVChlbmQg
Pj0gYmVnaW4pOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGJlZ2luOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGVuZCAtIGJlZ2luOworICAgIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlC
dWZmZXIgPSB0aGlzT2JqZWN0LT5idWZmZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzTGVu
Z3RoID09IHRoaXNPYmplY3QtPmxlbmd0aCgpKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9CisgICAgICAgIGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOworICAgIAorICAgIFZpZXdDbGFz
cyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgIGV4ZWMsIHN0cnVjdHVyZSwg
YXJyYXlCdWZmZXIsCisgICAgICAgIHRoaXNPYmplY3QtPmJ5dGVPZmZzZXQoKSArIG9mZnNldCAq
IFZpZXdDbGFzczo6ZWxlbWVudFNpemUsCisgICAgICAgIGxlbmd0aCk7CisgICAgCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CitKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQoreworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+Cit2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFz
cz46OmZpbmlzaENyZWF0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAKKyAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CisgICAgCisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQs
IGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NldDxWaWV3Q2xhc3M+LCBEb250RW51bSwg
Mik7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zdWJhcnJheSwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU3ViYXJyYXk8Vmlld0NsYXNzPiwgRG9udEVu
dW0sIDIpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+QllURVNfUEVSX0VM
RU1FTlQsIGpzTnVtYmVyKFZpZXdDbGFzczo6ZWxlbWVudFNpemUpLCBEb250RW51bSB8IFJlYWRP
bmx5IHwgRG9udERlbGV0ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPFZpZXdDbGFzcz4qCitKU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvdHlwZTxWaWV3Q2xhc3M+OjpjcmVhdGUoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZSogcHJvdG90eXBlID0KKyAg
ICAgICAgbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGU+KGV4ZWMtPnZtKCkuaGVhcCkpCisgICAgICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlLT5maW5p
c2hDcmVhdGlvbihleGVjLCBnbG9iYWxPYmplY3QpOworICAgIHJldHVybiBwcm90b3R5cGU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KK1N0cnVjdHVyZSogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGU8Vmlld0NsYXNzPjo6Y3JlYXRlU3RydWN0dXJlKAorICAgIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7
CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKAorICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwxNSArNDksMjYgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1
ZGUgIkpTQVBJV3JhcHBlck9iamVjdC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaCIKKyNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNC
b3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSlNDYWxsYmFja0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5o
IgorI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU0RhdGFWaWV3UHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNs
dWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgogI2luY2x1ZGUgIkpTT05P
YmplY3QuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRl
ICJKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgog
I2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVnYWN5UHJvZmlsZXIuaCIKICNp
bmNsdWRlICJMb29rdXAuaCIKQEAgLTIxNCw2ICsyMjUsMzAgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRlcihleGVj
LT52bSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYywgdGhpcywgMCwgU3RyaW5nKCksIGdsb2Jh
bEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RBY2Nl
c3NvcihleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvLCBwcm90b0Fj
Y2Vzc29yLCBBY2Nlc3NvciB8IERvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5z
dHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwgbV9v
YmplY3RQcm90b3R5cGUuZ2V0KCkpOworICAgIAorICAgIG1fYXJyYXlCdWZmZXJQcm90b3R5cGUu
c2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTQXJyYXlCdWZmZXJQcm90b3R5cGU6OmNyZWF0ZShleGVj
LCB0aGlzLCBKU0FycmF5QnVmZmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0o
KSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0
b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDhB
cnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTSW50OEFycmF5UHJvdG90eXBlOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQxNildLnByb3RvdHlwZS5zZXQo
ZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhp
cywgSlNJbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVJbnQzMildLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQzMkFycmF5
UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywgSlNJbnQzMkFycmF5UHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7
CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50OCldLnByb3RvdHlwZS5zZXQoZXhl
Yy0+dm0oKSwgdGhpcywgSlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGUoZXhlYywgdGhpcywg
SlNVaW50OEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5
cGVVaW50OENsYW1wZWQpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhD
bGFtcGVkQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQ4Q2xhbXBlZEFy
cmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYp
XS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDE2QXJyYXlQcm90b3R5cGU6
OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQxNkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90
eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuc2V0KGV4ZWMtPnZtKCks
IHRoaXMsIEpTVWludDMyQXJyYXlQcm90b3R5cGU6OmNyZWF0ZShleGVjLCB0aGlzLCBKU1VpbnQz
MkFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmpl
Y3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9h
dDMyKV0ucHJvdG90eXBlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0MzJBcnJheVByb3Rv
dHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMsIEpTRmxvYXQzMkFycmF5UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7Cisg
ICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0ucHJvdG90eXBlLnNldChleGVj
LT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheVByb3RvdHlwZTo6Y3JlYXRlKGV4ZWMsIHRoaXMs
IEpTRmxvYXQ2NEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCkpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVEYXRhVmlldyldLnByb3RvdHlwZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNEYXRhVmll
d1Byb3RvdHlwZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIEpTRGF0YVZpZXdQcm90b3R5cGU6OmNyZWF0
ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSkpKTsK
KyAgICAKKyAgICBtX2FycmF5QnVmZmVyU3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBK
U0FycmF5QnVmZmVyOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9hcnJheUJ1
ZmZlclByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlSW50
OCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQ4QXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDgp
XS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2
KV0uc3RydWN0dXJlLnNldChleGVjLT52bSgpLCB0aGlzLCBKU0ludDE2QXJyYXk6OmNyZWF0ZVN0
cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2
KV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQz
MildLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNJbnQzMkFycmF5OjpjcmVhdGVT
dHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQz
MildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWlu
dDgpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTVWludDhBcnJheTo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWlu
dDgpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAgICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVp
bnQ4Q2xhbXBlZCldLnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgSlNVaW50OENsYW1w
ZWRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNb
dG9JbmRleChUeXBlVWludDhDbGFtcGVkKV0ucHJvdG90eXBlLmdldCgpKSk7CisgICAgbV90eXBl
ZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MTYpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRo
aXMsIEpTVWludDE2QXJyYXk6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX3R5
cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSkpOworICAgIG1f
dHlwZWRBcnJheXNbdG9JbmRleChUeXBlVWludDMyKV0uc3RydWN0dXJlLnNldChleGVjLT52bSgp
LCB0aGlzLCBKU1VpbnQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywg
bV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVVaW50MzIpXS5wcm90b3R5cGUuZ2V0KCkpKTsKKyAg
ICBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUZsb2F0MzIpXS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIHRoaXMsIEpTRmxvYXQzMkFycmF5OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwg
dGhpcywgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDMyKV0ucHJvdG90eXBlLmdldCgp
KSk7CisgICAgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVGbG9hdDY0KV0uc3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCB0aGlzLCBKU0Zsb2F0NjRBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMt
PnZtKCksIHRoaXMsIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlw
ZS5nZXQoKSkpOworICAgIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRGF0YVZpZXcpXS5zdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIEpTRGF0YVZpZXc6OmNyZWF0ZVN0cnVjdHVyZShl
eGVjLT52bSgpLCB0aGlzLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0ucHJv
dG90eXBlLmdldCgpKSk7CiAKICAgICBtX25hbWVTY29wZVN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgdGhpcywgSlNOYW1lU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBq
c051bGwoKSkpOwogICAgIG1fYWN0aXZhdGlvblN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgdGhp
cywgSlNBY3RpdmF0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywganNOdWxs
KCkpKTsKQEAgLTMxOCw2ICszNTMsMjcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNW
YWx1ZSBwcm90bwogCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+dm0oKSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLkpTT04sIEpTT05PYmplY3Q6OmNyZWF0ZShleGVjLCB0aGlz
LCBKU09OT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCkpKSwgRG9udEVudW0pOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5NYXRoLCBNYXRoT2JqZWN0Ojpj
cmVhdGUoZXhlYywgdGhpcywgTWF0aE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCks
IHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKSksIERvbnRFbnVtKTsKKyAgICAKKyAgICBK
U0FycmF5QnVmZmVyQ29uc3RydWN0b3IqIGFycmF5QnVmZmVyQ29uc3RydWN0b3IgPSBKU0FycmF5
QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdl
dCgpKSwgbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKSk7CisgICAgRml4ZWRBcnJheTxJbnRl
cm5hbEZ1bmN0aW9uKiwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiB0eXBlZEFycmF5Q29u
c3RydWN0b3JzOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBlSW50OCld
ID0gSlNJbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTSW50OEFycmF5Q29uc3Ry
dWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgpLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4KFR5cGVJbnQ4KV0ucHJvdG90eXBlLmdl
dCgpLCAiSW50OEFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5
cGVJbnQxNildID0gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0ludDE2
QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZUludDE2KV0u
cHJvdG90eXBlLmdldCgpLCAiSW50MTZBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cnNbdG9JbmRleChUeXBlSW50MzIpXSA9IEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT52bSgp
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSwgbV90eXBlZEFycmF5c1t0b0luZGV4
KFR5cGVJbnQzMildLnByb3RvdHlwZS5nZXQoKSwgIkludDMyQXJyYXkiKTsKKyAgICB0eXBlZEFy
cmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZVVpbnQ4KV0gPSBKU1VpbnQ4QXJyYXlDb25zdHJ1
Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSksIG1fdHlwZWRB
cnJheXNbdG9JbmRleChUeXBlVWludDgpXS5wcm90b3R5cGUuZ2V0KCksICJVaW50OEFycmF5Iik7
CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50OENsYW1wZWQpXSA9
IEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDhDbGFt
cGVkQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1f
ZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQ4
Q2xhbXBlZCldLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQ4Q2xhbXBlZEFycmF5Iik7CisgICAgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MTYpXSA9IEpTVWludDE2QXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRl
U3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBt
X3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQxNildLnByb3RvdHlwZS5nZXQoKSwgIlVpbnQx
NkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0b0luZGV4KFR5cGVVaW50MzIp
XSA9IEpTVWludDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTVWludDMyQXJyYXlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rpb25Q
cm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZVVpbnQzMildLnByb3Rv
dHlwZS5nZXQoKSwgIlVpbnQzMkFycmF5Iik7CisgICAgdHlwZWRBcnJheUNvbnN0cnVjdG9yc1t0
b0luZGV4KFR5cGVGbG9hdDMyKV0gPSBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGUo
dGhpcywgSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZt
KCksIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5k
ZXgoVHlwZUZsb2F0MzIpXS5wcm90b3R5cGUuZ2V0KCksICJGbG9hdDMyQXJyYXkiKTsKKyAgICB0
eXBlZEFycmF5Q29uc3RydWN0b3JzW3RvSW5kZXgoVHlwZUZsb2F0NjQpXSA9IEpTRmxvYXQ2NEFy
cmF5Q29uc3RydWN0b3I6OmNyZWF0ZSh0aGlzLCBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZXhlYy0+dm0oKSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSksIG1fdHlwZWRBcnJheXNbdG9JbmRleChUeXBlRmxvYXQ2NCldLnByb3RvdHlwZS5nZXQoKSwg
IkZsb2F0NjRBcnJheSIpOworICAgIHR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbdG9JbmRleChUeXBl
RGF0YVZpZXcpXSA9IEpTRGF0YVZpZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHRoaXMsIEpTRGF0YVZp
ZXdDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPnZtKCksIHRoaXMsIG1fZnVuY3Rp
b25Qcm90b3R5cGUuZ2V0KCkpLCBtX3R5cGVkQXJyYXlzW3RvSW5kZXgoVHlwZURhdGFWaWV3KV0u
cHJvdG90eXBlLmdldCgpLCAiRGF0YVZpZXciKTsKKyAgICAKKyAgICBtX2FycmF5QnVmZmVyUHJv
dG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT52bSgpLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyQ29uc3RydWN0b3IsIERvbnRFbnVt
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVkQXJyYXlJbmRleCA9IE5VTUJFUl9PRl9U
WVBFRF9BUlJBWV9UWVBFUzsgdHlwZWRBcnJheUluZGV4LS07KSB7CisgICAgICAgIG1fdHlwZWRB
cnJheXNbdHlwZWRBcnJheUluZGV4XS5wcm90b3R5cGUtPnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnZtKCksIElkZW50aWZpZXIoZXhlYywgdHlw
ZWRBcnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLT5uYW1lKGV4ZWMpKSwgdHlwZWRB
cnJheUNvbnN0cnVjdG9yc1t0eXBlZEFycmF5SW5kZXhdLCBEb250RW51bSk7CisgICAgfQogCiAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKICAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5OYU4sIGpzTmFOKCksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKQEAgLTU0MCw2ICs1OTYsMTQgQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKKyAgICAKKyAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9hcnJheUJ1ZmZlclByb3RvdHlwZSk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fYXJyYXlCdWZmZXJTdHJ1Y3R1cmUpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgaS0tOykgeworICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBlZEFycmF5c1tpXS5wcm90b3R5
cGUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90eXBlZEFycmF5c1tp
XS5zdHJ1Y3R1cmUpOworICAgIH0KIH0KIAogSlNWYWx1ZSBKU0dsb2JhbE9iamVjdDo6dG9UaGlz
KEpTQ2VsbCosIEV4ZWNTdGF0ZSogZXhlYywgRUNNQU1vZGUgZWNtYU1vZGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJBcnJheUFsbG9j
YXRpb25Qcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NS
ZWYuaCIKLSNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNX
ZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVDaGFpbi5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5o
IgorI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0xNjYs
NiArMTY3LDE2IEBAIHByb3RlY3RlZDoKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Jl
Z0V4cFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cmluZ09iamVj
dFN0cnVjdHVyZTsKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX2ludGVybmFsRnVuY3Rp
b25TdHJ1Y3R1cmU7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPEpTQXJyYXlCdWZmZXJQcm90b3R5
cGU+IG1fYXJyYXlCdWZmZXJQcm90b3R5cGU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4g
bV9hcnJheUJ1ZmZlclN0cnVjdHVyZTsKKyAgICAKKyAgICBzdHJ1Y3QgVHlwZWRBcnJheURhdGEg
eworICAgICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IHByb3RvdHlwZTsKKyAgICAgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZT4gc3RydWN0dXJlOworICAgIH07CisgICAgCisgICAgRml4ZWRB
cnJheTxUeXBlZEFycmF5RGF0YSwgTlVNQkVSX09GX1RZUEVEX0FSUkFZX1RZUEVTPiBtX3R5cGVk
QXJyYXlzOwogICAgICAgICAKICAgICB2b2lkKiBtX3NwZWNpYWxQb2ludGVyc1tTcGVjaWFsOjpU
YWJsZVNpemVdOyAvLyBTcGVjaWFsIHBvaW50ZXJzIHVzZWQgYnkgdGhlIExMSW50IGFuZCBKSVQu
CiAKQEAgLTMzMCw2ICszNDEsMTQgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZSogcmVnRXhwTWF0
Y2hlc0FycmF5U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9yZWdFeHBNYXRjaGVzQXJyYXlT
dHJ1Y3R1cmUuZ2V0KCk7IH0KICAgICBTdHJ1Y3R1cmUqIHJlZ0V4cFN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnRXhwU3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBzdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZ09iamVjdFN0cnVjdHVy
ZS5nZXQoKTsgfQorICAgIAorICAgIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUqIGFycmF5QnVmZmVy
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hcnJheUJ1ZmZlclByb3RvdHlwZS5nZXQoKTsg
fQorICAgIFN0cnVjdHVyZSogYXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X2FycmF5QnVmZmVyU3RydWN0dXJlLmdldCgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiB0eXBl
ZEFycmF5U3RydWN0dXJlKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlZEFycmF5c1t0b0luZGV4KHR5cGUpXS5zdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgfQogCiAgICAgdm9pZCogYWN0dWFsUG9pbnRlckZvcihTcGVjaWFsOjpQb2ludGVyIHBvaW50
ZXIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQ4QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ludDhB
cnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJ
bnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTSW50OEFycmF5X2gKKyNk
ZWZpbmUgSlNJbnQ4QXJyYXlfaAorCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5k
aWYgLy8gSlNJbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0ludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0ludDE2QXJyYXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW50MTZBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNJ
bnQxNkFycmF5X2gKKyNkZWZpbmUgSlNJbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRB
cnJheXMuaCIKKworI2VuZGlmIC8vIEpTSW50MTZBcnJheV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbnQzMkFycmF5LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBKU0ludDMyQXJyYXlfaAorI2RlZmluZSBKU0ludDMyQXJyYXlfaAorCisj
aW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNJbnQzMkFycmF5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0
b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3Ry
dWN0b3JzLmgiCisKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9y
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIgor
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNkZWZpbmUgTUFL
RV9TX0lORk8odHlwZSkgXAorICAgIHRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTIyN0eXBl
IyNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyJGdW5jdGlvbiIsICZKUyMjdHlwZSMjQ29uc3RydWN0
b3I6OkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKUyMjdHlwZSMjQ29u
c3RydWN0b3IpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZB
cnJheSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkp
OworTUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJy
YXkpOworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5
KTsKK01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CitNQUtFX1NfSU5GTyhEYXRhVmlldyk7CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNUeXBlZEFycmF5Q29uc3RydWN0b3Jz
X2gKKyNkZWZpbmUgSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzX2gKKworI2luY2x1ZGUgIkpTRGF0
YVZpZXcuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTSW50OEFycmF5PiBKU0ludDhB
cnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9yPEpTSW50MTZBcnJheT4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNJbnQzMkFycmF5PiBKU0ludDMyQXJyYXlD
b25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcjxK
U1VpbnQ4QXJyYXk+IEpTVWludDhBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTVWludDhDbGFtcGVkQXJyYXk+IEpTVWludDhDbGFt
cGVkQXJyYXlDb25zdHJ1Y3RvcjsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25z
dHJ1Y3RvcjxKU1VpbnQxNkFycmF5PiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I7Cit0eXBlZGVm
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3I8SlNVaW50MzJBcnJheT4gSlNVaW50
MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yPEpTRmxvYXQzMkFycmF5PiBKU0Zsb2F0MzJBcnJheUNvbnN0cnVjdG9yOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yPEpTRmxvYXQ2NEFycmF5PiBKU0Zs
b2F0NjRBcnJheUNvbnN0cnVjdG9yOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yPEpTRGF0YVZpZXc+IEpTRGF0YVZpZXdDb25zdHJ1Y3RvcjsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIgorCisj
aW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmluZSBNQUtFX1Nf
SU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlMjI3R5cGUjI1By
b3RvdHlwZTo6c19pbmZvID0geyN0eXBlICJQcm90b3R5cGUiLCAmSlMjI3R5cGUjI1Byb3RvdHlw
ZTo6QmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTIyN0eXBlIyNQcm90
b3R5cGUpfQorCitNQUtFX1NfSU5GTyhJbnQ4QXJyYXkpOworTUFLRV9TX0lORk8oSW50MTZBcnJh
eSk7CitNQUtFX1NfSU5GTyhJbnQzMkFycmF5KTsKK01BS0VfU19JTkZPKFVpbnQ4QXJyYXkpOwor
TUFLRV9TX0lORk8oVWludDhDbGFtcGVkQXJyYXkpOworTUFLRV9TX0lORk8oVWludDE2QXJyYXkp
OworTUFLRV9TX0lORk8oVWludDMyQXJyYXkpOworTUFLRV9TX0lORk8oRmxvYXQzMkFycmF5KTsK
K01BS0VfU19JTkZPKEZsb2F0NjRBcnJheSk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlQcm90b3R5cGVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlZEFycmF5
UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5UHJvdG90eXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SlNUeXBlZEFycmF5UHJvdG90eXBlc19oCisjZGVmaW5lIEpTVHlwZWRBcnJheVByb3RvdHlwZXNf
aAorCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCIKKyNpbmNs
dWRlICJKU1R5cGVkQXJyYXlzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlPEpTSW50OEFycmF5PiBKU0ludDhBcnJheVByb3Rv
dHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNJbnQxNkFy
cmF5PiBKU0ludDE2QXJyYXlQcm90b3R5cGU7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlPEpTSW50MzJBcnJheT4gSlNJbnQzMkFycmF5UHJvdG90eXBlOwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU1VpbnQ4QXJyYXk+IEpTVWludDhB
cnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8
SlNVaW50OENsYW1wZWRBcnJheT4gSlNVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZTsKK3R5cGVk
ZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNVaW50MTZBcnJheT4gSlNVaW50
MTZBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGU8SlNVaW50MzJBcnJheT4gSlNVaW50MzJBcnJheVByb3RvdHlwZTsKK3R5cGVkZWYgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGU8SlNGbG9hdDMyQXJyYXk+IEpTRmxvYXQzMkFycmF5
UHJvdG90eXBlOwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZTxKU0Zs
b2F0NjRBcnJheT4gSlNGbG9hdDY0QXJyYXlQcm90b3R5cGU7CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSlNUeXBlZEFycmF5UHJvdG90eXBlc19oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVkQXJyYXlzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZWRBcnJheXMuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCisKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJHZW5l
cmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworI2RlZmluZSBNQUtFX1NfSU5GTyh0eXBlKSBcCisgICAgdGVtcGxhdGU8PiBjb25zdCBD
bGFzc0luZm8gSlMjI3R5cGUjI0FycmF5OjpzX2luZm8gPSB7IFwKKyAgICAgICAgI3R5cGUgIkFy
cmF5IiwgJkpTIyN0eXBlIyNBcnJheTo6QmFzZTo6c19pbmZvLCAwLCAwLCBcCisgICAgICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoSlMjI3R5cGUjI0FycmF5KSBcCisgICAgfTsgXAorICAgIGNvbnN0
IENsYXNzSW5mbyogZ2V0IyN0eXBlIyNBcnJheUNsYXNzSW5mbygpIHsgcmV0dXJuICZKUyMjdHlw
ZSMjQXJyYXk6OnNfaW5mbzsgfQorCitNQUtFX1NfSU5GTyhJbnQ4KTsKK01BS0VfU19JTkZPKElu
dDE2KTsKK01BS0VfU19JTkZPKEludDMyKTsKK01BS0VfU19JTkZPKFVpbnQ4KTsKK01BS0VfU19J
TkZPKFVpbnQ4Q2xhbXBlZCk7CitNQUtFX1NfSU5GTyhVaW50MTYpOworTUFLRV9TX0lORk8oVWlu
dDMyKTsKK01BS0VfU19JTkZPKEZsb2F0MzIpOworTUFLRV9TX0lORk8oRmxvYXQ2NCk7CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1R5cGVkQXJyYXlzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNU
eXBlZEFycmF5c19oCisjZGVmaW5lIEpTVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5QWRhcHRvcnMuaCIKKyNp
bmNsdWRlICJUeXBlZEFycmF5cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0eXBlZGVmIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5OwordHlwZWRl
ZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJBcnJheTsKK3R5
cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1VpbnQ4QXJyYXk7
Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFkYXB0b3I+IEpT
VWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQx
NkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYgSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4QXJyYXkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhBcnJheS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSlNVaW50OEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OEFycmF5X2gK
KworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworI2VuZGlmIC8vIEpTVWludDhBcnJheV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDhDbGFtcGVkQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1VpbnQ4
Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBK
U1VpbnQ4Q2xhbXBlZEFycmF5X2gKKyNkZWZpbmUgSlNVaW50OENsYW1wZWRBcnJheV9oCisKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisKKyNlbmRpZiAvLyBKU1VpbnQ4Q2xhbXBlZEFycmF5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MTZBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWludDE2QXJy
YXkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVWlu
dDE2QXJyYXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTVWludDE2QXJyYXlfaAor
I2RlZmluZSBKU1VpbnQxNkFycmF5X2gKKworI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKwor
I2VuZGlmIC8vIEpTVWludDE2QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1VpbnQzMkFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNVaW50MzJBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSlNVaW50MzJBcnJheV9oCisjZGVmaW5lIEpTVWludDMyQXJyYXlfaAorCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgorCisjZW5kaWYgLy8gSlNVaW50MzJBcnJheV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1
NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNyArMjMsOSBAQAogI2RlZmluZSBPcGVyYXRpb25zX2gKIAogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRl
ZElubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTQXJyYXlC
dWZmZXJWaWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb3h5LmgiCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNTQwOTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Niw2ICsxOTYsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwogICAg
IHYoYm9vbCwgb2JqZWN0c0FyZUltbW9ydGFsLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgc2hvd09i
amVjdFN0YXRpc3RpY3MsIGZhbHNlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgbG9nR0MsIGZhbHNl
KSBcCiAgICAgdih1bnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCkgXAogICAgIHYoYm9vbCwgcmVj
b3JkR0NQYXVzZVRpbWVzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgbG9nSGVhcFN0YXRpc3RpY3NB
dEV4aXQsIGZhbHNlKSAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiUGFzc1dlYWsuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1NpbXBsZVR5cGVk
QXJyYXlDb250cm9sbGVyOjpTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQorU2ltcGxl
VHlwZWRBcnJheUNvbnRyb2xsZXI6On5TaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcigpIHsgfQor
CitKU0FycmF5QnVmZmVyKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVmZmVy
KiBuYXRpdmUpCit7CisgICAgaWYgKEpTQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IG5hdGl2ZS0+bV93
cmFwcGVyLmdldCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIAorICAgIEpTQXJyYXlC
dWZmZXIqIHJlc3VsdCA9IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSgKKyAgICAgICAgZXhlYy0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpLCBuYXRpdmUpOworICAgIG5h
dGl2ZS0+bV93cmFwcGVyID0gUGFzc1dlYWs8SlNBcnJheUJ1ZmZlcj4ocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TaW1wbGVUeXBlZEFycmF5Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXJfaAorCisjaW5jbHVkZSAiSGFuZGxlLmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFRoZSBkZWZhdWx0IGNvbnRyb2xs
ZXIgdXNlZCBmb3IgbWFuYWdpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisvLyBhcnJheSBi
dWZmZXJzIGFuZCB0aGVpciB3cmFwcGVycyBpbiBKYXZhU2NyaXB0Q29yZS4gVGhpcyBpc24ndCB3
aGF0CisvLyBXZWJDb3JlIHVzZXMsIGJ1dCBpdCBpcyB3aGF0IEpTQyB1c2VzIHdoZW4gcnVubmlu
ZyBzdGFuZGFsb25lLiBUaGlzCisvLyBpcyBwcmV0dHkgc2ltcGxlOgorLy8KKy8vIC0gSWYgdGhl
IEpTQXJyYXlCdWZmZXIgaXMgbGl2ZSwgdGhlbiB0aGUgQXJyYXlCdWZmZXIgc3RheXMgYWxpdmUu
CisvLworLy8gLSBJZiB5b3UgYXNrIGFuIEFycmF5QnVmZmVyIGZvciBhIEpTQXJyYXlCdWZmZXIg
YWZ0ZXIgb25lIGhhZAorLy8gICBhbHJlYWR5IGJlZW4gY3JlYXRlZCBhbmQgaXQgZGlkbid0IGRp
ZSwgdGhlbiB5b3UgZ2V0IHRoZSBzYW1lCisvLyAgIG9uZS4KKworY2xhc3MgU2ltcGxlVHlwZWRB
cnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgVHlwZWRBcnJheUNvbnRyb2xsZXIgeworcHVibGljOgor
ICAgIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgdmlydHVhbCB+U2ltcGxlVHlw
ZWRBcnJheUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRv
SlMoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZp
c2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDEzICsyMzAsMTEgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgY291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgcmV0dXJu
IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaXNU
eXBlZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSk7Ci0g
ICAgfQorICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKikgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0cnVjdHVyZUlubGluZXNfaAogI2RlZmluZSBTdHJ1
Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIApAQCAt
MTA0LDYgKzEwNSwxNyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25j
CiAgICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3Jl
ZCk7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3Qg
SlNDZWxsKiBjZWxsKSBjb25zdAoreworICAgIGlmIChoYXNJbmRleGVkUHJvcGVydGllcyhpbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghaXNUeXBl
ZFZpZXcobV9jbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4ganNDYXN0PGNvbnN0IEpTQXJyYXlCdWZmZXJWaWV3
Kj4oY2VsbCktPm1vZGUoKSA9PSBXYXN0ZWZ1bFR5cGVkQXJyYXk7Cit9CisKIGlubGluZSBib29s
IFN0cnVjdHVyZTo6bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCkKIHsKICAgICByZXR1cm4gdHlwZUluZm8oKS5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCkgJiYgZ2xvYmFsT2JqZWN0KCkgPT0gbGV4aWNhbEdsb2JhbE9iamVjdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlBZGFwdG9y
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRB
cnJheUFkYXB0b3JzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVHlwZWRBcnJheUFk
YXB0b3JzX2gKKyNkZWZpbmUgVHlwZWRBcnJheUFkYXB0b3JzX2gKKworI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZTwKKyAgICB0eXBlbmFtZSBU
eXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3VHlwZUFyZywKKyAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgSW50ZWdyYWxUeXBlZEFycmF5
QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRlZiBWaWV3VHlw
ZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3VHlwZTsKKyAg
ICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZhbHVlQXJnOwor
CisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFR5cGU+KHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2
YWx1ZS5hc051bWJlcigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFR5cGUgdG9OYXRpdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZS5h
c0ludDMyKCkpOworICAgICAgICByZXR1cm4gdG9OYXRpdmUodmFsdWUudG9OdW1iZXIoZXhlYykp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBkb3VibGUgdG9Eb3VibGUoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTwKKyAg
ICB0eXBlbmFtZSBUeXBlQXJnLCB0eXBlbmFtZSBWaWV3VHlwZUFyZywgdHlwZW5hbWUgSlNWaWV3
VHlwZUFyZywKKyAgICBUeXBlZEFycmF5VHlwZSB0eXBlVmFsdWVBcmc+CitzdHJ1Y3QgRmxvYXRU
eXBlZEFycmF5QWRhcHRvciB7CisgICAgdHlwZWRlZiBUeXBlQXJnIFR5cGU7CisgICAgdHlwZWRl
ZiBWaWV3VHlwZUFyZyBWaWV3VHlwZTsKKyAgICB0eXBlZGVmIEpTVmlld1R5cGVBcmcgSlNWaWV3
VHlwZTsKKyAgICBzdGF0aWMgY29uc3QgVHlwZWRBcnJheVR5cGUgdHlwZVZhbHVlID0gdHlwZVZh
bHVlQXJnOworICAgIAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKGRvdWJsZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPih2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBUeXBlIHRvTmF0aXZlKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdG9OYXRpdmUodmFsdWUuYXNOdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBUeXBlIHRvTmF0aXZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKFFO
YU4pOworICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgZG91YmxlIHRvRG91YmxlKFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSk7CisgICAgfQorfTsKKworc3RydWN0IEludDhBZGFw
dG9yOworc3RydWN0IEludDE2QWRhcHRvcjsKK3N0cnVjdCBJbnQzMkFkYXB0b3I7CitzdHJ1Y3Qg
VWludDhBZGFwdG9yOworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3I7CitzdHJ1Y3QgVWludDE2
QWRhcHRvcjsKK3N0cnVjdCBVaW50MzJBZGFwdG9yOworc3RydWN0IEZsb2F0MzJBZGFwdG9yOwor
c3RydWN0IEZsb2F0NjRBZGFwdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBjbGFz
cyBHZW5lcmljVHlwZWRBcnJheVZpZXc7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJ
bnQ4QWRhcHRvcj4gSW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MTZBZGFwdG9yPiBJbnQxNkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50
MzJBZGFwdG9yPiBJbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhBZGFwdG9yPiBVaW50OEFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWlu
dDhDbGFtcGVkQWRhcHRvcj4gVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBl
ZEFycmF5VmlldzxVaW50MTZBZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmlj
VHlwZWRBcnJheVZpZXc8RmxvYXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+IGNsYXNzIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3OwordHlw
ZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSlNJbnQ4QXJyYXk7Cit0
eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEludDE2QWRhcHRvcj4gSlNJbnQxNkFycmF5
OwordHlwZWRlZiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQzMkFkYXB0b3I+IEpTSW50MzJB
cnJheTsKK3R5cGVkZWYgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBKU1Vp
bnQ4QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQ4Q2xhbXBlZEFk
YXB0b3I+IEpTVWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PFVpbnQxNkFkYXB0b3I+IEpTVWludDE2QXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PFVpbnQzMkFkYXB0b3I+IEpTVWludDMyQXJyYXk7Cit0eXBlZGVmIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEZsb2F0MzJBZGFwdG9yPiBKU0Zsb2F0MzJBcnJheTsKK3R5cGVkZWYg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8RmxvYXQ2NEFkYXB0b3I+IEpTRmxvYXQ2NEFycmF5Owor
CitzdHJ1Y3QgSW50OEFkYXB0b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDhfdCwg
SW50OEFycmF5LCBKU0ludDhBcnJheSwgVHlwZUludDg+IHsgfTsKK3N0cnVjdCBJbnQxNkFkYXB0
b3IgOiBJbnRlZ3JhbFR5cGVkQXJyYXlBZGFwdG9yPGludDE2X3QsIEludDE2QXJyYXksIEpTSW50
MTZBcnJheSwgVHlwZUludDE2PiB7IH07CitzdHJ1Y3QgSW50MzJBZGFwdG9yIDogSW50ZWdyYWxU
eXBlZEFycmF5QWRhcHRvcjxpbnQzMl90LCBJbnQzMkFycmF5LCBKU0ludDMyQXJyYXksIFR5cGVJ
bnQzMj4geyB9Oworc3RydWN0IFVpbnQ4QWRhcHRvciA6IEludGVncmFsVHlwZWRBcnJheUFkYXB0
b3I8dWludDhfdCwgVWludDhBcnJheSwgSlNVaW50OEFycmF5LCBUeXBlVWludDg+IHsgfTsKK3N0
cnVjdCBVaW50MTZBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MTZfdCwg
VWludDE2QXJyYXksIEpTVWludDE2QXJyYXksIFR5cGVVaW50MTY+IHsgfTsKK3N0cnVjdCBVaW50
MzJBZGFwdG9yIDogSW50ZWdyYWxUeXBlZEFycmF5QWRhcHRvcjx1aW50MzJfdCwgVWludDMyQXJy
YXksIEpTVWludDMyQXJyYXksIFR5cGVVaW50MzI+IHsgfTsKK3N0cnVjdCBGbG9hdDMyQWRhcHRv
ciA6IEZsb2F0VHlwZWRBcnJheUFkYXB0b3I8ZmxvYXQsIEZsb2F0MzJBcnJheSwgSlNGbG9hdDMy
QXJyYXksIFR5cGVGbG9hdDMyPiB7IH07CitzdHJ1Y3QgRmxvYXQ2NEFkYXB0b3IgOiBGbG9hdFR5
cGVkQXJyYXlBZGFwdG9yPGRvdWJsZSwgRmxvYXQ2NEFycmF5LCBKU0Zsb2F0NjRBcnJheSwgVHlw
ZUZsb2F0NjQ+IHsgfTsKKworc3RydWN0IFVpbnQ4Q2xhbXBlZEFkYXB0b3IgeworICAgIHR5cGVk
ZWYgdWludDhfdCBUeXBlOworICAgIHR5cGVkZWYgVWludDhDbGFtcGVkQXJyYXkgVmlld1R5cGU7
CisgICAgdHlwZWRlZiBKU1VpbnQ4Q2xhbXBlZEFycmF5IEpTVmlld1R5cGU7CisgICAgc3RhdGlj
IGNvbnN0IFR5cGVkQXJyYXlUeXBlIHR5cGVWYWx1ZSA9IFR5cGVVaW50OENsYW1wZWQ7CisgICAg
CisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHZhbHVlIDwgMCkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBpZiAodmFsdWUgPiAyNTUpCisgICAgICAgICAgICByZXR1cm4gMjU1Owor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJpbnQodmFsdWUpKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHVpbnQ4X3QgdG9OYXRpdmUoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gY2xhbXAo
dmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIHRvTmF0aXZlKHZhbHVlLmFzTnVtYmVy
KCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludDhfdCB0b05hdGl2ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIHJl
dHVybiB0b05hdGl2ZSh2YWx1ZS50b051bWJlcihleGVjKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGRvdWJsZSB0b0Rv
dWJsZSh1aW50OF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4odmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnQ4X3Qg
Y2xhbXAoaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA8IDApCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHZhbHVlID4gMjU1KQorICAgICAgICAgICAg
cmV0dXJuIDI1NTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsK
KyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVkQXJyYXlB
ZGFwdG9yc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJy
YXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUeXBlZEFycmF5Q29udHJvbGxlcjo6VHlwZWRB
cnJheUNvbnRyb2xsZXIoKSB7IH0KK1R5cGVkQXJyYXlDb250cm9sbGVyOjp+VHlwZWRBcnJheUNv
bnRyb2xsZXIoKSB7IH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlDb250
cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5Q29udHJvbGxl
cl9oCisjZGVmaW5lIFR5cGVkQXJyYXlDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBBcnJheUJ1ZmZlcjsKK2NsYXNz
IEV4ZWNTdGF0ZTsKK2NsYXNzIEpTQXJyYXlCdWZmZXI7CitjbGFzcyBKU0dsb2JhbE9iamVjdDsK
KworY2xhc3MgVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxUeXBlZEFy
cmF5Q29udHJvbGxlcj4geworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFR5cGVkQXJy
YXlDb250cm9sbGVyKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+VHlwZWRBcnJh
eUNvbnRyb2xsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIEpTQXJyYXlCdWZmZXIqIHRvSlMoRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUJ1ZmZlciopID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5RGVzY3JpcHRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlEZXNj
cmlwdG9yLmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IFR5cGVkQXJyYXlEZXNjcmlwdG9yX2gKLSNkZWZpbmUgVHlwZWRBcnJheURlc2NyaXB0b3JfaAot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IENsYXNzSW5mbzsKLQotZW51bSBUeXBlZEFycmF5
VHlwZSB7Ci0gICAgVHlwZWRBcnJheU5vbmUsCi0gICAgVHlwZWRBcnJheUludDgsCi0gICAgVHlw
ZWRBcnJheUludDE2LAotICAgIFR5cGVkQXJyYXlJbnQzMiwKLSAgICBUeXBlZEFycmF5VWludDgs
Ci0gICAgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZCwKLSAgICBUeXBlZEFycmF5VWludDE2LAotICAg
IFR5cGVkQXJyYXlVaW50MzIsCi0gICAgVHlwZWRBcnJheUZsb2F0MzIsCi0gICAgVHlwZWRBcnJh
eUZsb2F0NjQKLX07Ci0KLXN0cnVjdCBUeXBlZEFycmF5RGVzY3JpcHRvciB7Ci0gICAgVHlwZWRB
cnJheURlc2NyaXB0b3IoKQotICAgICAgICA6IG1fY2xhc3NJbmZvKDApCi0gICAgICAgICwgbV9z
dG9yYWdlT2Zmc2V0KDApCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQoMCkKLSAgICB7Ci0gICAg
fQotICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBz
aXplX3Qgc3RvcmFnZU9mZnNldCwgc2l6ZV90IGxlbmd0aE9mZnNldCkKLSAgICAgICAgOiBtX2Ns
YXNzSW5mbyhjbGFzc0luZm8pCi0gICAgICAgICwgbV9zdG9yYWdlT2Zmc2V0KHN0b3JhZ2VPZmZz
ZXQpCi0gICAgICAgICwgbV9sZW5ndGhPZmZzZXQobGVuZ3RoT2Zmc2V0KQotICAgIHsKLSAgICB9
Ci0gICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKLSAgICBzaXplX3QgbV9zdG9yYWdl
T2Zmc2V0OwotICAgIHNpemVfdCBtX2xlbmd0aE9mZnNldDsKLX07Ci0KLWVudW0gVHlwZWRBcnJh
eVNpZ25lZG5lc3MgewotICAgIFNpZ25lZFR5cGVkQXJyYXksCi0gICAgVW5zaWduZWRUeXBlZEFy
cmF5Ci19OwotZW51bSBUeXBlZEFycmF5Um91bmRpbmcgewotICAgIFRydW5jYXRlUm91bmRpbmcs
Ci0gICAgQ2xhbXBSb3VuZGluZwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBUeXBlZEFycmF5RGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBUeXBlZEFycmF5SW5saW5lc19oCisjZGVmaW5lIFR5cGVkQXJyYXlJ
bmxpbmVzX2gKKworI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5l
cy5oIgorCisjZW5kaWYgLy8gVHlwZWRBcnJheUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUeXBlZEFycmF5VHlwZS5oIgorCisjaW5jbHVkZSAiSlNEYXRhVmlldy5o
IgorI2luY2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpTSW50OEFycmF5OjppbmZv
KCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBKU1VpbnQ4QXJyYXk6Omlu
Zm8oKTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgIHJldHVybiBKU1VpbnQ4
Q2xhbXBlZEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVy
biBKU0ludDE2QXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJl
dHVybiBKU1VpbnQxNkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAg
IHJldHVybiBKU0ludDMyQXJyYXk6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAg
ICAgIHJldHVybiBKU1VpbnQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoK
KyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5OjppbmZvKCk7CisgICAgY2FzZSBUeXBlRmxv
YXQ2NDoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQ2NEFycmF5OjppbmZvKCk7CisgICAgY2FzZSBU
eXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3OjppbmZvKCk7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGVkQXJyYXlUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOb3RUeXBlZEFycmF5Ogor
ICAgICAgICBvdXQucHJpbnQoIk5vdFR5cGVkQXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVHlwZUludDg6CisgICAgICAgIG91dC5wcmludCgiVHlwZUludDgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVJbnQx
NiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIG91dC5w
cmludCgiVHlwZUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50ODoK
KyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgb3V0LnByaW50KCJUeXBlVWludDhDbGFtcGVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIG91dC5w
cmludCgiVHlwZVVpbnQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUeXBlVWludDMy
OgorICAgICAgICBvdXQucHJpbnQoIlR5cGVVaW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIG91dC5wcmludCgiVHlwZUZsb2F0MzIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIG91dC5wcmludCgi
VHlwZUZsb2F0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHlwZURhdGFWaWV3Ogor
ICAgICAgICBvdXQucHJpbnQoIlR5cGVEYXRhVmlldyIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFy
cmF5VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgVHlwZWRBcnJheVR5cGVfaAorI2RlZmluZSBUeXBlZEFycmF5VHlwZV9o
CisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0
cnVjdCBDbGFzc0luZm87CisKK2VudW0gVHlwZWRBcnJheVR5cGUgeworICAgIE5vdFR5cGVkQXJy
YXksCisgICAgVHlwZUludDgsCisgICAgVHlwZVVpbnQ4LAorICAgIFR5cGVVaW50OENsYW1wZWQs
CisgICAgVHlwZUludDE2LAorICAgIFR5cGVVaW50MTYsCisgICAgVHlwZUludDMyLAorICAgIFR5
cGVVaW50MzIsCisgICAgVHlwZUZsb2F0MzIsCisgICAgVHlwZUZsb2F0NjQsCisgICAgVHlwZURh
dGFWaWV3Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUyBUeXBlRGF0
YVZpZXcKKworaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGUpIC0gMTsKK30KKworaW5saW5l
IGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK2lubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlVWludDg6CisgICAg
Y2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICBy
ZXR1cm4gMTsKKyAgICBjYXNlIFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAg
ICAgIHJldHVybiAyOworICAgIGNhc2UgVHlwZUludDMyOgorICAgIGNhc2UgVHlwZVVpbnQzMjoK
KyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIFR5cGVG
bG9hdDY0OgorICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFR5cGVJbnQ4Ogor
ICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICBjYXNl
IFR5cGVJbnQxNjoKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgY2FzZSBUeXBlSW50MzI6Cisg
ICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5
cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9v
bCBpc1NpZ25lZChUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgVHlwZUludDg6CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgY2FzZSBUeXBlSW50
MzI6CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBpc0NsYW1wZWQoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAg
ICByZXR1cm4gdHlwZSA9PSBUeXBlVWludDhDbGFtcGVkOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6VHlwZWRBcnJheVR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFR5cGVkQXJyYXlUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFR5cGVkQXJy
YXlzX2gKKyNkZWZpbmUgVHlwZWRBcnJheXNfaAorCisjaW5jbHVkZSAiR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgiCisjaW5jbHVkZSAiVHlwZWRBcnJheUFkYXB0b3JzLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxJbnQ4QWRhcHRvcj4gSW50OEFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MTZBZGFwdG9yPiBJbnQxNkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8SW50MzJBZGFwdG9yPiBJbnQzMkFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhBZGFwdG9yPiBVaW50OEFy
cmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8VWludDhDbGFtcGVkQWRhcHRvcj4g
VWludDhDbGFtcGVkQXJyYXk7Cit0eXBlZGVmIEdlbmVyaWNUeXBlZEFycmF5VmlldzxVaW50MTZB
ZGFwdG9yPiBVaW50MTZBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3PFVpbnQz
MkFkYXB0b3I+IFVpbnQzMkFycmF5OwordHlwZWRlZiBHZW5lcmljVHlwZWRBcnJheVZpZXc8Rmxv
YXQzMkFkYXB0b3I+IEZsb2F0MzJBcnJheTsKK3R5cGVkZWYgR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEZsb2F0NjRBZGFwdG9yPiBGbG9hdDY0QXJyYXk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gVHlwZWRBcnJheXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9VaW50OEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVWludDhBcnJheS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEsMTAgKzEwLDEwIEBACiAgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQog
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCiAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCiAgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKQEAgLTI3LDc2ICsyNiw5IEBACiAjaWZu
ZGVmIFVpbnQ4QXJyYXlfaAogI2RlZmluZSBVaW50OEFycmF5X2gKIAotI2luY2x1ZGUgIkludGVn
cmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVm
ZmVyOwotCi1jbGFzcyBVaW50OEFycmF5IDogcHVibGljIEludGVncmFsVHlwZWRBcnJheUJhc2U8
dWludDhfdD4gewotcHVibGljOgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQ
dHI8VWludDhBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBjcmVhdGUoUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24gdGhlIGVu
dGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRoZXNlIHJl
c3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3QuCi0gICAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4QXJyYXk+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHVzaW5nIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+Ojpz
ZXQ7Ci0gICAgdXNpbmcgSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotCi0g
ICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDhBcnJheT4gc3ViYXJyYXkoaW50IHN0YXJ0KSBjb25z
dDsKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDg7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgaW5saW5lIFVpbnQ4QXJyYXkoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNp
YmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNzIFR5cGVkQXJyYXlCYXNlPHVpbnQ4
X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGUodW5z
aWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3Jl
YXRlPFVpbnQ4QXJyYXk+KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWlu
dDhBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCi17
Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhBcnJheT4o
YXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4gVWludDhBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90
Pjo6Y3JlYXRlPFVpbnQ4QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQot
UGFzc1JlZlB0cjxVaW50OEFycmF5PiBVaW50OEFycmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQ8VWludDhBcnJheT4obGVuZ3RoKTsKLX0KLQotVWludDhBcnJheTo6
VWludDhBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1aW50OF90
PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OEFy
cmF5PiBVaW50OEFycmF5OjpzdWJhcnJheShpbnQgc3RhcnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN1YmFycmF5KHN0YXJ0LCBsZW5ndGgoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhBcnJheT4g
VWludDhBcnJheTo6c3ViYXJyYXkoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdAotewotICAgIHJl
dHVybiBzdWJhcnJheUltcGw8VWludDhBcnJheT4oc3RhcnQsIGVuZCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQworI2luY2x1ZGUgIlR5cGVkQXJyYXlzLmgiCiAKIHVzaW5nIEpTQzo6VWludDhB
cnJheTsKIAogI2VuZGlmIC8vIFVpbnQ4QXJyYXlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJKHJldmlzaW9uIDE1NDA5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VpbnQ4Q2xhbXBlZEFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyLDExMiArMTAsMjUgQEAKICAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
ICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQog
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCiAjaWZuZGVmIFVpbnQ4
Q2xhbXBlZEFycmF5X2gKICNkZWZpbmUgVWludDhDbGFtcGVkQXJyYXlfaAogCi0jaW5jbHVkZSAi
VWludDhBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBVaW50OENsYW1wZWRBcnJheSA6IHB1YmxpYyBVaW50OEFycmF5IHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gY3JlYXRlKGNvbnN0IHVpbnQ4X3QqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3Jl
YXRlKFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGl0IGlzIGtub3du
IHRoZSBlbnRpcmUgYXJyYXkgd2lsbCBiZSBmaWxsZWQuIERvCi0gICAgLy8gbm90IHJldHVybiB0
aGVzZSByZXN1bHRzIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgd2l0aG91dCBmaWxsaW5nIGZpcnN0
LgotICAgIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgLy8gSXQncyBvbmx5IG5lZWRl
ZCB0byBwb3RlbnRpYWxseSBjYWxsIHRoaXMgbWV0aG9kIGlmIHRoZSBhcnJheQotICAgIC8vIHdh
cyBjcmVhdGVkIHVuaW5pdGlhbGl6ZWQgLS0gdGhlIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gcGF0
aHMKLSAgICAvLyB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LgotICAgIGlubGluZSB2b2lkIHpl
cm9GaWxsKCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6c2V0OwotICAg
IGlubGluZSB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKTsKLQotICAgIGlu
bGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShpbnQgc3RhcnQpIGNv
bnN0OwotICAgIGlubGluZSBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzdWJhcnJheShp
bnQgc3RhcnQsIGludCBlbmQpIGNvbnN0OwotCi0gICAgdmlydHVhbCBWaWV3VHlwZSBnZXRUeXBl
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlVWludDhDbGFtcGVkOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBpbmxpbmUgVWludDhDbGFtcGVkQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgLy8g
TWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCi0gICAgZnJpZW5kIGNsYXNz
IFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
cmV0dXJuIFR5cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+
KGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IFVpbnQ4Q2xhbXBl
ZEFycmF5OjpjcmVhdGUoY29uc3QgdWludDhfdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsK
LSAgICByZXR1cm4gVHlwZWRBcnJheUJhc2U8dWludDhfdD46OmNyZWF0ZTxVaW50OENsYW1wZWRB
cnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVy
LCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5
cGVkQXJyYXlCYXNlPHVpbnQ4X3Q+OjpjcmVhdGU8VWludDhDbGFtcGVkQXJyYXk+KGJ1ZmZlciwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
VWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50OF90Pjo6Y3JlYXRlVW5pbml0aWFsaXpl
ZDxVaW50OENsYW1wZWRBcnJheT4obGVuZ3RoKTsKLX0KLQotdm9pZCBVaW50OENsYW1wZWRBcnJh
eTo6emVyb0ZpbGwoKQotewotICAgIHplcm9SYW5nZSgwLCBsZW5ndGgoKSk7Ci19Ci0KLXZvaWQg
VWludDhDbGFtcGVkQXJyYXk6OnNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotewot
ICAgIGlmIChpbmRleCA+PSBtX2xlbmd0aCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6
OmlzbmFuKHZhbHVlKSB8fCB2YWx1ZSA8IDApCi0gICAgICAgIHZhbHVlID0gMDsKLSAgICBlbHNl
IGlmICh2YWx1ZSA+IDI1NSkKLSAgICAgICAgdmFsdWUgPSAyNTU7Ci0gICAgZGF0YSgpW2luZGV4
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyaW50KHZhbHVlKSk7Ci19Ci0KLVVpbnQ4Q2xhbXBl
ZEFycmF5OjpVaW50OENsYW1wZWRBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIs
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLTogVWludDhBcnJheShidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxlbmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gVWludDhDbGFtcGVkQXJyYXk6OnN1YmFycmF5KGludCBzdGFydCwgaW50
IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBsPFVpbnQ4Q2xhbXBlZEFycmF5
PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5jbHVkZSAiVHlwZWRB
cnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50OENsYW1wZWRBcnJheTsKIAogI2VuZGlmIC8vIFVp
bnQ4Q2xhbXBlZEFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDE2QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50MTZBcnJheS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MTZBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRl
ZiBVaW50MTZBcnJheV9oCiAjZGVmaW5lIFVpbnQxNkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVn
cmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVm
ZmVyOwotCi1jbGFzcyBVaW50MTZBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PHVpbnQxNl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQx
NkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDE2QXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MTZfdCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQxNkFycmF5PiBjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50
MTZfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6
c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDE2QXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MTY7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGlubGluZSBVaW50MTZBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0
cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJh
eUJhc2U8dWludDE2X3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJy
YXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PFVpbnQxNkFycmF5PiBVaW50MTZBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQxNl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MTZfdD46
OmNyZWF0ZTxVaW50MTZBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWlu
dDE2QXJyYXk+IFVpbnQxNkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90Pjo6Y3JlYXRlPFVpbnQxNkFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDE2QXJyYXk+IFVpbnQxNkFy
cmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
VHlwZWRBcnJheUJhc2U8dWludDE2X3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQxNkFycmF5
PihsZW5ndGgpOwotfQotCi1VaW50MTZBcnJheTo6VWludDE2QXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQxNl90PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxl
bmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MTZBcnJheT4gVWludDE2QXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PFVpbnQxNkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MTZBcnJheTsKIAogI2VuZGlm
IC8vIFVpbnQxNkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VWludDMyQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9VaW50MzJBcnJheS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9VaW50MzJBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExLDEwICsxMCwxMCBAQAogICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKICAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKICAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAogICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCkBAIC0yNyw3NiArMjYsOSBAQAogI2lmbmRl
ZiBVaW50MzJBcnJheV9oCiAjZGVmaW5lIFVpbnQzMkFycmF5X2gKIAotI2luY2x1ZGUgIkludGVn
cmFsVHlwZWRBcnJheUJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEFycmF5QnVm
ZmVyOwotCi1jbGFzcyBVaW50MzJBcnJheSA6IHB1YmxpYyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNl
PHVpbnQzMl90PiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQz
MkFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8VWludDMyQXJyYXk+IGNyZWF0ZShjb25zdCB1aW50MzJfdCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCk7Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7Ci0KLSAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIHdoZW4gaXQgaXMga25vd24g
dGhlIGVudGlyZSBhcnJheSB3aWxsIGJlIGZpbGxlZC4gRG8KLSAgICAvLyBub3QgcmV0dXJuIHRo
ZXNlIHJlc3VsdHMgZGlyZWN0bHkgdG8gSmF2YVNjcmlwdCB3aXRob3V0IGZpbGxpbmcgZmlyc3Qu
Ci0gICAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFVpbnQzMkFycmF5PiBjcmVhdGVVbmluaXRp
YWxpemVkKHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICB1c2luZyBUeXBlZEFycmF5QmFzZTx1aW50
MzJfdD46OnNldDsKLSAgICB1c2luZyBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6
c2V0OwotCi0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5KGludCBz
dGFydCkgY29uc3Q7Ci0gICAgaW5saW5lIFBhc3NSZWZQdHI8VWludDMyQXJyYXk+IHN1YmFycmF5
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5
cGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVVaW50MzI7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGlubGluZSBVaW50MzJBcnJheShQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiwg
dW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAvLyBNYWtlIGNvbnN0
cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KLSAgICBmcmllbmQgY2xhc3MgVHlwZWRBcnJh
eUJhc2U8dWludDMyX3Q+OwotfTsKLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJy
YXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFR5cGVkQXJyYXlCYXNl
PHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRy
PFVpbnQzMkFycmF5PiBVaW50MzJBcnJheTo6Y3JlYXRlKGNvbnN0IHVpbnQzMl90KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIHJldHVybiBUeXBlZEFycmF5QmFzZTx1aW50MzJfdD46
OmNyZWF0ZTxVaW50MzJBcnJheT4oYXJyYXksIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWlu
dDMyQXJyYXk+IFVpbnQzMkFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgcmV0dXJu
IFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90Pjo6Y3JlYXRlPFVpbnQzMkFycmF5PihidWZmZXIsIGJ5
dGVPZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLVBhc3NSZWZQdHI8VWludDMyQXJyYXk+IFVpbnQzMkFy
cmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
VHlwZWRBcnJheUJhc2U8dWludDMyX3Q+OjpjcmVhdGVVbmluaXRpYWxpemVkPFVpbnQzMkFycmF5
PihsZW5ndGgpOwotfQotCi1VaW50MzJBcnJheTo6VWludDMyQXJyYXkoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0g
ICAgOiBJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVpbnQzMl90PihidWZmZXIsIGJ5dGVPZmZzZXQs
IGxlbmd0aCkKLXsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1
YmFycmF5KGludCBzdGFydCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXkoc3RhcnQsIGxl
bmd0aCgpKTsKLX0KLQotUGFzc1JlZlB0cjxVaW50MzJBcnJheT4gVWludDMyQXJyYXk6OnN1YmFy
cmF5KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3ViYXJyYXlJbXBs
PFVpbnQzMkFycmF5PihzdGFydCwgZW5kKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCisjaW5j
bHVkZSAiVHlwZWRBcnJheXMuaCIKIAogdXNpbmcgSlNDOjpVaW50MzJBcnJheTsKIAogI2VuZGlm
IC8vIFVpbnQzMkFycmF5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiUGFyc2VyQXJl
bmEuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5o
IgorI2luY2x1ZGUgIlNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU291
cmNlUHJvdmlkZXJDYWNoZS5oIgogI2luY2x1ZGUgIlN0cmljdEV2YWxBY3RpdmF0aW9uLmgiCiAj
aW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgpAQCAtODcsNiArODgsNyBAQCBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIGFycmF5Q29uc3RydWN0b3JUCiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5
UHJvdG90eXBlVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGJvb2xlYW5Qcm90b3R5cGVU
YWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRhYmxlOworZXh0ZXJuIGNvbnN0IEhh
c2hUYWJsZSBkYXRhVmlld1RhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBkYXRlVGFibGU7
CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVDb25zdHJ1Y3RvclRhYmxlOwogZXh0ZXJuIGNv
bnN0IEhhc2hUYWJsZSBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMTQ1LDYgKzE0Nyw3IEBAIFZN
OjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGFycmF5Q29uc3Ry
dWN0b3JUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJheUNvbnN0cnVjdG9yVGFibGUp
KQogICAgICwgYXJyYXlQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjphcnJh
eVByb3RvdHlwZVRhYmxlKSkKICAgICAsIGJvb2xlYW5Qcm90b3R5cGVUYWJsZShmYXN0TmV3PEhh
c2hUYWJsZT4oSlNDOjpib29sZWFuUHJvdG90eXBlVGFibGUpKQorICAgICwgZGF0YVZpZXdUYWJs
ZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRhVmlld1RhYmxlKSkKICAgICAsIGRhdGVUYWJs
ZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjpkYXRlVGFibGUpKQogICAgICwgZGF0ZUNvbnN0cnVj
dG9yVGFibGUoZmFzdE5ldzxIYXNoVGFibGU+KEpTQzo6ZGF0ZUNvbnN0cnVjdG9yVGFibGUpKQog
ICAgICwgZXJyb3JQcm90b3R5cGVUYWJsZShmYXN0TmV3PEhhc2hUYWJsZT4oSlNDOjplcnJvclBy
b3RvdHlwZVRhYmxlKSkKQEAgLTI1OCw2ICsyNjEsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGlmIChjYW5Vc2VKSVQoKSkKICAgICAgICAgZGZnU3Rh
dGUgPSBhZG9wdFB0cihuZXcgREZHOjpMb25nTGl2ZWRTdGF0ZSgpKTsKICNlbmRpZgorICAgIAor
ICAgIC8vIEluaXRpYWxpemUgdGhpcyBsYXN0LCBhcyBhIGZyZWUgd2F5IG9mIGFzc2VydGluZyB0
aGF0IFZNIGluaXRpYWxpemF0aW9uIGl0c2VsZgorICAgIC8vIHdvbid0IHVzZSB0aGlzLgorICAg
IG1fdHlwZWRBcnJheUNvbnRyb2xsZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNv
bnRyb2xsZXIoKSk7CiB9CiAKIFZNOjp+Vk0oKQpAQCAtMjg5LDYgKzI5Niw3IEBAIFZNOjp+Vk0o
KQogICAgIGFycmF5UHJvdG90eXBlVGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgYXJyYXlDb25z
dHJ1Y3RvclRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGJvb2xlYW5Qcm90b3R5cGVUYWJsZS0+
ZGVsZXRlVGFibGUoKTsKKyAgICBkYXRhVmlld1RhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRh
dGVUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRlQ29uc3RydWN0b3JUYWJsZS0+ZGVsZXRl
VGFibGUoKTsKICAgICBlcnJvclByb3RvdHlwZVRhYmxlLT5kZWxldGVUYWJsZSgpOwpAQCAtMzA2
LDYgKzMxNCw3IEBAIFZNOjp+Vk0oKQogICAgIGZhc3REZWxldGUoY29uc3RfY2FzdDxIYXNoVGFi
bGUqPihhcnJheUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0X2Nhc3Q8
SGFzaFRhYmxlKj4oYXJyYXlQcm90b3R5cGVUYWJsZSkpOwogICAgIGZhc3REZWxldGUoY29uc3Rf
Y2FzdDxIYXNoVGFibGUqPihib29sZWFuUHJvdG90eXBlVGFibGUpKTsKKyAgICBmYXN0RGVsZXRl
KGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0YVZpZXdUYWJsZSkpOwogICAgIGZhc3REZWxldGUo
Y29uc3RfY2FzdDxIYXNoVGFibGUqPihkYXRlVGFibGUpKTsKICAgICBmYXN0RGVsZXRlKGNvbnN0
X2Nhc3Q8SGFzaFRhYmxlKj4oZGF0ZUNvbnN0cnVjdG9yVGFibGUpKTsKICAgICBmYXN0RGVsZXRl
KGNvbnN0X2Nhc3Q8SGFzaFRhYmxlKj4oZXJyb3JQcm90b3R5cGVUYWJsZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
CiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAjaW5jbHVk
ZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZWRBcnJheURlc2NyaXB0b3IuaCIK
KyNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgi
CiAjaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oPgpAQCAtNjksMTMgKzY5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgQ29k
ZUNhY2hlOwogICAgIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwogICAgIGNsYXNzIEV4ZWNTdGF0
ZTsKLSAgICBjbGFzcyBGbG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgRmxvYXQ2NEFycmF5OwogICAg
IGNsYXNzIEhhbmRsZVN0YWNrOwogICAgIGNsYXNzIElkZW50aWZpZXJUYWJsZTsKLSAgICBjbGFz
cyBJbnQ4QXJyYXk7Ci0gICAgY2xhc3MgSW50MTZBcnJheTsKLSAgICBjbGFzcyBJbnQzMkFycmF5
OwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAg
IGNsYXNzIEpTT2JqZWN0OwpAQCAtOTMsMTAgKzg4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
RU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgotICAgIGNs
YXNzIFVpbnQ4QXJyYXk7Ci0gICAgY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7Ci0gICAgY2xhc3Mg
VWludDE2QXJyYXk7Ci0gICAgY2xhc3MgVWludDMyQXJyYXk7CiAgICAgY2xhc3MgVW5saW5rZWRD
b2RlQmxvY2s7CiAgICAgY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOwpAQCAtMjMwLDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGFycmF5Q29uc3RydWN0b3JUYWJsZTsKICAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiBhcnJheVByb3RvdHlwZVRhYmxlOwogICAgICAgICBjb25z
dCBIYXNoVGFibGUqIGJvb2xlYW5Qcm90b3R5cGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRh
YmxlKiBkYXRhVmlld1RhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRhdGVUYWJsZTsK
ICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlQ29uc3RydWN0b3JUYWJsZTsKICAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBlcnJvclByb3RvdHlwZVRhYmxlOwpAQCAtMzkwLDYgKzM4Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExlZ2FjeVByb2ZpbGVyKiBtX2VuYWJsZWRQcm9m
aWxlcjsKICAgICAgICAgT3duUHRyPFByb2ZpbGVyOjpEYXRhYmFzZT4gbV9wZXJCeXRlY29kZVBy
b2ZpbGVyOworICAgICAgICBSZWZQdHI8VHlwZWRBcnJheUNvbnRyb2xsZXI+IG1fdHlwZWRBcnJh
eUNvbnRyb2xsZXI7CiAgICAgICAgIFJlZ0V4cENhY2hlKiBtX3JlZ0V4cENhY2hlOwogICAgICAg
ICBCdW1wUG9pbnRlckFsbG9jYXRvciBtX3JlZ0V4cEFsbG9jYXRvcjsKIApAQCAtNDI4LDU1ICs0
MjEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBoYXZlRW5vdWdoTmV3U3RyaW5n
c1RvSGFzaENvbnMoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29ucyA+IHNf
bWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uczsgfQogICAgICAgICB2b2lkIHJlc2V0TmV3
U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29u
cyA9IDA7IH0KIAotI2RlZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0eXBlLCBjYXBp
dGFsaXplZFR5cGUpIFwKLSAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9y
KGNvbnN0IGNhcGl0YWxpemVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikgXAotICAgICAgICB7IFwKLSAgICAgICAgICAgIEFTU0VSVCghbV8jI3R5
cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNzSW5mbyB8fCBtXyMjdHlwZSMjQXJyYXlEZXNjcmlw
dG9yLm1fY2xhc3NJbmZvID09IGRlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0gICAgICAgICAg
ICBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yID0gZGVzY3JpcHRvcjsgXAotICAgICAgICAgICAg
QVNTRVJUKG1fIyN0eXBlIyNBcnJheURlc2NyaXB0b3IubV9jbGFzc0luZm8pOyBcCi0gICAgICAg
IH0gXAotICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgdHlwZSMjQXJyYXlEZXNj
cmlwdG9yKCkgY29uc3QgeyBBU1NFUlQobV8jI3R5cGUjI0FycmF5RGVzY3JpcHRvci5tX2NsYXNz
SW5mbyk7IHJldHVybiBtXyMjdHlwZSMjQXJyYXlEZXNjcmlwdG9yOyB9Ci0KLSAgICAgICAgcmVn
aXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24oaW50OCwgSW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlw
ZWRBcnJheUZ1bmN0aW9uKGludDE2LCBJbnQxNik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJh
eUZ1bmN0aW9uKGludDMyLCBJbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0
aW9uKHVpbnQ4LCBVaW50OCk7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKHVp
bnQ4Q2xhbXBlZCwgVWludDhDbGFtcGVkKTsKLSAgICAgICAgcmVnaXN0ZXJUeXBlZEFycmF5RnVu
Y3Rpb24odWludDE2LCBVaW50MTYpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlv
bih1aW50MzIsIFVpbnQzMik7Ci0gICAgICAgIHJlZ2lzdGVyVHlwZWRBcnJheUZ1bmN0aW9uKGZs
b2F0MzIsIEZsb2F0MzIpOwotICAgICAgICByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbihmbG9h
dDY0LCBGbG9hdDY0KTsKLSN1bmRlZiByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbgotICAgICAg
ICAKLSAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlw
dG9yKFR5cGVkQXJyYXlUeXBlIHR5cGUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Tm9uZToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGNhc2UgVHlwZWRBcnJheUludDg6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVkQXJyYXlJbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmludDE2QXJyYXlE
ZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlJbnQzMjoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJmludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNl
IFR5cGVkQXJyYXlVaW50ODoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCk7Ci0gICAgICAgICAgICBjYXNlIFR5cGVkQXJyYXlVaW50OENsYW1wZWQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICZ1aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3IoKTsKLSAgICAg
ICAgICAgIGNhc2UgVHlwZWRBcnJheVVpbnQxNjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJnVp
bnQxNkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5VWludDMy
OgotICAgICAgICAgICAgICAgIHJldHVybiAmdWludDMyQXJyYXlEZXNjcmlwdG9yKCk7Ci0gICAg
ICAgICAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDMyOgotICAgICAgICAgICAgICAgIHJldHVybiAm
ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwotICAgICAgICAgICAgY2FzZSBUeXBlZEFycmF5Rmxv
YXQ2NDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIGJv
b2wgY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSBjb25zdAogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gbV9hcGlMb2NrLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpIHx8
IGV4Y2x1c2l2ZVRocmVhZCA9PSBjdXJyZW50VGhyZWFkKCk7CkBAIC01MTAsMTYgKzQ1NCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1faW5EZWZpbmVPd25Qcm9wZXJ0eTsKICAg
ICAgICAgT3duUHRyPENvZGVDYWNoZT4gbV9jb2RlQ2FjaGU7CiAgICAgICAgIFJlZkNvdW50ZWRB
cnJheTxTdGFja0ZyYW1lPiBtX2V4Y2VwdGlvblN0YWNrOwotCi0gICAgICAgIFR5cGVkQXJyYXlE
ZXNjcmlwdG9yIG1faW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2Ny
aXB0b3IgbV9pbnQxNkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0
b3IgbV9pbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3Ig
bV91aW50OEFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV91
aW50OENsYW1wZWRBcnJheURlc2NyaXB0b3I7Ci0gICAgICAgIFR5cGVkQXJyYXlEZXNjcmlwdG9y
IG1fdWludDE2QXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBt
X3VpbnQzMkFycmF5RGVzY3JpcHRvcjsKLSAgICAgICAgVHlwZWRBcnJheURlc2NyaXB0b3IgbV9m
bG9hdDMyQXJyYXlEZXNjcmlwdG9yOwotICAgICAgICBUeXBlZEFycmF5RGVzY3JpcHRvciBtX2Zs
b2F0NjRBcnJheURlc2NyaXB0b3I7CiAgICAgfTsKIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTMtMDgtMTQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBUeXBlZCBhcnJheXMgc2hvdWxkIGJlIHJld3JpdHRl
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5MDY0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisgICAgICAgIAorICAgICAgICAt
IEFkZGVkIHRoZSBub3Rpb24gb2YgYSByZWZlcmVuY2UgY291bnRlZCBvYmplY3QgdGhhdCBjYW4g
YmUgbWFya2VkIERlZmVycmVkLAorICAgICAgICAgIHdoaWNoIGlzIGxpa2UgYSBzcGVjaWFsLXB1
cnBvc2UgdXByZWYuCisgICAgICAgIAorICAgICAgICAtIEFkZGVkIGEgY29tbW9uIGJ5dGUgZmxp
cHBlci4KKworICAgICAgICBBdXRvbWFrZSB3b3JrIGNvdXJ0ZXN5IG9mIFphbiBEb2JlcnNlayA8
emRvYmVyc2VrQGlnYWxpYS5jb20+LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYv
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlZmVycmFibGVS
ZWZDb3VudGVkQmFzZTo6cmVmKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRC
YXNlOjpoYXNPbmVSZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2U6
OnJlZkNvdW50KToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjppc0Rl
ZmVycmVkKToKKyAgICAgICAgKFdURjo6RGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlOjpEZWZlcnJh
YmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZEJh
c2U6On5EZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxl
UmVmQ291bnRlZEJhc2U6OmRlcmVmQmFzZSk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZD
b3VudGVkQmFzZTo6c2V0SXNEZWZlcnJlZEJhc2UpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxl
UmVmQ291bnRlZDo6ZGVyZWYpOgorICAgICAgICAoV1RGOjpEZWZlcnJhYmxlUmVmQ291bnRlZDo6
c2V0SXNEZWZlcnJlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjpEZWZl
cnJhYmxlUmVmQ291bnRlZCk6CisgICAgICAgIChXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOjp+
RGVmZXJyYWJsZVJlZkNvdW50ZWQpOgorICAgICAgICAqIHd0Zi9GbGlwQnl0ZXMuaDogQWRkZWQu
CisgICAgICAgIChXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKToKKyAgICAgICAg
KFdURjo6ZmxpcEJ5dGVzKToKKyAgICAgICAgKFdURjo6ZmxpcEJ5dGVzSWZMaXR0bGVFbmRpYW4p
OgorCiAyMDEzLTA4LTE0ICBKdWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VhdUBuZHMuY29tPgog
CiAgICAgICAgIERGR19KSVQgaW1wbGVtZW50YXRpb24gZm9yIHNoNCBhcmNoaXRlY3R1cmUuCklu
ZGV4OiBTb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV1RG
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAgd3Rm
X3NvdXJjZXMgKz0gXAogICAgIFNvdXJjZS9XVEYvd3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKICAg
ICBTb3VyY2UvV1RGL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0Rl
Y29kZXIuaCBcCisgICAgU291cmNlL1dURi93dGYvRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBcCiAg
ICAgU291cmNlL1dURi93dGYvRGVxdWUuaCBcCiAgICAgU291cmNlL1dURi93dGYvRGlzYWxsb3dD
VHlwZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApAQCAtNTIs
NiArNTMsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvRmlsZVByaW50
U3RyZWFtLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRmlsZVByaW50U3RyZWFtLmggXAogICAg
IFNvdXJjZS9XVEYvd3RmL0ZpeGVkQXJyYXkuaCBcCisgICAgU291cmNlL1dURi93dGYvRmxpcEJ5
dGVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaCBcCiAgICAgU291cmNlL1dURi93
dGYvRnVuY3Rpb25EaXNwYXRjaGVyLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvRnVuY3Rpb25E
aXNwYXRjaGVyLmggXApJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lv
biAxNTQwOTApCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsNiArMTQxLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0
ZlxEYXRlTWF0aC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEZWNpbWFs
TnVtYmVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXERlY29kZXIuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGVxdWUuaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRGlzYWxsb3dDVHlwZS5oIiAvPg0KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxEb3VibHlMaW5rZWRMaXN0LmgiIC8+DQpAQCAtMTY0LDYg
KzE2NSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmVhdHVyZURlZmluZXMu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmlsZVByaW50U3RyZWFtLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZpeGVkQXJyYXkuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcRmxpcEJ5dGVzLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEZvcndhcmQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcRnVuY3Rpb25EaXNwYXRjaGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cd3RmXEZ1bmN0aW9uYWwuaCIgLz4NCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDgg
QEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNEND
MTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9Owor
CQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OworCQkwRjJCNjZBNzE3
QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQz
RjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZDMDA3
REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxhdGlv
blRocmVhZC5oICovOyB9OwogCQkwRjhGMkI5MjE3MkUwMTAzMDA3REJEQTUgLyogQ29tcGlsYXRp
b25UaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLzsg
fTsKQEAgLTI4MCw2ICsyODIsOCBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQjY2QTQxN0I2
QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
ZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkI2
NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5
dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5MTY2NDNGMTkwMDkw
QjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJh
d1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBG
MDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
bXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJC
OTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbXBpbGF0aW9uVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzAs
NiArNjM0LDcgQEAKIAkJCQlBOEE0NzI3QjE1MUE4MjVBMDA0MTIzRkYgLyogRGVjaW1hbE51bWJl
ci5jcHAgKi8sCiAJCQkJQThBNDcyN0MxNTFBODI1QTAwNDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIu
aCAqLywKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5oICovLAorCQkJ
CTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovLAog
CQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovLAogCQkJCUE4QTQ3MjdG
MTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCiAJCQkJQThBNDcyODAxNTFB
ODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKQEAgLTY0OCw2ICs2NTMsNyBA
QAogCQkJCTBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICov
LAogCQkJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAqLywK
IAkJCQlBOEE0NzJBMzE1MUE4MjVBMDA0MTIzRkYgLyogRml4ZWRBcnJheS5oICovLAorCQkJCTBG
MkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLywKIAkJCQlBOEE0NzJBNjE1
MUE4MjVBMDA0MTIzRkYgLyogRm9yd2FyZC5oICovLAogCQkJCUE4QTQ3MkE3MTUxQTgyNUEwMDQx
MjNGRiAvKiBGdW5jdGlvbmFsLmggKi8sCiAJCQkJMUExRDhCOUQxNzMxODc5ODAwMTQxREE0IC8q
IEZ1bmN0aW9uRGlzcGF0Y2hlci5jcHAgKi8sCkBAIC05OTQsNiArMTAwMCw3IEBACiAJCQkJQThB
NDczRjYxNTFBODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzNGQTE1MUE4MjVCMDA0MTIzRkYgLyogT1NSYW5kb21Tb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3M0ZCMTUxQTgyNUIwMDQxMjNGRiAvKiBPd25BcnJheVB0ci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZD
b3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGQzE1MUE4MjVCMDA0MTIzRkYgLyog
T3duUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRDE1MUE4MjVCMDA0MTIzRkYgLyog
T3duUHRyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNGRTE1MUE4MjVCMDA0MTIz
RkYgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNTcsNiArMTA2NCw3
IEBACiAJCQkJQThBNDc0MzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDQxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3NpdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDcxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZEZ1bmN0aW9uSW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQjY2QTcxN0I2QjRG
RDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NDkxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRp
dmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
NTQwOTApCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTgsNiArMTgsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBEYXRhTG9nLmgKICAgICBEZWNp
bWFsTnVtYmVyLmgKICAgICBEZWNvZGVyLmgKKyAgICBEZWZlcnJhYmxlUmVmQ291bnRlZC5oCiAg
ICAgRGVxdWUuaAogICAgIERpc2FsbG93Q1R5cGUuaAogICAgIERvdWJseUxpbmtlZExpc3QuaApA
QCAtMjgsNiArMjksNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBGZWF0dXJlRGVmaW5lcy5oCiAg
ICAgRmlsZVByaW50U3RyZWFtLmgKICAgICBGaXhlZEFycmF5LmgKKyAgICBGbGlwQnl0ZXMuaAog
ICAgIEZvcndhcmQuaAogICAgIEZ1bmN0aW9uRGlzcGF0Y2hlci5oCiAgICAgRnVuY3Rpb25hbC5o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0RlZmVycmFibGVSZWZDb3VudGVkLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV1RGL3d0Zi9EZWZlcnJhYmxlUmVmQ291bnRlZC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERlZmVycmFibGVSZWZDb3VudGVkX2gKKyNkZWZpbmUgRGVmZXJyYWJsZVJl
ZkNvdW50ZWRfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworLy8gQSB2YXJpYW50IG9mIFJlZkNvdW50ZWQgdGhhdCBhbGxvd3MgcmVmZXJl
bmNlIGNvdW50aW5nIHRvIGJlIGRlZmVycmVkLAorLy8gYW5kIGNhbiB0ZWxsIHlvdSBpZiB0aGF0
IGhhcyBoYXBwZW5lZC4gWW91IGNhbiB0aGluayBvZiBhIGRlZmVycmFsIGFzCisvLyBqdXN0IGJl
aW5nIGFuIGFkZGl0aW9uYWwgInJlZiIsIGV4Y2VwdCB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGl0
IGhhcworLy8gc3BlY2lmaWNhbGx5IGhhcHBlbmVkIC0gdGhpcyBjYW4gYmUgdXNlZnVsIGVpdGhl
ciBmb3IgZGVidWdnaW5nLCBvcgorLy8gc29tZXRpbWVzIGV2ZW4gZm9yIHNvbWUgYWRkaXRpb25h
bCBmdW5jdGlvbmFsaXR5LgorCitjbGFzcyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZlcnJlZEZsYWcgPSAxOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBub3JtYWxJbmNyZW1lbnQgPSAyOworICAgIAorcHVibGljOgorICAgIHZvaWQg
cmVmKCkKKyAgICB7CisgICAgICAgIG1fcmVmQ291bnQgKz0gbm9ybWFsSW5jcmVtZW50OworICAg
IH0KKyAgICAKKyAgICBib29sIGhhc09uZVJlZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gcmVmQ291bnQoKSA9PSAxOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZWZDb3VudCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAvIG5vcm1hbEluY3JlbWVu
dDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhIShtX3JlZkNvdW50ICYgZGVmZXJyZWRGbGFnKTsKKyAgICB9CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50ZWRCYXNlKCkKKyAgICAgICAgOiBtX3Jl
ZkNvdW50KG5vcm1hbEluY3JlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIH5EZWZlcnJh
YmxlUmVmQ291bnRlZEJhc2UoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZXJlZkJh
c2UoKQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCAtPSBub3JtYWxJbmNyZW1lbnQ7CisgICAg
ICAgIHJldHVybiAhbV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBib29sIHNldElzRGVmZXJyZWRC
YXNlKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAg
IG1fcmVmQ291bnQgfD0gZGVmZXJyZWRGbGFnOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgJj0gfmRlZmVycmVkRmxhZzsKKyAgICAgICAg
cmV0dXJuICFtX3JlZkNvdW50OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
bV9yZWZDb3VudDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBEZWZlcnJhYmxl
UmVmQ291bnRlZCA6IHB1YmxpYyBEZWZlcnJhYmxlUmVmQ291bnRlZEJhc2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERlZmVycmFibGVSZWZDb3VudGVkKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVy
ZWZCYXNlKCkpCisgICAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAg
IH0KKyAgICAKKyAgICBib29sIHNldElzRGVmZXJyZWQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICghc2V0SXNEZWZlcnJlZEJhc2UodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRGVmZXJyYWJsZVJlZkNvdW50
ZWQoKSB7IH0KKyAgICB+RGVmZXJyYWJsZVJlZkNvdW50ZWQoKSB7IH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkRlZmVycmFibGVSZWZDb3VudGVkOworCisjZW5kaWYg
Ly8gRGVmZXJyYWJsZVJlZkNvdW50ZWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GbGlwQnl0ZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL0ZsaXBCeXRlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZsaXBCeXRlc19oCisjZGVmaW5lIEZsaXBCeXRlc19oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSBib29sIG5lZWRUb0ZsaXBC
eXRlc0lmTGl0dGxlRW5kaWFuKGJvb2wgbGl0dGxlRW5kaWFuKQoreworI2lmIENQVShCSUdfRU5E
SUFOKQorICAgIHJldHVybiBsaXR0bGVFbmRpYW47CisjZWxzZQorICAgIHJldHVybiAhbGl0dGxl
RW5kaWFuOworI2VuZGlmCit9CisKK2lubGluZSB1aW50MTZfdCBmbGlwQnl0ZXModWludDE2X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwZmYpIDw8IDgpCisgICAgICAgIHwg
KCh2YWx1ZSAmIDB4ZmYwMCkgPj4gOCk7Cit9CisKK2lubGluZSB1aW50MzJfdCBmbGlwQnl0ZXMo
dWludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuICgodmFsdWUgJiAweDAwMDAwMGZmKSA8PCAy
NCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHgwMDAwZmYwMCkgPDwgOCkKKyAgICAgICAgfCAoKHZh
bHVlICYgMHgwMGZmMDAwMCkgPj4gOCkKKyAgICAgICAgfCAoKHZhbHVlICYgMHhmZjAwMDAwMCkg
Pj4gMjQpOworfQorCitpbmxpbmUgdWludDY0X3QgZmxpcEJ5dGVzKHVpbnQ2NF90IHZhbHVlKQor
eworICAgIHJldHVybiAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDAwMGZmbGx1KSA8PCA1NikKKyAg
ICAgICAgfCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwMDBmZjAwbGx1KSA8PCA0MCkKKyAgICAgICAg
fCAoKHZhbHVlICYgMHgwMDAwMDAwMDAwZmYwMDAwbGx1KSA8PCAyNCkKKyAgICAgICAgfCAoKHZh
bHVlICYgMHgwMDAwMDAwMGZmMDAwMDAwbGx1KSA8PCA4KQorICAgICAgICB8ICgodmFsdWUgJiAw
eDAwMDAwMGZmMDAwMDAwMDBsbHUpID4+IDgpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDAwMGZm
MDAwMDAwMDAwMGxsdSkgPj4gMjQpCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4MDBmZjAwMDAwMDAw
MDAwMGxsdSkgPj4gNDApCisgICAgICAgIHwgKCh2YWx1ZSAmIDB4ZmYwMDAwMDAwMDAwMDAwMGxs
dSkgPj4gNTYpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxpcEJ5dGVz
KFQgdmFsdWUpCit7CisgICAgaWYgKHNpemVvZih2YWx1ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIGlmIChzaXplb2YodmFsdWUpID09IDIpIHsKKyAgICAgICAgdW5pb24gewor
ICAgICAgICAgICAgVCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQxNl90IHdvcmQ7CisgICAg
ICAgIH0gdTsKKyAgICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBm
bGlwQnl0ZXModS53b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAg
IGlmIChzaXplb2YodmFsdWUpID09IDQpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg
VCBvcmlnaW5hbDsKKyAgICAgICAgICAgIHVpbnQzMl90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAg
ICAgICAgdS5vcmlnaW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53
b3JkKTsKKyAgICAgICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIGlmIChzaXplb2Yo
dmFsdWUpID09IDgpIHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVCBvcmlnaW5hbDsK
KyAgICAgICAgICAgIHVpbnQ2NF90IHdvcmQ7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5vcmln
aW5hbCA9IHZhbHVlOworICAgICAgICB1LndvcmQgPSBmbGlwQnl0ZXModS53b3JkKTsKKyAgICAg
ICAgcmV0dXJuIHUub3JpZ2luYWw7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGlu
ZSBUIGZsaXBCeXRlc0lmTGl0dGxlRW5kaWFuKFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuKQor
eworICAgIGlmIChuZWVkVG9GbGlwQnl0ZXNJZkxpdHRsZUVuZGlhbihsaXR0bGVFbmRpYW4pKQor
ICAgICAgICByZXR1cm4gZmxpcEJ5dGVzKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Om5lZWRUb0ZsaXBCeXRlc0lmTGl0dGxl
RW5kaWFuOwordXNpbmcgV1RGOjpmbGlwQnl0ZXM7Cit1c2luZyBXVEY6OmZsaXBCeXRlc0lmTGl0
dGxlRW5kaWFuOworCisjZW5kaWYgLy8gRmxpcEJ5dGVzX2gKKwpJbmRleDogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTc5IEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgIFR5cGVkIGFycmF5cyBhcmUg
bm93IGltcGxlbWVudGVkIGluIEphdmFTY3JpcHRDb3JlLCBhbmQgV2ViQ29yZSBpcyBtZXJlbHkg
YQorICAgICAgICBjbGllbnQgb2YgdGhlbS4gVGhlcmUgaXMgb25seSBvbmUgbGF5ZXJpbmcgdmlv
bGF0aW9uOiBXZWJDb3JlIGluc3RhbGxzIGEKKyAgICAgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyIG9uIFZNLCB3aGljaCBtYWtlcyB0aGUKKyAgICAgICAgQXJyYXlCdWZmZXI8LT5KU0Fy
cmF5QnVmZmVyIHJlbGF0aW9uc2hpcCByZXNlbWJsZSBET00gd3JhcHBlcnMuIEJ5IGRlZmF1bHQs
CisgICAgICAgIEpTQyBtYWtlcyB0aGUgb3duZXJzaGlwIGdvIG9uZSB3YXk7IHRoZSBKU0FycmF5
QnVmZmVyIGtlZXBzIHRoZSBBcnJheUJ1ZmZlcgorICAgICAgICBhbGl2ZSBidXQgaWYgQXJyYXlC
dWZmZXIgaXMga2VwdCBhbGl2ZSBmcm9tIG5hdGl2ZSBjb2RlIHRoZW4gdGhlCisgICAgICAgIEpT
QXJyYXlCeWZmZXIgbWF5IGRpZS4gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyIHdpbGwga2Vl
cCB0aGUKKyAgICAgICAgSlNBcnJheUJ1ZmZlciBhbGl2ZSBpZiB0aGUgQXJyYXlCdWZmZXIgaXMg
aW4gdGhlIG9wYXF1ZSByb290IHNldC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2Ugbm9uLUpT
RE9NV3JhcHBlcnMgYmVoYXZlIGxpa2UgRE9NIHdyYXBwZXJzLCBhIGJ1bmNoIG9mIGNvZGUgaXMK
KyAgICAgICAgY2hhbmdlZCB0byBtYWtlIG1vc3QgcmVmZXJlbmNlcyB0byB3cmFwcGVycyByZWZl
ciB0byBKU09iamVjdCogcmF0aGVyIHRoYW4KKyAgICAgICAgSlNET01XcmFwcGVyKi4KKyAgICAg
ICAgCisgICAgICAgIEFycmF5IGJ1ZmZlciB2aWV3cyBhcmUgbm93IHRyYW5zaWVudDsgdGhlIEpT
IGFycmF5IGJ1ZmZlciB2aWV3IHdyYXBwZXJzCisgICAgICAgIGRvbid0IG93biB0aGVtIG9yIGtl
ZXAgdGhlbSBhbGl2ZS4gVGhpcyByZXF1aXJlZCBhIGJ1bmNoIG9mIGNoYW5nZXMgdG8gbWFrZQor
ICAgICAgICBiaW5kaW5ncyBjb2RlIHVzZSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB0byBob2xk
IG9udG8gdGhlaXIgdmlld3MuCisgICAgICAgIAorICAgICAgICBBbHNvIHRoZXJlIGlzIGEgYnVu
Y2ggb2YgbmV3IGNvZGUgdG8gbWFrZSBKU0MtcHJvdmlkZWQgYXJyYXkgYnVmZmVycyBhbmQKKyAg
ICAgICAgdmlld3Mgb2JleSB0aGUgdG9KUy90bzxDbGFzc05hbWU+IGlkaW9tIGZvciB3cmFwcGlu
ZyBhbmQgdW53cmFwcGluZy4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIHRoZSBEYXRhVmll
dyBBUEkgaXMgbm93IGNvbXBsZXRlbHkgZGlmZmVyZW50OiB0aGUgSlNEYXRhVmlldworICAgICAg
ICBwcm92aWRlcyB0aGUgc2FtZSB1c2VyLXZpc2libGUgSlMgQVBJIGJ1dCB1c2luZyBpdHMgb3du
IGludGVybmFsIG1hZ2ljOyB0aGUKKyAgICAgICAgQysrIGNvZGUgdGhhdCB1c2VzIERhdGFWaWV3
IG5vdyB1c2VzIGEgcmF0aGVyIGRpZmZlcmVudCBBUEkgdGhhdCBpcyBub3QKKyAgICAgICAgYXdh
cmUgb2YgdXN1YWwgRE9NIHNlbWFudGljcywgc2luY2UgaXQncyBpbiBKU0MgYW5kIG5vdCBXZWJD
b3JlLiBJdCdzCisgICAgICAgIGVxdWFsbHkgdXNlZnVsIGZvciBhbGwgb2YgV2ViQ29yZSdzIHB1
cnBvc2VzLCBidXQgc29tZSBjb2RlIGhhZCB0byBjaGFuZ2UKKyAgICAgICAgdG8gYWRhcHQgdGhl
IG5ldyBjb252ZW50aW9ucy4KKyAgICAgICAgCisgICAgICAgIFNvbWUgdGVzdHMgaGF2ZSBiZWVu
IGNoYW5nZWQgb3IgcmViYXNlZCBkdWUgdG8gY2hhbmdlcyBpbiBiZWhhdmlvciwgdGhhdAorICAg
ICAgICBicmluZyB1cyBpbnRvIGNvbmZvcm1hbmNlIHdpdGggd2hlcmUgdGhlIHN0YW5kYXJkcyBh
cmUgZ29pbmcgYW5kIGFsbG93IHVzIHRvCisgICAgICAgIG1hdGNoIEZpcmVmb3ggYmVoYXZpb3Iu
CisKKyAgICAgICAgQXV0b21ha2Ugd29yayBhbmQgc29tZSBhZGRpdGlvbmFsIEdUSyBjaGFuZ2Vz
IGNvdXJ0ZXN5IG9mCisgICAgICAgIFphbiBEb2JlcnNlayA8emRvYmVyc2VrQGlnYWxpYS5jb20+
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0RhdGFWaWV3Lmg6IEFk
ZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNE
YXRhVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
VHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9UeXBlZEFycmF5Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaDogQWRkZWQuCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5h
bHlzZXIuaDoKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVzZUpTQy5jbWFrZToK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2Vi
Q29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oOiBSZW1vdmVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQmxv
YkN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFs
dWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDcnlwdG9DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG86Omdl
dFJhbmRvbVZhbHVlcyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBl
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW5saW5lQ2FjaGVkV3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRDYWNo
ZWRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNhY2hlV3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjp1bmNhY2hlV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9BcnJheUJ1ZmZlclZpZXcp
OgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9J
bnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50MzJBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1VpbnQ4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9VaW50OENsYW1wZWRB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b1VpbnQxNkFycmF5KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvVWludDMyQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDMyQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9GbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9E
YXRhVmlldyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OmxvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxUZW1wbGF0ZUVsZW1lbnQ6OmNvbnRlbnQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1RyYWNrQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6
OnNlbmQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRyYW5zZmVyQXJyYXlC
dWZmZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjppbml0Tm9ybWFsV29ybGRDbGllbnREYXRhKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcjo6fldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXI6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjp3cmFwcGVyT3duZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEZvckFsbFBh
cmVudHMpOgorICAgICAgICAoUGFyc2VJbnRlcmZhY2UpOgorICAgICAgICAoU2tpcEluY2x1ZGVI
ZWFkZXIpOgorICAgICAgICAoSXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChJc1dyYXBwZXJU
eXBlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6Cisg
ICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrKToKKyAgICAgICAgKEdldE5hdGl2ZVR5cGUpOgorICAgICAgICAoSlNWYWx1ZVRv
TmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgIChHZW5lcmF0ZUNv
bnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9ySGVscGVy
TWV0aG9kcyk6CisgICAgICAgICogZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBmaWxlYXBpL1dl
YktpdEJsb2JCdWlsZGVyLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaWRs
OiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0RhdGFWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9j
YW52YXMvRGF0YVZpZXcuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0Zsb2F0
MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQxNkFycmF5LmlkbDogUmVt
b3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbnQzMkFycmF5LmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9JbnQ4QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9VaW50MzJBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhB
cnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJy
YXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNEYXRhKToKKyAgICAgICAgKiBwYWdlL0NyeXB0by5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OnNob3VsZFdhaXRGb3JMb2FkaW5nT2ZSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpleHRyYWN0S2V5VVJJ
S2V5SURBbmRDZXJ0aWZpY2F0ZUZyb21Jbml0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKiB0ZXN0aW5nL01vY2tDRE0u
Y3BwOgorCiAyMDEzLTA4LTE0ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5Nzg2PiBbRUZMXSBkZWNvcmF0aW9u
IG9mIHNlYXJjaCB0eXBlIGlzIGRpZmZlcmVudCBmcm9tIG90aGVyIHBsYXRmb3JtcwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00OTksMzEgKzQ5OSwxOSBAQCBzZXQoV2Vi
Q29yZV9JRExfRklMRVMKICAgICBodG1sL1ZhbGlkaXR5U3RhdGUuaWRsCiAgICAgaHRtbC9Wb2lk
Q2FsbGJhY2suaWRsCiAKLSAgICBodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwKLSAgICBodG1s
L2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGll
bnQuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwKICAgICBodG1sL2NhbnZh
cy9DYW52YXNQcm94eS5pZGwKICAgICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwKLSAgICBo
dG1sL2NhbnZhcy9EYXRhVmlldy5pZGwKICAgICBodG1sL2NhbnZhcy9ET01QYXRoLmlkbAogICAg
IGh0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmlkbAogICAgIGh0bWwvY2FudmFzL0VYVFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwKLSAgICBodG1sL2NhbnZhcy9GbG9hdDMyQXJyYXkuaWRs
Ci0gICAgaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL0ludDE2
QXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwKLSAgICBodG1sL2NhbnZh
cy9JbnQ4QXJyYXkuaWRsCiAgICAgaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5p
ZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaWRsCiAgICAgaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmlkbAotICAgIGh0
bWwvY2FudmFzL1VpbnQxNkFycmF5LmlkbAotICAgIGh0bWwvY2FudmFzL1VpbnQzMkFycmF5Lmlk
bAotICAgIGh0bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsCi0gICAgaHRtbC9jYW52YXMvVWludDhD
bGFtcGVkQXJyYXkuaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaWRsCkBAIC0xNDk5LDcgKzE0ODcsNiBAQCBzZXQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCiAgICAgaHRtbC9jYW52YXMvQ2Fu
dmFzU3R5bGUuY3BwCi0gICAgaHRtbC9jYW52YXMvRGF0YVZpZXcuY3BwCiAgICAgaHRtbC9jYW52
YXMvRVhURHJhd0J1ZmZlcnMuY3BwCiAgICAgaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE1NDA5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM4
MiwzMSArMzgyLDE5IEBAIEJJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvVGlt
ZVJhbmdlcy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9WYWxpZGl0eVN0YXRlLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL1ZvaWRDYWxsYmFjay5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXIuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyVmlldy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzR3Jh
ZGllbnQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc1Byb3h5LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL2h0bWwvY2FudmFzL0RhdGFWaWV3LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9ET01QYXRoLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFREcmF3
QnVmZmVycy5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9GbG9hdDMyQXJy
YXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwgXAot
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvSW50MTZBcnJheS5pZGwgXAotICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvSW50OEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNFbGVtZW50
SW5kZXhVaW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERl
cml2YXRpdmVzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxv
YXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0Lmlk
bCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50MTZBcnJheS5pZGwgXAotICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDMyQXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0
bWwvY2FudmFzL1VpbnQ4QXJyYXkuaWRsIFwKLSAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1Vp
bnQ4Q2xhbXBlZEFycmF5LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEFj
dGl2ZUluZm8uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMucHJpCShyZXZpc2lvbiAxNTQwOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5wcmkJKHdvcmtpbmcgY29weSkKQEAg
LTMwMSwxNCArMzAxLDcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICAkJFBXRC9maWxlYXBpL0Zp
bGVMaXN0LmlkbCBcCiAgICAgJCRQV0QvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBcCiAgICAgJCRQ
V0QvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwgXAotICAgICQkUFdEL2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyVmlldy5pZGwgXAotICAgICQkUFdEL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlk
bCBcCi0gICAgJCRQV0QvaHRtbC9jYW52YXMvRGF0YVZpZXcuaWRsIFwKLSAgICAkJFBXRC9odG1s
L2NhbnZhcy9JbnQ4QXJyYXkuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9GbG9hdDMyQXJy
YXkuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKICAgICAk
JFBXRC9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5pZGwgXAotICAgICQkUFdEL2h0bWwvY2Fu
dmFzL0ludDMyQXJyYXkuaWRsIFwKICAgICAkJFBXRC9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJu
LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvQ2FudmFzUHJveHkuaWRsIFwKICAgICAkJFBX
RC9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBcCkBAIC0zMzgsMTQgKzMz
MSw5IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRs
IFwKICAgICAkJFBXRC9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwg
XAotICAgICQkUFdEL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsIFwKICAgICAkJFBXRC9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsIFwKICAgICAkJFBXRC9odG1sL2NhbnZhcy9XZWJHTFVu
aWZvcm1Mb2NhdGlvbi5pZGwgXAogICAgICQkUFdEL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuaWRsIFwKLSAgICAkJFBXRC9odG1sL2NhbnZhcy9VaW50OEFycmF5LmlkbCBc
Ci0gICAgJCRQV0QvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsIFwKLSAgICAkJFBX
RC9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwgXAotICAgICQkUFdEL2h0bWwvY2FudmFzL1Vp
bnQxNkFycmF5LmlkbCBcCiAgICAgJCRQV0QvaHRtbC9ET01Gb3JtRGF0YS5pZGwgXAogICAgICQk
UFdEL2h0bWwvRE9NU2V0dGFibGVUb2tlbkxpc3QuaWRsIFwKICAgICAkJFBXRC9odG1sL0RPTVRv
a2VuTGlzdC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMCArMzAsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNBYnN0cmFjdFdvcmtlci5jcHAgXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNBYnN0cmFjdFdvcmtlci5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
QXJyYXlCdWZmZXIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXJyYXlCdWZmZXIu
aCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FycmF5QnVmZmVyVmlldy5jcHAgXAotCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0F0dHIuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXR0ci5o
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXVkaW9CdWZmZXIuY3BwIFwKQEAgLTE1Niw4
ICsxNTIsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNEYXRhVHJhbnNmZXJJdGVtLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNE
YXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNEYXRh
VHJhbnNmZXJJdGVtTGlzdC5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcu
Y3BwIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRGF0YVZpZXcuaCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNEZWxheU5vZGUuY3BwIFwKQEAgLTI4OCwxMCArMjgyLDYgQEAg
d2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmls
ZVdyaXRlckNhbGxiYWNrLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVy
U3luYy5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGaWxlV3JpdGVyU3luYy5oIFwK
LQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRmxvYXQzMkFycmF5LmNwcCBcCi0JRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0Zsb2F0MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTRmxvYXQ2NEFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zsb2F0NjRB
cnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9jdXNFdmVudC5jcHAgXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb2N1c0V2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNGb250TG9hZGVyLmNwcCBcCkBAIC00ODksMTIgKzQ3OSw2IEBAIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luamVjdGVkU2NyaXB0
SG9zdC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0luc3BlY3RvckZyb250ZW5kSG9zdC5o
IFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW50MTZBcnJheS5jcHAgXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNJbnQxNkFycmF5LmggXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNJbnQzMkFycmF5LmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDMyQXJyYXku
aCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ludDhBcnJheS5jcHAgXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNJbnQ4QXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U1NjcmlwdFByb2Nlc3Nvck5vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTU2Ny
aXB0UHJvY2Vzc29yTm9kZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSmF2YVNjcmlw
dENhbGxGcmFtZS5jcHAgXApAQCAtNzU5LDE0ICs3NDMsNiBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJj
ZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNUcmVlV2Fsa2VyLmggXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNVSUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1VJRXZlbnQuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmNw
cCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1VpbnQxNkFycmF5LmggXAotCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNVaW50MzJBcnJheS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNVaW50MzJBcnJheS5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTVWludDhBcnJh
eS5jcHAgXAotCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50OEFycmF5LmggXAotCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5jcHAgXAotCURlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNVaW50OENsYW1wZWRBcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTVmFsaWRpdHlTdGF0ZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWYWxp
ZGl0eVN0YXRlLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNWb2lkQ2FsbGJhY2suY3Bw
IFwKQEAgLTE1NDMsMzEgKzE1MTksMTkgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJJChXZWJD
b3JlKS9odG1sL1RpbWVSYW5nZXMuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvVmFsaWRpdHlTdGF0
ZS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9Wb2lkQ2FsbGJhY2suaWRsIFwKLQkkKFdlYkNvcmUp
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9B
cnJheUJ1ZmZlclZpZXcuaWRsIFwKIAkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCiAJ
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9DYW52YXNQcm94eS5pZGwgXAogCSQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2Nh
bnZhcy9EYXRhVmlldy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRE9NUGF0aC5pZGwg
XAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhURHJhd0J1ZmZlcnMuaWRsIFwKIAkkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXAotCSQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2Nh
bnZhcy9GbG9hdDY0QXJyYXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDE2QXJy
YXkuaWRsIFwKLQkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsIFwKLQkkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52
YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0LmlkbCBcCiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5p
ZGwgXAotCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvVWludDE2QXJyYXkuaWRsIFwKLQkkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9VaW50OEFycmF5LmlkbCBcCi0JJChXZWJDb3JlKS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRB
cnJheS5pZGwgXAogCSQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBc
CiAJJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXAogCSQoV2ViQ29yZSkv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwgXApAQCAtMjMzNCw5ICsy
Mjk4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuaCBcCi0JU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1
c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9CdWZmZXJDdXN0
b20uY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyU291cmNlTm9kZUN1c3Rv
bS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9t
LmNwcCBcCkBAIC0yMzg4LDcgKzIzNTAsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuaCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XcmFwcGVyLmggXAotCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YVZpZXdDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXApAQCAtMjU0MSw2ICsy
NTAyLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQ29yZUpTQ2xpZW50RGF0YS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIFwKQEAgLTMzMTksOCArMzI4Miw2IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNT
dHlsZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmggXAot
CVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmNwcCBcCi0JU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RE9NUGF0aC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFREcmF3QnVmZmVycy5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVERyYXdCdWZmZXJzLmggXApJbmRl
eDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2IEBAIFNPVVJDRVMgKz0gXAogICAgICBi
aW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwIFwKICAgICAgYmluZGluZ3MvanMvRGljdGlv
bmFyeS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKLSAgICAgYmlu
ZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAgXAogICAgICBiaW5kaW5ncy9qcy9KU0F1
ZGlvQnVmZmVyQ3VzdG9tLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5jcHAg
XAogICAgICBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwIFwKQEAgLTExNCw3ICsxMTMsNiBA
QCBTT1VSQ0VTICs9IFwKICAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwIFwK
ICAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAgXAogICAgICBiaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXIuY3BwIFwKLSAgICAgYmluZGluZ3MvanMvSlNEYXRhVmlld0N1c3RvbS5j
cHAgXAogICAgICBiaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcCBcCiAg
ICAgIGJpbmRpbmdzL2pzL0pTRGV2aWNlT3JpZW50YXRpb25FdmVudEN1c3RvbS5jcHAgXAogICAg
ICBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBcCkBAIC0yMDAsNiArMTk4LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBcCiAgICAgIGJp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBcCiAgICAgIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAgXAorICAgICBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwIFwKICAgICAgYnJpZGdlL0lkZW50aWZpZXJSZXAuY3BwIFwKICAgICAgYnJpZGdl
L05QX2pzb2JqZWN0LmNwcCBcCiAgICAgIGJyaWRnZS9jL0NSdW50aW1lT2JqZWN0LmNwcCBcCkBA
IC03MTksNyArNzE4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcCBcCi0gICAgaHRtbC9j
YW52YXMvRGF0YVZpZXcuY3BwIFwKICAgICBodG1sL2Zvcm1zL0ZpbGVJY29uTG9hZGVyLmNwcCBc
CiAgICAgaHRtbC9wYXJzZXIvQmFja2dyb3VuZEhUTUxJbnB1dFN0cmVhbS5jcHAgXAogICAgIGh0
bWwvcGFyc2VyL0JhY2tncm91bmRIVE1MUGFyc2VyLmNwcCBcCkBAIC0xMzQ3LDcgKzEzNDUsNiBA
QCBIRUFERVJTICs9IFwKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCBcCiAgICAgYmlu
ZGluZ3MvanMvRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmggXAogICAgIGJpbmRpbmdzL2pzL0RPTVdy
YXBwZXJXb3JsZC5oIFwKLSAgICBiaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5o
IFwKICAgICBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCBcCiAgICAg
YmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuaCBcCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21Y
UGF0aE5TUmVzb2x2ZXIuaCBcCkBAIC0xNzg0LDcgKzE3ODEsNiBAQCBIRUFERVJTICs9IFwKICAg
ICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5oIFwKLSAgICBodG1sL2NhbnZhcy9EYXRhVmlldy5oIFwKICAgICBodG1sL2NhbnZhcy9ET01Q
YXRoLmggXAogICAgIGh0bWwvQ2xhc3NMaXN0LmggXAogICAgIGh0bWwvRE9NRm9ybURhdGEuaCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvVXNlSlNDLmNtYWtlCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Vc2VKU0MuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3Bw
CiAgICAgYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKICAgICBiaW5kaW5ncy9qcy9HQ0NvbnRy
b2xsZXIuY3BwCi0gICAgYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy9qcy9KU0F1ZGlvQnVmZmVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTQXR0
ckN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCiAgICAgYmluZGlu
Z3MvanMvSlNDREFUQVNlY3Rpb25DdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNEYXRhVmll
d0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0NTU0ZvbnRGYWNlUnVsZUN1c3RvbS5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0NTU0ltcG9ydFJ1bGVDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNDU1NNZWRpYVJ1bGVDdXN0b20uY3BwCkBAIC0xNTAsNiArMTQ4LDcgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCiAgICAg
YmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCiAgICAgYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAorICAgIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxl
ci5jcHAKIAogICAgIGJyaWRnZS9JZGVudGlmaWVyUmVwLmNwcAogICAgIGJyaWRnZS9OUF9qc29i
amVjdC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTQwOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjM1LDcgKzIz
NSw2IEBAIF9fWk43V2ViQ29yZTEyY3JlYXRlTWFya3VwRVBLTlNfNVJhbmdlRVAKIF9fWk43V2Vi
Q29yZTEyZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU180S1VS
TEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEyZ2NDb250cm9sbGVyRXYKIF9fWk43V2Vi
Q29yZTEyaWNvbkRhdGFiYXNlRXYKLV9fWk43V2ViQ29yZTEydG9VaW50OEFycmF5RU4zSlNDN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUxM0FYT2JqZWN0Q2FjaGUxMHJvb3RPYmplY3RFdgogX19aTjdX
ZWJDb3JlMTNBWE9iamVjdENhY2hlMThyb290T2JqZWN0Rm9yRnJhbWVFUE5TXzVGcmFtZUUKIF9f
Wk43V2ViQ29yZTEzQVhPYmplY3RDYWNoZTIxZ0FjY2Vzc2liaWxpdHlFbmFibGVkRQpAQCAtMjg4
LDcgKzI4Nyw2IEBAIF9fWk43V2ViQ29yZTEzY3JlYXRlV3JhcHBlckVQTjNKU0M5RXhlY1MKIF9f
Wk43V2ViQ29yZTEzZGlyZWN0b3J5TmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEz
bGlzdERpcmVjdG9yeUVSS04zV1RGNlN0cmluZ0VTM18KIF9fWk43V2ViQ29yZTEzcG9pbnRlckN1
cnNvckV2Ci1fX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZmZXJFTjNKU0M3SlNWYWx1ZUUKIF9fWk43
V2ViQ29yZTEzdG9IVE1MRWxlbWVudEVQTlNfMjFGb3JtQXNzb2NpYXRlZEVsZW1lbnRFCiBfX1pO
N1dlYkNvcmUxM3RvSlNET01XaW5kb3dFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTE0Q2Fj
aGVkUmVzb3VyY2UxMnJlbW92ZUNsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAg
LTkwNyw3ICs5MDUsNiBAQCBfX1pON1dlYkNvcmU0UGF0aEMxRXYKIF9fWk43V2ViQ29yZTRQYXRo
RDFFdgogX19aTjdXZWJDb3JlNGNvcmVFUDIwTlNVUkxQcm90ZWN0aW9uU3BhY2UKIF9fWk43V2Vi
Q29yZTRjb3JlRVAyOE5TVVJMQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKLV9fWk43V2ViQ29yZTR0
b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TMF8xMUFycmF5
QnVmZmVyRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEVQTlNfMTBDbGllbnRSZWN0RQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTNET01TdHJpbmdMaXN0RQogX19a
TjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQ
TlNfMTRDbGllbnRSZWN0TGlzdEUKQEAgLTI3NDMsNyArMjc0MCw2IEBAIF9fWk43V2ViQ29yZTE2
SFRNTE1lZGlhRWxlbWVudDE2cmV0dXJuVG8KIF9fWk5LN1dlYkNvcmUxNkhUTUxNZWRpYUVsZW1l
bnQxMmlzRnVsbHNjcmVlbkV2CiBfX1pON1dlYkNvcmUxMFRpbWVSYW5nZXMzYWRkRWRkCiBfX1pO
N1dlYkNvcmUxMnRvVGltZVJhbmdlc0VOM0pTQzdKU1ZhbHVlRQotX19aTjdXZWJDb3JlMTR0b0Zs
b2F0MzJBcnJheUVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlNHRvSlNFUE4zSlNDOUV4ZWNT
dGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBUaW1lUmFuZ2VzRQogX19aTks3V2Vi
Q29yZTEwVGltZVJhbmdlczduZWFyZXN0RWQKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9EYXRhVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvRGF0YVZpZXcu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0RhdGFW
aWV3X2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfRGF0YVZpZXdfaAorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5
QnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZX
RF9KU0FycmF5QnVmZmVyX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlcl9oCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNBcnJheUJ1ZmZlci5oPgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSlNBcnJheUJ1ZmZlclZpZXdfaAor
I2RlZmluZSBXZWJDb3JlX0ZXRF9KU0FycmF5QnVmZmVyVmlld19oCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9KU0RhdGFWaWV3LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0pT
RGF0YVZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVf
RldEX0pTRGF0YVZpZXdfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9KU0RhdGFWaWV3X2gKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0RhdGFWaWV3Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFycmF5cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9KU1R5cGVkQXJyYXlzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNCBAQAorI2lm
bmRlZiBXZWJDb3JlX0ZXRF9KU1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSlNU
eXBlZEFycmF5c19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNUeXBlZEFycmF5cy5oPgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL1R5
cGVkQXJyYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBlZEFycmF5Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9G
V0RfVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9UeXBlZEFycmF5
Q29udHJvbGxlcl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheUlu
bGluZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X1R5cGVkQXJyYXlJbmxpbmVzc19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlJbmxp
bmVzc19oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9UeXBl
ZEFycmF5cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvVHlwZWRBcnJheXMuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1R5cGVkQXJyYXlzX2gKKyNkZWZpbmUgV2Vi
Q29yZV9GV0RfVHlwZWRBcnJheXNfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJy
YXlzLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUmVh
bHRpbWVBbmFseXNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vUmVhbHRpbWVBbmFseXNlci5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTUgKzI2LDEyIEBACiAjZGVmaW5lIFJlYWx0aW1lQW5hbHlzZXJfaAogCiAjaW5jbHVk
ZSAiQXVkaW9BcnJheS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+CisjaW5j
bHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLW5h
bWVzcGFjZSBKU0MgewotY2xhc3MgRmxvYXQzMkFycmF5OwotY2xhc3MgVWludDhBcnJheTsKLX0K
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRpb0J1czsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTU0
MDkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTc0MzEsNiArMTc0MzEsMjAgQEAKICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJp
bmRpbmdzXGpzXFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjQyLDYgKzI0Miw4IEBACiAJCTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1NyAvKiBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9y
bUxvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEM0NTM0MjgxMENEQkJGQTAwODY5MTU3IC8qIEpTV2Vi
R0xVbmlmb3JtTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uLmggKi87IH07CiAJCTBGMDkwODdGMTQ0NEZEQjIwMDAyODkxNyAvKiBTY3JvbGxiYXJUaGVt
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3
MTQxNTE0MjE4OUZDMDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWUuY3BwICovOyB9OworCQkwRjA5
OUQwODE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDk5RDA2MTdC
OTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovOyB9Owor
CQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjA5OUQw
NzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMUE1NEYwRjM5
MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBS
ZW5kZXJTZWxlY3Rpb25JbmZvLmggKi87IH07CiAJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0MwNCAv
KiBQbGF0Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJz
LmggKi87IH07CiAJCTBGMTMxNjQwMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
c01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAqLzsgfTsK
QEAgLTgzMCwxMSArODMyLDYgQEAKIAkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xp
ZW50LmggKi87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0
MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTJFOTRGNDND
MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0Zp
bGVSZWFkZXIuaCAqLzsgfTsKLQkJMkU5N0NDRUExMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdD
Q0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5jcHAgKi87IH07Ci0JCTJFOTdDQ0VCMTI5
MzlDQjgwMEM1QzhGRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU5N0NDRTgxMjkzOUNCODAwQzVDOEZGIC8qIERhdGFWaWV3Lmgg
Ki87IH07Ci0JCTJFOTdDQ0Y3MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTdDQ0Y2
MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLzsgfTsKLQkJMkU5N0NF
NkYxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5N0NFNkQxMjkzQUQ2QjAwQzVDOEZGIC8qIEpT
RGF0YVZpZXcuY3BwICovOyB9OwotCQkyRTk3Q0U3MDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRh
Vmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
N0NFNkUxMjkzQUQ2QjAwQzVDOEZGIC8qIEpTRGF0YVZpZXcuaCAqLzsgfTsKIAkJMkVBNzY4MDQw
RkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5
QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUI0QkNEMjEyMUYw
M0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQjRCQ0QwMTIxRjAzRTMwMEVDNDg4NSAvKiBC
bG9iUmVzb3VyY2VIYW5kbGUuY3BwICovOyB9OwogCQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUg
LyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUgLyogQmxvYlJlc291cmNlSGFu
ZGxlLmggKi87IH07CkBAIC0xMjkwLDggKzEyODcsNiBAQAogCQk0OUIzNzYwRDE1QzZDNjg0MDA1
OTEzMUQgLyogQXJyYXlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuaCAqLzsg
fTsKIAkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODAxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovOyB9OwogCQk0OUM3Qjk5NDEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZm
ZXIuaCAqLzsgfTsKLQkJNDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgy
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi87IH07Ci0JCTQ5QzdCOTk2MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFy
cmF5LmggKi87IH07CiAJCTQ5QzdCOTk3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVi
dWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi87IH07
CiAJCTQ5QzdCOTk4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU1dlYkdMRnJhbWVidWZmZXIuaCAqLzsgfTsKIAkJNDlDN0I5OUIxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMUHJvZ3JhbS5jcHAgKi87IH07CkBAIC0xMzUyLDIyICsxMzQ3LDYgQEAKIAkJNDlFQ0VCNkUx
NDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFQ0VCNjQxNDk5NzkwRDAwQ0REM0E0IC8qIEZp
bHRlck9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY1
MTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNwcCAqLzsgfTsKIAkJNDlFQ0VC
NzAxNDk5NzkwRDAwQ0REM0E0IC8qIEZpbHRlck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNF
RjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovOyB9OwotCQk0OUVFQ0Yw
MTEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
QXJyYXlCdWZmZXIuaCAqLzsgfTsKLQkJNDlFRUNGMDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxv
YXQzMkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUY0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5jcHAgKi87IH07
Ci0JCTQ5RUVDRjAzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjUxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi87IH07Ci0JCTQ5RUVDRjA0MTA1MDcwQzQwMDA5
OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5j
cHAgKi87IH07Ci0JCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY3MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDYxMDUwNzBD
NDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFy
cmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNF
RjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MTZBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwODEw
NTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1Vp
bnQ4QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50
OEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUVFQ0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlFRUNGMEExMDUwNzBDNDAwMDk5
RkFCIC8qIEpTVWludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXku
Y3BwICovOyB9OwotCQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkQx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMEMxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRkUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWlu
dDE2QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwRDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50
MTZBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLzsgfTsKLQkJNDlF
RUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjE5MTA1MDcyRjMwMDA5
OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi87IH07Ci0JCTQ5RUVDRjFDMTA1MDcyRjMw
MDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGMUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDlFRUQxNDIxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVF
RDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsg
fTsKIAkJNDlFRUQxNDMxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQx
M0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9Owog
CQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQx
M0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLzsg
fTsKQEAgLTE4MzEsOCArMTgxMCw2IEBACiAJCTZFNjdEMkE5MTI4MEU4QkQwMDg3NThGNyAvKiBF
eHRlbnNpb25zM0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFNjdEMkE4MTI4MEU4QkQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0QuaCAqLzsgfTsKIAkJ
NkU4NEU5RTAxNzY2OEJFRTAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODRFOURFMTc2NjhCQUQwMDgxNUI2
OCAvKiBSYXN0ZXJTaGFwZS5jcHAgKi87IH07CiAJCTZFODRFOUUxMTc2NjhCRjEwMDgxNUI2OCAv
KiBSYXN0ZXJTaGFwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkU4NEU5REYxNzY2OEJBRDAwODE1QjY4IC8qIFJhc3RlclNoYXBlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNkVCQzVFQUYxMzhCNTBG
MjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0
NjRBcnJheS5jcHAgKi87IH07Ci0JCTZFQkM1RUIwMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0
NjRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi87IH07CiAJCTZF
QkYwRTQ4MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNDUxMkE4OTI2MTAwREIx
NzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi87IH07CiAJCTZFQkYwRTQ5MTJBODkyNjEwMERC
MTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFQkYwRTQ2MTJBODkyNjEwMERCMTcwOSAvKiBPRVNUZXh0dXJlRmxv
YXQuaCAqLzsgfTsKIAkJNkVCRjBFNTQxMkE4OTI5ODAwREIxNzA5IC8qIFdlYkdMRXh0ZW5zaW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYw
RTUyMTJBODkyOTgwMERCMTcwOSAvKiBXZWJHTEV4dGVuc2lvbi5jcHAgKi87IH07CkBAIC0yNTkz
LDcgKzI1NzAsNiBAQAogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRF
dmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1
RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9OwogCQk4
NjFDMkVBNDEzRkI0RkREMDAwNjJBQkIgLyogRG9jdW1lbnRMb2FkVGltaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUEzMTNGQjRGREQw
MDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3BwICovOyB9OwogCQk4NjFDMkVBNjEzRkI0
RkZGMDAwNjJBQkIgLyogUmVzb3VyY2VMb2FkVGltaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MUMyRUE1MTNGQjRGRkYwMDA2MkFCQiAvKiBS
ZXNvdXJjZUxvYWRUaW1pbmcuY3BwICovOyB9OwotCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEg
LyogSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjQzRDAwMTFCQzMxRjcwMENDMDA2QSAvKiBKU0FycmF5QnVm
ZmVyVmlld0hlbHBlci5oICovOyB9OwogCQk4NjUxMkVERTE1NEEyQUVGMDBBOTA0MjYgLyogUGVy
Zm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQjE1NEEyQUVFMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5jcHAgKi87IH07CiAJCTg2NTEyRURGMTU0QTJBRUYwMEE5MDQyNiAvKiBQ
ZXJmb3JtYW5jZVJlc291cmNlVGltaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NjUxMkVEQzE1NEEyQUVGMDBBOTA0MjYgLyogUGVyZm9ybWFuY2VS
ZXNvdXJjZVRpbWluZy5oICovOyB9OwogCQk4NkJBNzY2RTE2NjQyN0E4MDA1QkU1RDEgLyogRnJh
bWVMb2FkUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkJBNzY2RDE2NjQyN0E4MDA1QkU1RDEgLyogRnJhbWVMb2FkUmVxdWVzdC5jcHAg
Ki87IH07CkBAIC0yNzA3LDggKzI2ODMsNiBAQAogCQk5MDAxNzc0MTEyRTAzNDc4MDA2NDg0NjIg
LyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0UxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaCAqLzsgfTsKIAkJOTAwMTc4ODAxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmNwcCAqLzsgfTsKIAkJOTAwMTc4ODExMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTAwMTc4N0YxMkUwMzcwNzAwNjQ4NDYyIC8qIEpTT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oICovOyB9OwotCQk5MTA4OUQzMjE0QzMzNjAwMDA1QUZDNDkgLyogSlNVaW50OENs
YW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTEwODlEMzAxNEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLzsg
fTsKLQkJOTEwODlEMzMxNEMzMzYwNTAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTEwODlEMkYx
NEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovOyB9OwogCQk5MzAy
QjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQ
YWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdy
b3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAy
QjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8q
IFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDY1OSw3ICs0NjMzLDYgQEAKIAkJQkMyNzRC
MkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyNzRCMkUxNDBFQkVCMjAw
RUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovOyB9OwogCQlCQzI3NEIzMTE0
MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc0QjMwMTQwRUJFRDgwMEVB
REZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovOyB9OwogCQlCQzI3NUI3OTEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzI3NUI3ODExQzVEMUMzMDBDOTIwNkMg
LyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi87IH07Ci0JCUJDMjc1Q0IzMTFDNUU4NUMwMEM5
MjA2QyAvKiBKU0FycmF5QnVmZmVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjc1Q0IyMTFDNUU4NUMwMEM5MjA2QyAvKiBKU0FycmF5
QnVmZmVyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8qIENv
bG9ySW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMjk5MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi87
IH07CiAJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY0QjE0
MEYxQTY1MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovOyB9OwogCQlCQzJDQkY3
QjE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3QTE0MEYxRDU4MDAzODc5
QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi87IH07CkBAIC02NDg0LDYgKzY0NTcsOCBA
QAogCQkwQzNGMUY1OTEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBDNDUzNDI1MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xVbmlmb3Jt
TG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQzQ1MzQyNjEwQ0RC
QkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMUE1NEUwRjM5
MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1DQUZpbHRlcnMuaDsg
cGF0aCA9IGNhL1BsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVyc01hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBsYXRmb3JtQ0FGaWx0ZXJz
TWFjLm1tOyBwYXRoID0gY2EvbWFjL1BsYXRmb3JtQ0FGaWx0ZXJzTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNzE0MCwxMiArNzExNSw2IEBACiAJCTJFNzU4NDFDMTI3NzlB
REEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgcGF0aCA9IGZpbGVhcGkv
RmlsZVJlYWRlckxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
RTk0RjQzOTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaWxlUmVhZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOTdDQ0U3MTI5MzlDQjgwMEM1QzhGRiAvKiBEYXRh
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEYXRhVmlldy5j
cHA7IHBhdGggPSBjYW52YXMvRGF0YVZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRGF0YVZpZXcuaDsgcGF0aCA9IGNhbnZhcy9EYXRhVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYg
LyogRGF0YVZpZXcuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERhdGFWaWV3LmlkbDsgcGF0
aCA9IGNhbnZhcy9EYXRhVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJF
OTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGF0YVZpZXdDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRTk3Q0U2RDEyOTNBRDZCMDBDNUM4RkYgLyogSlNEYXRh
Vmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RhdGFWaWV3
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU5N0NFNkUxMjkzQUQ2QjAwQzVD
OEZGIC8qIEpTRGF0YVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
YXRhVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUE3NjgwMzBGRTcxMjY0
MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vy
cy9Xb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkVCNEJDRDAxMjFGMDNFMzAwRUM0ODg1IC8qIEJsb2JSZXNvdXJjZUhhbmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iUmVzb3VyY2VIYW5kbGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUI0QkNEMTEyMUYwM0UzMDBFQzQ4ODUg
LyogQmxvYlJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJsb2JSZXNvdXJjZUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY2
MCw4ICs3NjI5LDYgQEAKIAkJNDlCMzc2MEIxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODExMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3
Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbnQ4QXJyYXkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
RnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4NTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFByb2dyYW0uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY3NSw3ICs3NjQyLDYgQEAKIAkJNDlD
N0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJH
TEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUE5MTA0MkQz
MkUwMDA5RDQ0NyAvKiBXZWJHTEJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJHTEJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBXZWJHTEJ1
ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xCdWZmZXIuaWRsOyBwYXRoID0g
Y2FudmFzL1dlYkdMQnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlD
N0I5QUQxMDQyRDMyRTAwMDlENDQ3IC8qIEludDhBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gSW50OEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQ4QXJyYXkuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcgLyogV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJH
TEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIFdl
YkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xG
cmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QjAxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMRnJh
bWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaWRs
OyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzczMSwzMCArNzY5Nyw2IEBACiAJCTQ5RUNFQjY0MTQ5OTc5MEQwMENERDNB
NCAvKiBGaWx0ZXJPcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RmlsdGVyT3BlcmF0aW9uLmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVDRUI2NTE0OTk3OTBEMDBDREQzQTQgLyogRmls
dGVyT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
aWx0ZXJPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNFQjY2MTQ5OTc5MEQwMENERDNBNCAv
KiBGaWx0ZXJPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZp
bHRlck9wZXJhdGlvbnMuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyT3BlcmF0aW9ucy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0RDOTEwNTAzQzIzMDAwOTlGQUIgLyogQXJy
YXlCdWZmZXJWaWV3LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBBcnJheUJ1ZmZlclZpZXcu
aWRsOyBwYXRoID0gY2FudmFzL0FycmF5QnVmZmVyVmlldy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQXJyYXlCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0Fy
cmF5QnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0YxMDUw
M0MyMzAwMDk5RkFCIC8qIEZsb2F0MzJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
RmxvYXQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9GbG9hdDMyQXJyYXkuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REMjEwNTAzQzIzMDAwOTlGQUIgLyogSW50MzJB
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gSW50MzJBcnJheS5pZGw7IHBhdGggPSBj
YW52YXMvSW50MzJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
REQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBJbnQxNkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5h
bWUgPSBJbnQxNkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9JbnQxNkFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQ4
QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFVpbnQ4QXJyYXkuaWRsOyBwYXRoID0g
Y2FudmFzL1VpbnQ4QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0REQjEwNTAzQzIzMDAwOTlGQUIgLyogVWludDMyQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IFVpbnQzMkFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9VaW50MzJBcnJheS5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBV
aW50MTZBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gVWludDE2QXJyYXkuaWRsOyBw
YXRoID0gY2FudmFzL1VpbnQxNkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJheUJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUYzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0FycmF5
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXJyYXlCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjQxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTRmxvYXQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRmxvYXQzMkFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlF
RUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmxvYXQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQzMkFycmF5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpT
SW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludDMyQXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTSW50MTZBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0ludDE2QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSW50MTZBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDhBcnJheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQ4
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNVaW50OEFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUZDMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU1VpbnQzMkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTVWludDMyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VG
RDEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1VpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVWludDE2QXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50
MTZBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQxNkFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjE5MTA1MDcyRjMwMDA5OUZB
QiAvKiBKU0FycmF5QnVmZmVyVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FycmF5QnVmZmVyVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQw
MDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjQ2LDkgKzgxODgsNiBAQAogCQk2RTY3RDJB
ODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RTg0RTlERTE3NjY4QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFzdGVyU2hhcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RTg0RTlERjE3NjY4QkFEMDA4MTVCNjggLyogUmFzdGVyU2hhcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmFzdGVyU2hhcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkVCQzVEODAxMzhCNEM0RTAwQTBDRjhBIC8qIEZsb2F0
NjRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gRmxvYXQ2NEFycmF5LmlkbDsgcGF0
aCA9IGNhbnZhcy9GbG9hdDY0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2RUJDNUVBRDEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9hdDY0QXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGbG9hdDY0QXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2RUJDNUVBRTEzOEI1MEYyMDBBMENGOEEgLyogSlNGbG9h
dDY0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGbG9hdDY0QXJy
YXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNDUxMkE4OTI2MTAwREIx
NzA5IC8qIE9FU1RleHR1cmVGbG9hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBPRVNUZXh0dXJlRmxvYXQuY3BwOyBwYXRoID0gY2FudmFzL09FU1RleHR1cmVGbG9h
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ2MTJBODkyNjEwMERC
MTcwOSAvKiBPRVNUZXh0dXJlRmxvYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gT0VTVGV4dHVyZUZsb2F0Lmg7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTQ3MTJBODkyNjEwMERCMTcwOSAvKiBP
RVNUZXh0dXJlRmxvYXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE9FU1RleHR1cmVGbG9h
dC5pZGw7IHBhdGggPSBjYW52YXMvT0VTVGV4dHVyZUZsb2F0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTg5ODYsNyArODkyNSw2IEBACiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3
NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2MUMyRUEzMTNGQjRGREQwMDA2MkFCQiAvKiBEb2N1bWVudExvYWRUaW1pbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkVGltaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxQzJFQTUxM0ZCNEZGRjAwMDYy
QUJCIC8qIFJlc291cmNlTG9hZFRpbWluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZXNvdXJjZUxvYWRUaW1pbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4NjI0M0QwMDExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBcnJheUJ1ZmZlclZpZXdI
ZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1MTJFREIxNTRBMkFFRTAw
QTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NTEyRURDMTU0QTJBRUYwMEE5MDQyNiAvKiBQZXJm
b3JtYW5jZVJlc291cmNlVGltaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODY1MTJFREQxNTRBMkFFRjAwQTkwNDI2IC8qIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTEyMSw5ICs5MDU5LDYgQEAKIAkJOTAw
MTc3M0YxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgbmFtZSA9IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBwYXRoID0gY2Fu
dmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MDAxNzg3RTEyRTAzNzA3MDA2NDg0NjIgLyogSlNPRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMDE3ODdGMTJF
MDM3MDcwMDY0ODQ2MiAvKiBKU09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkxMDg5RDJGMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4
Q2xhbXBlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
VWludDhDbGFtcGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MTA4
OUQzMDE0QzMzNUNEMDA1QUZDNDkgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1VpbnQ4Q2xhbXBlZEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTkxQTM5MDU4MTRDMEY0QjkwMEY2NzkwMSAvKiBVaW50OENsYW1w
ZWRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gVWludDhDbGFtcGVkQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL1Vp
bnQ4Q2xhbXBlZEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIw
QkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExMzUwLDcgKzExMjg1LDYgQEAKIAkJQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzI3NUI3ODExQzVE
MUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkMyNzVDQjIxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZm
ZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBcnJh
eUJ1ZmZlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjk5MzVD
MTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvcklucHV0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyQ0JGN0ExNDBGMUQ1ODAwMzg3
OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTENvbnRleHRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNDAzMyw4ICsxMzk2Nyw2IEBACiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0RE
MyAvKiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAot
CQkJCTQ5RUVDRENDMTA1MDNDMjMwMDA5OUZBQiAvKiBBcnJheUJ1ZmZlci5pZGwgKi8sCi0JCQkJ
NDlFRUNEQzkxMDUwM0MyMzAwMDk5RkFCIC8qIEFycmF5QnVmZmVyVmlldy5pZGwgKi8sCiAJCQkJ
NkU0RTkxQTcxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmNwcCAq
LywKIAkJCQk2RTRFOTFBODEwRjdGQjMxMDBBMjc3OUMgLyogQ2FudmFzQ29udGV4dEF0dHJpYnV0
ZXMuaCAqLywKIAkJCQk0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQu
Y3BwICovLApAQCAtMTQwNTUsOSArMTM5ODcsNiBAQAogCQkJCTQ5NDg0RkJFMTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAy
Q0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCiAJCQkJNDk0ODRGQzAxMDJDRjIz
QzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmggKi8sCi0JCQkJMkU5N0NDRTcxMjkzOUNCODAwQzVD
OEZGIC8qIERhdGFWaWV3LmNwcCAqLywKLQkJCQkyRTk3Q0NFODEyOTM5Q0I4MDBDNUM4RkYgLyog
RGF0YVZpZXcuaCAqLywKLQkJCQkyRTk3Q0NFOTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcu
aWRsICovLAogCQkJCUZCOTEzOTIwMTZBRTRCMEIwMDFGRTY4MiAvKiBET01QYXRoLmggKi8sCiAJ
CQkJRkI5MTM5MjExNkFFNEIwQjAwMUZFNjgyIC8qIERPTVBhdGguaWRsICovLAogCQkJCUEwMjQ1
NzRFMTZDRUFBMjcwMDBFNTY3MSAvKiBFWFREcmF3QnVmZmVycy5jcHAgKi8sCkBAIC0xNDA2Niwx
MSArMTM5OTUsNiBAQAogCQkJCTc3Mjg2OTRCMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMuY3BwICovLAogCQkJCTc3Mjg2OTRDMTRGODg4MjUwMEY0ODREQyAv
KiBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAqLywKIAkJCQk3NzI4Njk0RDE0Rjg4ODI1
MDBGNDg0REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbCAqLywKLQkJCQk0OUVF
Q0RDRjEwNTAzQzIzMDAwOTlGQUIgLyogRmxvYXQzMkFycmF5LmlkbCAqLywKLQkJCQk2RUJDNUQ4
MDEzOEI0QzRFMDBBMENGOEEgLyogRmxvYXQ2NEFycmF5LmlkbCAqLywKLQkJCQk0OUVFQ0RENTEw
NTAzQzIzMDAwOTlGQUIgLyogSW50MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDIxMDUwM0My
MzAwMDk5RkFCIC8qIEludDMyQXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUFEMTA0MkQzMkUwMDA5
RDQ0NyAvKiBJbnQ4QXJyYXkuaWRsICovLAogCQkJCTdFNUQ3QTczMTYxRDNGOEYwMDg5NkMzNCAv
KiBPRVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLywKIAkJCQk3RTVEN0E3NDE2MUQzRjhGMDA4OTZD
MzQgLyogT0VTRWxlbWVudEluZGV4VWludC5oICovLAogCQkJCTkwMDE3NzNEMTJFMDM0NzgwMDY0
ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCAqLywKQEAgLTE0MDg1LDEwICsxNDAw
OSw2IEBACiAJCQkJNzdBMTdBNkUxMkYyODE4MjAwNEUwMkY2IC8qIE9FU1ZlcnRleEFycmF5T2Jq
ZWN0LmNwcCAqLywKIAkJCQk3N0ExN0E2RjEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4QXJy
YXlPYmplY3QuaCAqLywKIAkJCQk3N0ExN0E3MDEyRjI4MTgyMDA0RTAyRjYgLyogT0VTVmVydGV4
QXJyYXlPYmplY3QuaWRsICovLAotCQkJCTQ5RUVDRERFMTA1MDNDMjQwMDA5OUZBQiAvKiBVaW50
MTZBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNEREIxMDUwM0MyMzAwMDk5RkFCIC8qIFVpbnQzMkFy
cmF5LmlkbCAqLywKLQkJCQk0OUVFQ0REODEwNTAzQzIzMDAwOTlGQUIgLyogVWludDhBcnJheS5p
ZGwgKi8sCi0JCQkJOTFBMzkwNTgxNEMwRjRCOTAwRjY3OTAxIC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmlkbCAqLywKIAkJCQlBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogV2ViR0xBY3RpdmVJbmZv
LmggKi8sCiAJCQkJQTdEMjBGM0IxMDdGMzczODAwQTgwMzkyIC8qIFdlYkdMQWN0aXZlSW5mby5p
ZGwgKi8sCiAJCQkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIFdlYkdMQnVmZmVyLmNwcCAq
LywKQEAgLTE2NjUzLDEwICsxNjU3Myw2IEBACiAJCUE4M0I3OTA4MENDQUZGMkIwMDBCMDgyNSAv
KiBIVE1MICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk0
OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5jcHAgKi8sCi0JCQkJNDlF
RUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuaCAqLywKLQkJCQk0OUVFQ0Yx
OTEwNTA3MkYzMDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwICovLAotCQkJCTQ5RUVD
RjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0FycmF5QnVmZmVyVmlldy5oICovLAogCQkJCUJFOEVG
MDNFMTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suY3BwICovLAogCQkJCUJFOEVGMDNG
MTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2suaCAqLywKIAkJCQlCRThFRjA0MDE3MUM4
RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrTGlzdC5jcHAgKi8sCkBAIC0xNjY3MCw4ICsxNjU4
Niw2IEBACiAJCQkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oICovLAogCQkJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCiAJCQkJNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8sCi0JCQkJMkU5N0NFNkQxMjkzQUQ2QjAw
QzVDOEZGIC8qIEpTRGF0YVZpZXcuY3BwICovLAotCQkJCTJFOTdDRTZFMTI5M0FENkIwMEM1QzhG
RiAvKiBKU0RhdGFWaWV3LmggKi8sCiAJCQkJMkUwODg4RDIxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpT
RE9NRm9ybURhdGEuY3BwICovLAogCQkJCTJFMDg4OEQzMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RP
TUZvcm1EYXRhLmggKi8sCiAJCQkJRkI5MTM5MjkxNkFFNEZDMDAwMUZFNjgyIC8qIEpTRE9NUGF0
aC5jcHAgKi8sCkBAIC0xNjY4NiwxMCArMTY2MDAsNiBAQAogCQkJCTZFQkYwRTc1MTJBOTg2ODgw
MERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8sCiAJCQkJNzcyODY5ODExNEZEOUFEQTAw
RjQ4NERDIC8qIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCAqLywKIAkJCQk3NzI4
Njk4MjE0RkQ5QURBMDBGNDg0REMgLyogSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCAq
LywKLQkJCQk0OUVFQ0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwICov
LAotCQkJCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheS5oICovLAot
CQkJCTZFQkM1RUFEMTM4QjUwRjIwMEEwQ0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5jcHAgKi8sCi0J
CQkJNkVCQzVFQUUxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJ
QkM5N0U0MTAxMDkxNTRGQTAwMTBEMzYxIC8qIEpTSFRNTEFsbENvbGxlY3Rpb24uY3BwICovLAog
CQkJCUJDOTdFNDExMTA5MTU0RkEwMDEwRDM2MSAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmggKi8s
CiAJCQkJMUE0QTJERUIwQTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuY3Bw
ICovLApAQCAtMTY4NDMsMTIgKzE2NzUzLDYgQEAKIAkJCQlFNDQ2MTQwRjBDRDY4MjY5MDBGQURB
NzUgLyogSlNIVE1MVmlkZW9FbGVtZW50LmggKi8sCiAJCQkJQTc3OTc5MjQwRDZCOUU2NDAwMzg1
MUI5IC8qIEpTSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkg
LyogSlNJbWFnZURhdGEuaCAqLywKLQkJCQk0OUVFQ0VGODEwNTA3MEM0MDAwOTlGQUIgLyogSlNJ
bnQxNkFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNJbnQx
NkFycmF5LmggKi8sCi0JCQkJNDlFRUNFRjYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJh
eS5jcHAgKi8sCi0JCQkJNDlFRUNFRjcxMDUwNzBDNDAwMDk5RkFCIC8qIEpTSW50MzJBcnJheS5o
ICovLAotCQkJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgKi8s
Ci0JCQkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmggKi8sCiAJCQkJ
Q0QyN0Y2RTIxNDU3Njc1ODAwNzgyMDdEIC8qIEpTTWVkaWFDb250cm9sbGVyLmNwcCAqLywKIAkJ
CQlDRDI3RjZFMzE0NTc2NzU4MDA3ODIwN0QgLyogSlNNZWRpYUNvbnRyb2xsZXIuaCAqLywKIAkJ
CQlFNDQ2MTQxMDBDRDY4MjY5MDBGQURBNzUgLyogSlNNZWRpYUVycm9yLmNwcCAqLywKQEAgLTE2
ODgxLDE0ICsxNjc4NSw2IEBACiAJCQkJRTQ0NjE0MTMwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGlt
ZVJhbmdlcy5oICovLAogCQkJCTA3ODQ2MzQwMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZl
bnQuY3BwICovLAogCQkJCTA3ODQ2MzQxMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZlbnQu
aCAqLywKLQkJCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAg
Ki8sCi0JCQkJNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDE2QXJyYXkuaCAqLywK
LQkJCQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgKi8sCi0J
CQkJNDlFRUNFRkQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDMyQXJyYXkuaCAqLywKLQkJCQk0
OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmNwcCAqLywKLQkJCQk0OUVF
Q0VGQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5LmggKi8sCi0JCQkJOTEwODlEMkYx
NEMzMzVDRDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJyYXkuY3BwICovLAotCQkJCTkxMDg5
RDMwMTRDMzM1Q0QwMDVBRkM0OSAvKiBKU1VpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMTVD
NzcwOTIxMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5jcHAgKi8sCiAJCQkJMTVD
NzcwOTExMDBEM0NBODAwNUJBMjY3IC8qIEpTVmFsaWRpdHlTdGF0ZS5oICovLAogCQkJCUJFOEVG
MDQ2MTcxQzkwMTQwMDlCNDhDMyAvKiBKU1ZpZGVvVHJhY2suY3BwICovLApAQCAtMTg3OTAsNiAr
MTg2ODYsOCBAQAogCQkJCUE3NUU0OTc1MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwICovLAogCQkJCUE3NUU0OTc0MTA3NTJBQ0IwMEM5Qjg5NiAvKiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCAqLywKIAkJCQlCQzUzRDkxMDExNDMxMENDMDAwRDgxN0UgLyogV2Vi
Q29yZUpTQ2xpZW50RGF0YS5oICovLAorCQkJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLAorCQkJCTBGMDk5RDA3MTdCOTY4QTEw
MEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLywKIAkJCQlFMUE2NDNG
QzBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJ
RTFBNjQzRjEwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaCAqLywK
IAkJCQlGMzQ3NDJFNjEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIu
Y3BwICovLApAQCAtMTg4NDUsOCArMTg3NDMsNiBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURE
NDkgLyogQ3VzdG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQlCQzI3NUNCMjExQzVFODVDMDBDOTIwNkMgLyogSlNBcnJheUJ1ZmZlckN1c3RvbS5jcHAg
Ki8sCi0JCQkJODYyNDNEMDAxMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmggKi8sCiAJCQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5j
cHAgKi8sCiAJCQkJQ0RERTY5MUQxNzFERjg5MTAwQTQ0RDg5IC8qIEpTQXVkaW9CdWZmZXJDdXN0
b20uY3BwICovLAogCQkJCUZERUFBQUVGMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQnVmZmVy
U291cmNlTm9kZUN1c3RvbS5jcHAgKi8sCkBAIC0xODg3Miw3ICsxODc2OCw2IEBACiAJCQkJQUQ3
MjZGRUExNkQ5RjQwQjAwM0E0RTZEIC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5oICov
LAogCQkJCUUxQUQxNEU3MTI5NzM3NzQwMEFDQTk4OSAvKiBKU0NTU1N0eWxlUnVsZUN1c3RvbS5j
cHAgKi8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8qIEpTQ1NTVmFsdWVDdXN0b20u
Y3BwICovLAotCQkJCTJFOTdDQ0Y2MTI5M0E0M0EwMEM1QzhGRiAvKiBKU0RhdGFWaWV3Q3VzdG9t
LmNwcCAqLywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCiAJCQkJMzFGQjFBNkIxMjBBNUQ2OTAwREMwMkEw
IC8qIEpTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwICovLAogCQkJCTU5MEUxQjRBMTFFNEVG
NzAwMDY5Rjc4NCAvKiBKU0RldmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwICovLApAQCAt
MjEzMzQsNyArMjEyMjksNiBAQAogCQkJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRh
c2V0RE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MUFDNTk5OTEzMTYzNkU2MDAw
OUE3RTAgLyogRGF0YVRyYW5zZmVySXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODFBQzU5OUEx
MzE2MzZFNjAwMDlBN0UwIC8qIERhdGFUcmFuc2Zlckl0ZW1MaXN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQkyRTk3Q0NFQjEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1NzMyQjBCMTM2QTE2MUQwMDVDOEQ3QyAvKiBEYXRlQ29tcG9uZW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU1QjNEQjYxMjUxRjEyRDAwM0VGMjY5IC8qIERhdGVJbnB1dFR5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ1M0VCNjM3MTU5QzU3MDQwMDAwMUJCNyAvKiBEYXRlVGlt
ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTg0Myw2ICsyMTczNyw3IEBACiAJCQkJODkz
QzQ4MEYxMjQ4QkQzQTAwMkIzRDg2IC8qIEZpbGVFbnRyeVN5bmMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3NkQ2QzgzMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlRXJyb3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJFREYzNjlGMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJy
YXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTg4QTkwNTE3NTUzQ0Q3MDAwQzc0
RjkgLyogRmlsZUljb25Mb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREJFMTI1MUYx
MkQwMDNFRjI2OSAvKiBGaWxlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM4
NjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyNTIs
OSArMjIxNDcsNiBAQAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0
Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MThGODgwNTBGRjk1N0FGMDA4MEYwNDUg
LyogSlNBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRBMTVFQ0ExMkIwM0Y1
MDAwM0E1ODNBIC8qIEpTQW5hbHlzZXJOb2RlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0Yw
MTEwNTA3MEM0MDAwOTlGQUIgLyogSlNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlFRUNGMUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk4NjI0M0QwMTExQkMzMUY3MDBDQzAwNkEgLyogSlNBcnJheUJ1ZmZlclZpZXdI
ZWxwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBK
U0F0dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEQTE1RTlFMTJCMDNFRTEwMDNBNTgzQSAvKiBK
U0F1ZGlvQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGREY3RTlDNDEzQUMyMURCMDBBNTFF
QUMgLyogSlNBdWRpb0J1ZmZlckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMzE1LDcg
KzIyMjA3LDYgQEAKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJh
c2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2Nzkw
IC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRTk3Q0U3MDEyOTNBRDZC
MDBDNUM4RkYgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2MkE0NTgxMDEx
NDY0NzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQTE1RUQyMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFGQjFBNjYxMjBBNUQzRjAwREMwMkEwIC8qIEpTRGV2aWNlTW90aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzODgsOCArMjIyNzksNiBAQAogCQkJCTg5ODc4
NUIzMTIyQ0EyQTcwMDNBQUJEQSAvKiBKU0ZpbGVTeXN0ZW1DYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDZEQTg0NEUxMjI0QTA3MTAwNjBEMDA2IC8qIEpTRmlsZVdyaXRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODkzQzQ3QkMxMjM4QTBBOTAwMkIzRDg2IC8qIEpTRmlsZVdyaXRlckNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwMzEwNTA3MEM0MDAwOTlGQUIgLyog
SlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTZFQkM1RUIwMTM4QjUwRjIwMEEw
Q0Y4QSAvKiBKU0Zsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjZEOUQyN0IxNEVB
QzA4NjAwOTBENzVFIC8qIEpTRm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDA5RUJE
QzAxNkI3RjM4RTAwQ0JBM0ZDIC8qIEpTRm9udExvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkRBMTVFQUMxMkIwM0VFMTAwM0E1ODNBIC8qIEpTR2Fpbk5vZGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI0OTAsOSArMjIzNzksNiBAQAogCQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBK
U0ltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0EwRTc2REIxMEJGMDU5ODAwQTAyNzZF
IC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTBFNzcxRjEw
QzAwREIxMDBBMDI3NkUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCBpbiBIZWFkZXJzICov
LAotCQkJCTQ5RUVDRjA3MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDE2QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuaCBp
biBIZWFkZXJzICovLAotCQkJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0ludDhBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2
YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg2NjI5RDMwOURBMkI0ODAw
OTYzM0E1IC8qIEpTS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RjQ1NDMw
RjdDM0I1RjAwRDdDMUZCIC8qIEpTTGF6eUV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMjI3NDIsMTAgKzIyNjI4LDYgQEAKIAkJCQlFMTdCNDkyMTE2QTlCOEZGMDAxQzg4MzkgLyog
SlNUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNzUwRDVEMEE5MERFRTEw
MDBGRjIxNSAvKiBKU1RyZWVXYWxrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NjYyOUNGMDlE
QTJCNDcwMDk2MzNBNSAvKiBKU1VJRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBE
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU1VpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTEwODlEMzIxNEMzMzYwMDAwNUFGQzQ5IC8qIEpTVWludDhDbGFtcGVkQXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBQTRGQUQyMTc1RDVDQjMwMDc0Mzg3MyAvKiBKU1VJ
UmVxdWVzdEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNUM3NzA5MzEwMEQzQ0E4MDA1QkEy
NjcgLyogSlNWYWxpZGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRThFRjA0QjE3MUM5
MDE0MDA5QjQ4QzMgLyogSlNWaWRlb1RyYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NzQ1LDcg
KzI0NjI3LDYgQEAKIAkJCQk5N0JDNkEyRjE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2VUaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMzExNTA1RjA4MTAwMUI3NEFDIC8qIERh
dGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0NjQxRDExRDdGNDE2MDA2
NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3
Q0NFQTEyOTM5Q0I4MDBDNUM4RkYgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU3MzJCMEExMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUY1NUIzREI1MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY1NUIzREI3MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUlu
cHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDAzLDkgKzI1Mjg0LDYgQEAKIAkJCQkx
QzgxQkEwOTBFOTczNDgzMDAyNjZFMDcgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVDOTEyQjAzRjUwMDAzQTU4M0EgLyogSlNB
bmFseXNlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5
RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMyNzVDQjMxMUM1
RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNDlFRUNGMUIxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ2QkMwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUU5RDEyQjAzRUUxMDAzQTU4M0EgLyogSlNB
dWRpb0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDg1LDggKzI1MzYzLDYgQEAKIAkJ
CQkxQUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNTlERDY5QTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFi
YXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0U2RjEyOTNBRDZCMDBDNUM4RkYg
LyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkyRTk3Q0NGNzEyOTNBNDNBMDBD
NUM4RkYgLyogSlNEYXRhVmlld0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1
NzEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVEMTEy
QjAzRjk0MDAzQTU4M0EgLyogSlNEZWxheU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTU1
OCw4ICsyNTQzNCw2IEBACiAJCQkJODk4Nzg1RjQxMjJFMUVBQzAwM0FBQkRBIC8qIEpTRmlsZVJl
YWRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk4Nzg1QjIxMjJDQTJBNzAwM0FBQkRB
IC8qIEpTRmlsZVN5c3RlbUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5M0M0N0JC
MTIzOEEwQTkwMDJCM0Q4NiAvKiBKU0ZpbGVXcml0ZXJDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFQ0YwMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNkVCQzVFQUYxMzhCNTBGMjAwQTBDRjhBIC8qIEpTRmxvYXQ2NEFy
cmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2RDlEMjdDMTRFQUMwODYwMDkwRDc1RSAvKiBK
U0ZvY3VzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFQUIxMkIwM0VFMTAwM0E1
ODNBIC8qIEpTR2Fpbk5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU4MERBNjMwRTlDNDcw
MzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTYxOCw2
ICsyNTQ5Miw3IEBACiAJCQkJQTYxNDhBNzgxMkU0MUUzQjAwNDRBNzg0IC8qIEpTSFRNTEtleWdl
bkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCMjEwQTFDRTYzQjAwQjQyQjI1
IC8qIEpTSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUIyMzBB
MUNFNjNCMDBCNDJCMjUgLyogSlNIVE1MTGVnZW5kRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjA5OUQwODE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTJBQjI1MEExQ0U2M0IwMEI0MkIyNSAvKiBK
U0hUTUxMSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdCMTAwQTE5RDYwNjAw
N0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQUQx
MzlCMTI5NUQ5MjYwMEFDQTk4OSAvKiBKU0hUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1NjcyLDkgKzI1NTQ3LDYgQEAKIAkJCQlGMzE2Mzk2RTEzMjk0ODc2MDBB
NjQ5Q0IgLyogSlNJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
N0EwRTc3MUUxMEMwMERCMTAwQTAyNzZFIC8qIEpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdBNzRFQ0JEMTAxODM5REEwMEJGOTM5RSAvKiBKU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YwNjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNJbnQxNkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVD
RjA0MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0ludDMyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNDlDN0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFDNUZBRUQxMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3JpcHRDYWxsRnJh
bWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM1RkFFRTcwRENGREE2ODAwRDU4Rjc4IC8qIEpT
SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlE
NDA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjU5NTYsMTAgKzI1ODI4LDYgQEAKIAkJCQkxQTc1MEQ1QzBBOTBERUUxMDAwRkYyMTUgLyog
SlNUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNkJCNzk0MENFOTFFNjgwMDUx
MkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5
RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0
OUVFQ0YwQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MTZBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFQ0YwQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50MzJBcnJheS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNVaW50OEFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkxMDg5RDMzMTRDMzM2MDUwMDVBRkM0OSAvKiBKU1Vp
bnQ4Q2xhbXBlZEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBQTRGQUQzMTc1RDVDQjMw
MDc0Mzg3MyAvKiBKU1VJUmVxdWVzdEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1Qzc3
MDk0MTAwRDNDQTgwMDVCQTI2NyAvKiBKU1ZhbGlkaXR5U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkU4RUYwNEExNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFjay5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3Js
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJX
b3JsZC5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01XcmFwcGVyV29ybGQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBD
U1NWYWx1ZTsKIGNsYXNzIEpTRE9NV3JhcHBlcjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7CiAK
LXR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgSlNDOjpXZWFrPEpTRE9NV3JhcHBlcj4gPiBET01PYmpl
Y3RXcmFwcGVyTWFwOwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBKU0M6OldlYWs8SlNDOjpKU09i
amVjdD4gPiBET01PYmplY3RXcmFwcGVyTWFwOwogdHlwZWRlZiBKU0M6OldlYWtHQ01hcDxTdHJp
bmdJbXBsKiwgSlNDOjpKU1N0cmluZywgUHRySGFzaDxTdHJpbmdJbXBsKj4gPiBKU1N0cmluZ0Nh
Y2hlOwogCiBjbGFzcyBET01XcmFwcGVyV29ybGQgOiBwdWJsaWMgUmVmQ291bnRlZDxET01XcmFw
cGVyV29ybGQ+IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZm
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXJyYXlCdWZmZXJDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
QXJyYXlCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDxy
dW50aW1lL0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLUVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU0FycmF5
QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpOwotCi0gICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+IDApCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7IC8vIE5hTi8raW5mLy1pbmYgcmV0dXJucyAwLCB0aGlzIGlzIGludGVuZGVkIGJ5IFdl
YklETAotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChsZW5ndGggPj0g
MCkKLSAgICAgICAgYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obGVuZ3RoKSwgMSk7Ci0gICAgaWYgKCFidWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIg
c2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmds
b2JhbE9iamVjdCgpLCBidWZmZXIuZ2V0KCkpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1
ZmZlclZpZXdIZWxwZXIuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZpZXdIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwy
ODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyX2gKLSNkZWZpbmUgSlNB
cnJheUJ1ZmZlclZpZXdIZWxwZXJfaAotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcmdM
aXN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUJhc2UuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgY29uc3QgY2hhciogdG9vTGFyZ2VTaXplID0gIlNpemUgaXMgdG9vIGxhcmdl
IChvciBpcyBuZWdhdGl2ZSkuIjsKLQotdGVtcGxhdGU8Y2xhc3MgQywgdHlwZW5hbWUgVD4KLWJv
b2wgY29weVR5cGVkQXJyYXlCdWZmZXIoQyogdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIHNvdXJj
ZSwgdW5zaWduZWQgc291cmNlTGVuZ3RoLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgQXJyYXlC
dWZmZXJWaWV3OjpWaWV3VHlwZSBzb3VyY2VUeXBlID0gc291cmNlLT5nZXRUeXBlKCk7Ci0gICAg
QVNTRVJUKHNvdXJjZVR5cGUgIT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlRGF0YVZpZXcpOwotCi0g
ICAgaWYgKHRhcmdldC0+Z2V0VHlwZSgpID09IHNvdXJjZVR5cGUpIHsKLSAgICAgICAgaWYgKCF0
YXJnZXQtPnNldChzdGF0aWNfY2FzdDxDKj4oc291cmNlKSwgb2Zmc2V0KSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCF0
YXJnZXQtPmNoZWNrSW5ib3VuZERhdGEob2Zmc2V0LCBzb3VyY2VMZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHNvdXJjZVR5cGUpIHsKLSAgICBjYXNlIEFycmF5
QnVmZmVyVmlldzo6VHlwZUludDg6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
b3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChU
KShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRl
bShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVp
bnQ4OgotICAgIGNhc2UgQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDhDbGFtcGVkOgotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8
dW5zaWduZWQgY2hhcj4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChp
ICsgb2Zmc2V0LCAoVCkoc3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8c2lnbmVkIHNob3J0PiAq
Pihzb3VyY2UpLT5pdGVtKGkpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlCdWZm
ZXJWaWV3OjpUeXBlVWludDE2OgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291
cmNlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0YXJnZXQtPnNldChpICsgb2Zmc2V0LCAoVCko
c3RhdGljX2Nhc3Q8VHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+ICo+KHNvdXJjZSktPml0
ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJ
bnQzMjoKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytp
KQotICAgICAgICAgICAgdGFyZ2V0LT5zZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5
cGVkQXJyYXlCYXNlPGludD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQzMjoKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNvdXJjZUxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGFyZ2V0LT5z
ZXQoaSArIG9mZnNldCwgKFQpKHN0YXRpY19jYXN0PFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGlu
dD4gKj4oc291cmNlKS0+aXRlbShpKSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5
QnVmZmVyVmlldzo6VHlwZUZsb2F0MzI6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQs
IChUKShzdGF0aWNfY2FzdDxUeXBlZEFycmF5QmFzZTxmbG9hdD4gKj4oc291cmNlKS0+aXRlbShp
KSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5QnVmZmVyVmlldzo6VHlwZUZsb2F0
NjQ6Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIHRhcmdldC0+c2V0KGkgKyBvZmZzZXQsIChUKShzdGF0aWNfY2FzdDxUeXBl
ZEFycmF5QmFzZTxkb3VibGU+ICo+KHNvdXJjZSktPml0ZW0oaSkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDLCB0eXBlbmFtZSBUPgotYm9vbCBzZXRXZWJHTEFycmF5
V2l0aFR5cGVkQXJyYXlBcmd1bWVudChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgQyogaW1wbCkKLXsK
LSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBhcnJheSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4
ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFycmF5KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBcnJheUJ1ZmZlclZpZXc6OlZpZXdUeXBlIGFycmF5VHlwZSA9IGFycmF5LT5nZXRU
eXBlKCk7Ci0gICAgaWYgKGFycmF5VHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmll
dykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDIpCi0gICAgICAgIG9mZnNldCA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09i
amVjdChleGVjLT5hcmd1bWVudCgwKSktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoIShjb3B5VHlwZWRBcnJheUJ1
ZmZlcjxDLCBUPihpbXBsLCBhcnJheS5nZXQoKSwgbGVuZ3RoLCBvZmZzZXQpKSkKLSAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbmRleCBpcyBvdXQgb2Yg
cmFuZ2UuIikpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIEMsIHR5
cGVuYW1lIFQ+Ci1KU0M6OkpTVmFsdWUgc2V0V2ViR0xBcnJheUhlbHBlcihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgQyogaW1wbCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkK
LSAgICAgICAgcmV0dXJuIEpTQzo6dGhyb3dFcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBpZiAoc2V0V2ViR0xBcnJheVdpdGhUeXBlZEFycmF5
QXJndW1lbnQ8QywgVD4oZXhlYywgaW1wbCkpCi0gICAgICAgIC8vIHZvaWQgc2V0KGluIFdlYkdM
PD5BcnJheSBhcnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICBpZiAoZXhlYy0+YXJndW1lbnQo
MCkuaXNPYmplY3QoKSkgewotICAgICAgICAvLyB2b2lkIHNldChpbiBzZXF1ZW5jZTxsb25nPiBh
cnJheSwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgICAgIEpTQzo6
SlNPYmplY3QqIGFycmF5ID0gSlNDOjphc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAg
ICAgIHVpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPT0gMikKLSAgICAgICAgICAgIG9mZnNldCA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIo
ZXhlYyk7Ci0gICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmICgh
aW1wbC0+Y2hlY2tJbmJvdW5kRGF0YShvZmZzZXQsIGxlbmd0aCkpCi0gICAgICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkluZGV4IGlzIG91dCBvZiByYW5n
ZS4iKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBhcnJh
eS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKLSAgICAg
ICAgICAgICAgICBpbXBsLT5zZXQoaSArIG9mZnNldCwgdi50b051bWJlcihleGVjKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgp
OwotICAgIH0KLQotICAgIHJldHVybiBKU0M6OnRocm93VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlk
IGFyZ3VtZW50Iik7Ci19Ci0KLS8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgWFhYQXJyYXlD
b25zdHJ1Y3RvcnMuCi0vLyBJZiB0aGlzIHJldHVybnMgMCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUg
dGhyb3duIGEgSmF2YVNjcmlwdCBleGNlcHRpb24uCi10ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFt
ZSBUPgotUGFzc1JlZlB0cjxDPiBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoVHlwZWRBcnJh
eUFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+IHNvdXJjZSA9IHRvQXJyYXlCdWZmZXJWaWV3KGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBcnJheUJ1ZmZlclZpZXc6
OlZpZXdUeXBlIHNvdXJjZVR5cGUgPSBzb3VyY2UtPmdldFR5cGUoKTsKLSAgICBpZiAoc291cmNl
VHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVEYXRhVmlldykKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICB1aW50MzJfdCBsZW5ndGggPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSktPmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7
Ci0gICAgUmVmUHRyPEM+IGFycmF5ID0gQzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgpOwot
ICAgIGlmICghYXJyYXkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQot
Ci0gICAgaWYgKCEoY29weVR5cGVkQXJyYXlCdWZmZXI8QywgVD4oYXJyYXkuZ2V0KCksIHNvdXJj
ZS5nZXQoKSwgbGVuZ3RoLCAwKSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGFycmF5OwotfQotCi0vLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2Vk
IGJ5IFhYWEFycmF5Q29uc3RydWN0b3JzLgotLy8gSWYgdGhpcyByZXR1cm5zIDAsIGl0IHdpbGwg
YWxyZWFkeSBoYXZlIHRocm93biBhIEphdmFTY3JpcHQgZXhjZXB0aW9uLgotdGVtcGxhdGU8Y2xh
c3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3
V2l0aEFycmF5QnVmZmVyQXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgUmVm
UHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSB0b0FycmF5QnVmZmVyKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1bnNpZ25lZCBv
ZmZzZXQgPSAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMSkgPyBleGVjLT5hcmd1bWVudCgxKS50
b1VJbnQzMihleGVjKSA6IDA7Ci0gICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDIpCi0gICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3Vt
ZW50KDIpLnRvVUludDMyKGV4ZWMpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoKGJ1ZmZlci0+
Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAlIHNpemVvZihUKSkgewotICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWlu
dXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZS4i
KSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBsZW5ndGggPSAo
YnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZzZXQpIC8gc2l6ZW9mKFQpOwotICAgIH0KLSAgICBS
ZWZQdHI8Qz4gYXJyYXkgPSBDOjpjcmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAg
aWYgKCFhcnJheSkKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8Y2xh
c3MgQywgdHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8Qz4gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIFRoZXJlIGFyZSAzIGNvbnN0cnVjdG9y
czoKLSAgICAvLwotICAgIC8vICAxKSAoaW4gaW50IHNpemUpCi0gICAgLy8gIDIpIChpbiBBcnJh
eUJ1ZmZlciBidWZmZXIsIFtPcHRpb25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlvbmFsXSBpbiB1
bnNpZ25lZCBpbnQgbGVuZ3RoKQotICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4pIC0gVGhpcyBl
bmRzIHVwIGJlaW5nIGEgSlMgImFycmF5LWxpa2UiIG9iamVjdAotICAgIC8vICAgIAotICAgIC8v
IEZvciB0aGUgMCBhcmdzIGNhc2UsIGp1c3QgY3JlYXRlIGEgemVyby1sZW5ndGggdmlldy4gV2Ug
Y291bGQKLSAgICAvLyBjb25zaWRlciByYWlzaW5nIGEgU3ludGF4RXJyb3IgZm9yIHRoaXMgY2Fz
ZSwgYnV0IG5vdCBhbGwKLSAgICAvLyBKYXZhU2NyaXB0IERPTSBiaW5kaW5ncyBjYW4gZGlzdGlu
Z3Vpc2ggYmV0d2VlbiAibmV3Ci0gICAgLy8gPFR5cGU+QXJyYXkoKSIgYW5kIHdoYXQgb2NjdXJz
IHdoZW4gYSBwcmV2aW91c2x5LWNvbnN0cnVjdGVkCi0gICAgLy8gQXJyYXlCdWZmZXJWaWV3IGlz
IHJldHVybmVkIHRvIEphdmFTY3JpcHQ7IGUuZy4sIGZyb20KLSAgICAvLyAiYXJyYXkuc3Vic2V0
KCkiLgotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4g
Qzo6Y3JlYXRlKDApOwotICAgIAotICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSkg
ewotICAgICAgICAvLyBJbnZhbGlkIGZpcnN0IGFyZ3VtZW50Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICBSZWZQdHI8Qz4gdmlldyA9IGNvbnN0cnVj
dEFycmF5QnVmZmVyVmlld1dpdGhBcnJheUJ1ZmZlckFyZ3VtZW50PEMsIFQ+KGV4ZWMpOwotICAg
ICAgICBpZiAodmlldykKLSAgICAgICAgICAgIHJldHVybiB2aWV3OwotICAgIAotICAgICAgICB2
aWV3ID0gY29uc3RydWN0QXJyYXlCdWZmZXJWaWV3V2l0aFR5cGVkQXJyYXlBcmd1bWVudDxDLCBU
PihleGVjKTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICByZXR1cm4gdmlldzsKLQot
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBzcmNBcnJheSA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50
KDApKTsKLSAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gc3JjQXJyYXktPmdldChleGVjLCBleGVj
LT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIFJl
ZlB0cjxDPiBhcnJheSA9IEM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoKTsKLSAgICAgICAg
aWYgKCFhcnJheSkgewotICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IHNyY0FycmF5LT5nZXQoZXhlYywgaSk7Ci0g
ICAgICAgICAgICBhcnJheS0+c2V0KGksIHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICB9Ci0KLSAgICBpbnQgbGVuZ3RoID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBSZWZQdHI8Qz4gcmVzdWx0OwotICAgIGlmIChs
ZW5ndGggPj0gMCkKLSAgICAgICAgcmVzdWx0ID0gQzo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsZW5ndGgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIHRvb0xhcmdlU2l6ZSkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBKU1R5cGUsIHR5cGVuYW1lIFdlYkNvcmVUeXBl
Pgotc3RhdGljIEpTQzo6SlNWYWx1ZSB0b0pTQXJyYXlCdWZmZXJWaWV3KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJDb3JlVHlwZSogb2Jq
ZWN0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LQotICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJl
bnRXb3JsZChleGVjKSwgb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KLSAgICBl
eGVjLT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChvYmplY3QtPmJ5dGVMZW5ndGgoKSk7
Ci0gICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8SlNUeXBlPihleGVjLCBnbG9iYWxPYmplY3QsIG9i
amVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEpTQXJyYXlC
dWZmZXJWaWV3SGVscGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVk
aW9Db250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0F1ZGlvQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJBdWRpb0J1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNs
dWRlICJKU0F1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnRleHQuaCIKICNpbmNs
dWRlICJKU09mZmxpbmVBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJPZmZsaW5lQXVkaW9Db250
ZXh0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5k
aW5nc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmNwcCIKICNpbmNsdWRl
ICJEaWN0aW9uYXJ5LmNwcCIKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuY3BwIgotI2luY2x1ZGUg
IkpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTQXR0ckN1c3RvbS5jcHAiCiAj
aW5jbHVkZSAiSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0F1ZGlvVHJhY2tM
aXN0Q3VzdG9tLmNwcCIKQEAgLTcwLDcgKzY5LDYgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5jcHAiCiAjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmNwcCIKLSNpbmNsdWRlICJKU0RhdGFWaWV3Q3VzdG9tLmNwcCIKICNpbmNsdWRl
ICJKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0Rl
dmljZU9yaWVudGF0aW9uRXZlbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0
b20uY3BwIgpAQCAtMTcwLDUgKzE2OCw2IEBACiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuY3Bw
IgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmNwcCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiCiAj
aW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAiV29ya2VyU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0Jsb2JDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTQg
QEAKICNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIu
aCIKLSNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkpTRmlsZS5oIgogI2lu
Y2x1ZGUgIldlYktpdEJsb2JCdWlsZGVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3BwCShyZXZpc2lvbiAx
NTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1J1bGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVu
dFdvcmxkKGV4ZWMpLCBydWxlKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdy
YXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBydWxlKTsKICAgICBpZiAod3JhcHBlcikKICAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q1NTVmFsdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODgsNyArODgsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAg
ICAgaWYgKCF2YWx1ZS0+aXNDU1NPTVNhZmUoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
Ci0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29y
bGQoZXhlYyksIHZhbHVlKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB2YWx1ZSk7CiAKICAgICBpZiAod3JhcHBlcikKICAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsy
NiwxMCBAQAogI2luY2x1ZGUgIkpTQ3J5cHRvLmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUv
QXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApA
QCAtNDEsMTIgKzQxLDEyIEBAIEpTVmFsdWUgSlNDcnlwdG86OmdldFJhbmRvbVZhbHVlcyhFeGVj
U3QKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwogCiAgICAgSlNWYWx1ZSBidWZmZXIgPSBleGVjLT5hcmd1bWVudCgw
KTsKLSAgICBBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJW
aWV3KGJ1ZmZlcik7CisgICAgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJWaWV3
ID0gdG9BcnJheUJ1ZmZlclZpZXcoYnVmZmVyKTsKICAgICBpZiAoIWFycmF5QnVmZmVyVmlldykK
ICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgaW1wbCgpLT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LCBl
Yyk7CisgICAgaW1wbCgpLT5nZXRSYW5kb21WYWx1ZXMoYXJyYXlCdWZmZXJWaWV3LmdldCgpLCBl
Yyk7CiAKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lv
biAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDIxIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSA8aGVhcC9TbG90VmlzaXRvci5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1
ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNEYXRhVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90
b3R5cGUuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL051bGxQdHIuaD4KQEAgLTEyOCw2ICsxMzQsMTYgQEAgY2xhc3MgRE9N
U3RyaW5nTGlzdDsKICAgICAgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihh
c09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLCBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwog
ICAgIH0KIAorICAgIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERP
TVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLT52
bSgpLT5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7CisgICAg
fQorICAgIAorICAgIGlubGluZSB2b2lkKiB3cmFwcGVyQ29udGV4dChET01XcmFwcGVyV29ybGQq
IHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKKyAgICB7CisgICAgICAgIHJldHVybiB3b3JsZDsK
KyAgICB9CisKICAgICBpbmxpbmUgSlNET01XcmFwcGVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCosIHZvaWQqKSB7IHJldHVybiAwOyB9CiAgICAgaW5saW5lIGJvb2wg
c2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQqLCB2b2lkKiwgSlNET01XcmFw
cGVyKiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqLCB2b2lkKikgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiwg
dm9pZCosIEpTRE9NV3JhcHBlciopIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzksNiArMTU1LDEz
IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiBkb21PYmplY3QtPndyYXBw
ZXIoKTsKICAgICB9CiAKKyAgICBpbmxpbmUgSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCogd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1
ZmZlcikKKyAgICB7CisgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOworICAg
IH0KKwogICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NV3JhcHBlciogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lciwgdm9pZCogY29udGV4dCkK
ICAgICB7CiAgICAgICAgIGlmICghd29ybGQtPmlzTm9ybWFsKCkpCkBAIC0xNDcsNiArMTcwLDE0
IEBAIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAor
ICAgIGlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdy
YXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIsIHZvaWQqIGNvbnRleHQp
CisgICAgeworICAgICAgICBpZiAoIXdvcmxkLT5pc05vcm1hbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBkb21PYmplY3QtPm1fd3JhcHBlciA9IEpTQzo6UGFzc1dlYWs8
SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsIGNvbnRleHQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBpbmxpbmUgYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21P
YmplY3QsIEpTRE9NV3JhcHBlciogd3JhcHBlcikKICAgICB7CiAgICAgICAgIGlmICghd29ybGQt
PmlzTm9ybWFsKCkpCkBAIC0xNTUsMjQgKzE4NiwzMiBAQCBjbGFzcyBET01TdHJpbmdMaXN0Owog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRE9N
Q2xhc3M+IGlubGluZSBKU0RPTVdyYXBwZXIqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCkKKyAgICBpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCiAgICAgewotICAgICAg
ICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3Js
ZCwgZG9tT2JqZWN0KSkKKyAgICAgICAgaWYgKCF3b3JsZC0+aXNOb3JtYWwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVy
LCB3cmFwcGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgaWYgKEpTQzo6SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KHdvcmxkLCBkb21PYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgICAg
IHJldHVybiB3b3JsZC0+bV93cmFwcGVycy5nZXQoZG9tT2JqZWN0KTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01X
cmFwcGVyV29ybGQqIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIpCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBE
T01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAgewogICAgICAg
ICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFwcGVyT3duZXIod29ybGQsIGRvbU9i
amVjdCk7CiAgICAgICAgIHZvaWQqIGNvbnRleHQgPSB3cmFwcGVyQ29udGV4dCh3b3JsZCwgZG9t
T2JqZWN0KTsKICAgICAgICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9i
amVjdCwgd3JhcHBlciwgb3duZXIsIGNvbnRleHQpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBKU0M6OlBhc3NXZWFrPEpTRE9NV3JhcHBlcj4gcGFzc1dlYWsod3JhcHBlciwgb3duZXIs
IGNvbnRleHQpOworICAgICAgICBKU0M6OlBhc3NXZWFrPEpTQzo6SlNPYmplY3Q+IHBhc3NXZWFr
KHdyYXBwZXIsIG93bmVyLCBjb250ZXh0KTsKICAgICAgICAgd2Vha0FkZCh3b3JsZC0+bV93cmFw
cGVycywgKHZvaWQqKWRvbU9iamVjdCwgcGFzc1dlYWspOwogICAgIH0KIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgSlNET01XcmFwcGVyKiB3cmFwcGVy
KQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQqIHdvcmxkLCBET01D
bGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCiAgICAgewogICAgICAgICBp
ZiAoY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTk1LDcgKzIzNCw3IEBAIGNsYXNzIERPTVN0cmluZ0xp
c3Q7CiAgICAgewogICAgICAgICBpZiAoIWRvbU9iamVjdCkKICAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgICAgICBpZiAoSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGRvbU9iamVjdCkpCisgICAgICAgIGlmIChK
U0M6OkpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhl
YyksIGRvbU9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8V3JhcHBlckNsYXNzPihleGVjLCBnbG9iYWxPYmplY3QsIGRvbU9i
amVjdCk7CiAgICAgfQpAQCAtMzIzLDYgKzM2MiwyNSBAQCBjbGFzcyBET01TdHJpbmdMaXN0Owog
ICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAorICAgIGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIp
CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgaWYgKEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNDOjpKU0FycmF5QnVmZmVyPihleGVj
LCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYnVmZmVyLT5y
ZWYoKTsKKyAgICAgICAgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyID0gSlNDOjpKU0FycmF5
QnVmZmVyOjpjcmVhdGUoZXhlYy0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVj
dHVyZSgpLCBidWZmZXIpOworICAgICAgICBjYWNoZVdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMp
LCBidWZmZXIsIHdyYXBwZXIpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisKKyAg
ICBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAg
IHsKKyAgICAgICAgaWYgKCF2aWV3KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgICAgIHJldHVybiB2aWV3LT53cmFwKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgfQor
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
YXNzUmVmUHRyPFQ+IHB0cikKICAgICB7CkBAIC0zNzYsNiArNDM0LDMyIEBAIGNsYXNzIERPTVN0
cmluZ0xpc3Q7CiAKICAgICBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAKKyAgICBpbmxp
bmUgUGFzc1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9BcnJheUJ1ZmZlclZpZXcoSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0FycmF5QnVmZmVyVmlldyog
d3JhcHBlciA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odmFs
dWUpOworICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXItPmltcGwoKTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvSW50OEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b05hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2YWx1ZSk7IH0K
KyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvSW50MTZBcnJheShKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQx
NkFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6SW50MzJBcnJh
eT4gdG9JbnQzMkFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2
ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NS
ZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1VpbnQ4QXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2YWx1ZSk7
IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1VpbnQ4
Q2xhbXBlZEFycmF5KEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b05hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZhbHVlKTsgfQorICAgIGlubGluZSBQ
YXNzUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVWludDE2QXJyYXkoSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4o
dmFsdWUpOyB9CisgICAgaW5saW5lIFBhc3NSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VaW50
MzJBcnJheShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZp
ZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2YWx1ZSk7IH0KKyAgICBpbmxpbmUgUGFzc1JlZlB0cjxK
U0M6OkZsb2F0MzJBcnJheT4gdG9GbG9hdDMyQXJyYXkoSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZhbHVlKTsg
fQorICAgIGlubGluZSBQYXNzUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b0Zsb2F0NjRBcnJh
eShKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9OYXRpdmVUeXBlZFZpZXc8SlND
OjpGbG9hdDY0QWRhcHRvcj4odmFsdWUpOyB9CisgICAgCisgICAgaW5saW5lIFBhc3NSZWZQdHI8
SlNDOjpEYXRhVmlldz4gdG9EYXRhVmlldyhKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OkpTRGF0YVZpZXcqIHdyYXBwZXIgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpK
U0RhdGFWaWV3Kj4odmFsdWUpOworICAgICAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPnR5cGVkSW1wbCgpOworICAgIH0KKwog
ICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czsKIAogICAgIHRl
bXBsYXRlPD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZpZXdDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YVZp
ZXdDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RhdGFWaWV3Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCi0K
LSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNs
dWRlICJKU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotZW51
bSBEYXRhVmlld0FjY2Vzc1R5cGUgewotICAgIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDMy
LAotICAgIEFjY2Vzc0RhdGFWaWV3TWVtYmVyQXNGbG9hdDY0Ci19OwotCi1KU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBEYXRhVmll
dyogb2JqZWN0KQotewotICAgIHJldHVybiB3cmFwPEpTRGF0YVZpZXc+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgb2JqZWN0KTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU0RhdGFW
aWV3Q29uc3RydWN0b3I6OmNvbnN0cnVjdEpTRGF0YVZpZXcoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc051bGwoKSB8fCAhZXhlYy0+YXJndW1lbnQoMCku
aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Ci0KLSAg
ICBSZWZQdHI8RGF0YVZpZXc+IHZpZXcgPSBjb25zdHJ1Y3RBcnJheUJ1ZmZlclZpZXdXaXRoQXJy
YXlCdWZmZXJBcmd1bWVudDxEYXRhVmlldywgY2hhcj4oZXhlYyk7Ci0gICAgaWYgKCF2aWV3Lmdl
dCgpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBJTkRFWF9TSVpFX0VSUik7Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgfQotCi0g
ICAgSlNEYXRhVmlld0NvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0ganNDYXN0PEpTRGF0YVZp
ZXdDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIHZp
ZXcuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldERhdGFWaWV3TWVtYmVyKEV4ZWNT
dGF0ZSogZXhlYywgRGF0YVZpZXcqIGltcCwgRGF0YVZpZXdBY2Nlc3NUeXBlIHR5cGUpCi17Ci0g
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFs
c2U7Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEgJiYgKHR5cGUgPT0gQWNjZXNz
RGF0YVZpZXdNZW1iZXJBc0Zsb2F0MzIgfHwgdHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFz
RmxvYXQ2NCkpIHsKLSAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+YXJndW1lbnQoMSkudG9C
b29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0OwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQWNjZXNzRGF0YVZpZXdNZW1iZXJB
c0Zsb2F0MzI6Ci0gICAgY2FzZSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQ2NDogewotICAg
ICAgICBkb3VibGUgdmFsdWUgPSAodHlwZSA9PSBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQz
MikgPyBpbXAtPmdldEZsb2F0MzIoYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYykgOiBpbXAt
PmdldEZsb2F0NjQoYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci0gICAgICAgIHJlc3Vs
dCA9IHN0ZDo6aXNuYW4odmFsdWUpID8ganNOYU4oKSA6IGpzTnVtYmVyKHZhbHVlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfSBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSlNWYWx1ZSBKU0RhdGFWaWV3OjpnZXRGbG9hdDMyKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YVZpZXdNZW1iZXIoZXhlYywgc3Rh
dGljX2Nhc3Q8RGF0YVZpZXcqPihpbXBsKCkpLCBBY2Nlc3NEYXRhVmlld01lbWJlckFzRmxvYXQz
Mik7Ci19Ci0KLUpTVmFsdWUgSlNEYXRhVmlldzo6Z2V0RmxvYXQ2NChFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGFWaWV3TWVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PERhdGFW
aWV3Kj4oaW1wbCgpKSwgQWNjZXNzRGF0YVZpZXdNZW1iZXJBc0Zsb2F0NjQpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rp
Y3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEwICszNiwxMCBA
QAogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogI2luY2x1ZGUg
IkpTVHJhY2tDdXN0b20uaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJK
U1ZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSA8aGVhcC9TdHJvbmdJbmxpbmVzLmg+CiAjaW5jbHVkZSA8aW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25zLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw3ICs1Niw3IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6bG9jYXRpb24oRXhlY1N0YXRlKiAK
ICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTG9jYXRpb24qIGxvY2F0aW9uID0gZnJh
bWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5sb2NhdGlvbigpOwotICAgIGlmIChKU0RPTVdy
YXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgbG9j
YXRpb24pKQorICAgIGlmIChKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3Vy
cmVudFdvcmxkKGV4ZWMpLCBsb2NhdGlvbikpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCiAg
ICAgSlNMb2NhdGlvbioganNMb2NhdGlvbiA9IEpTTG9jYXRpb246OmNyZWF0ZShnZXRET01TdHJ1
Y3R1cmU8SlNMb2NhdGlvbj4oZXhlYywgZ2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3QoKSwg
bG9jYXRpb24pOwpAQCAtODMsNyArODMsNyBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50
V29ybGQoZXhlYyksIGRvY3VtZW50KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hl
ZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBkb2N1bWVudCk7CiAgICAgaWYgKHdyYXBwZXIp
CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAg
IGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBl
ciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBldmVudCk7
CisgICAgSlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChl
eGVjKSwgZXZlbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBA
CiAjaW5jbHVkZSAiSlNGaWxlUmVhZGVyLmgiCiAKICNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCi0j
aW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXIu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlv
bkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw3ICs1OSw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmEKICAgICBpZiAoIWNvbGxlY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAg
IEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4
ZWMpLCBjb2xsZWN0aW9uKTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBw
ZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBjb2xsZWN0aW9uKTsKIAogICAgIGlmICh3cmFwcGVyKQog
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MVGVtcGxhdGVF
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBKU1ZhbHVl
IEpTSFRNTFRlbXBsYXRlRWxlbWVudDo6Y29udGVudChFCiAgICAgSFRNTFRlbXBsYXRlRWxlbWVu
dCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTFRlbXBsYXRlRWxlbWVudCo+KGltcGwoKSk7CiAgICAg
RG9jdW1lbnRGcmFnbWVudCogY29udGVudCA9IGltcC0+Y29udGVudCgpOwogCi0gICAgSlNET01X
cmFwcGVyKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGNv
bnRlbnQpOworICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50
V29ybGQoZXhlYyksIGNvbnRlbnQpOwogICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1h
Z2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw2IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgot
I2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIKIAogI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTQwLDcgKzM5LDcgQEAgSlNWYWx1
ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIGlmICghaW1hZ2VEYXRhKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCi0gICAgSlNET01XcmFwcGVyKiB3cmFwcGVy
ID0gZ2V0Q2FjaGVkV3JhcHBlcihjdXJyZW50V29ybGQoZXhlYyksIGltYWdlRGF0YSk7CisgICAg
SlNPYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwg
aW1hZ2VEYXRhKTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9z
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDE5ICs0NiwxMSBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJKU0V2ZW50
TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJKU0Zsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTRmxv
YXQ2NEFycmF5LmgiCiAjaW5jbHVkZSAiSlNIVE1MQWxsQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkpTSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRlICJKU0ludDE2QXJyYXkuaCIKLSNpbmNsdWRl
ICJKU0ludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU0ludDhBcnJheS5oIgogI2luY2x1ZGUgIkpT
Tm9kZS5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIK
LSNpbmNsdWRlICJKU1VpbnQxNkFycmF5LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgot
I2luY2x1ZGUgIkpTVWludDhBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiU3RvcmFnZS5oIgogI2luY2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CkBAIC02Nyw4
ICs1OSwxMSBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvUmVnRXhwT2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJKU01lc3NhZ2VFdmVudC5oIgogCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgog
I2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9y
dEN1c3RvbS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEzICszMCwxMyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5o
IgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgog
I2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnRDdXN0
b20uaCIKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUGF0aFNlZ0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQYXRoU2VnQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKIAotICAgIGlmIChKU0RPTVdyYXBwZXIqIHdyYXBwZXIgPSBnZXRDYWNoZWRX
cmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkKKyAgICBpZiAoSlNPYmplY3QqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgb2JqZWN0KSkKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAKICAgICBzd2l0Y2ggKG9iamVjdC0+cGF0aFNlZ1R5cGUo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hl
ZXRDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3
IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXN0
eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciog
d3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCBzdHlsZVNoZWV0
KTsKKyAgICBKU09iamVjdCogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxk
KGV4ZWMpLCBzdHlsZVNoZWV0KTsKICAgICBpZiAod3JhcHBlcikKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJhY2tDdXN0
b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyYWNrQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAgICAgaWYgKCF0cmFjaykKICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB0cmFjayk7CisgICAgSlNPYmplY3Qq
IHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdHJhY2spOwog
ICAgIGlmICh3cmFwcGVyKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMTggKzM2LDE0IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgog
I2luY2x1ZGUgIkpTRVhURHJhd0J1ZmZlcnMuaCIKICNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpTRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAi
SlNIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgog
I2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNJbnQzMkFycmF5LmgiCiAjaW5j
bHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCiAjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmgiCiAjaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKICNpbmNsdWRlICJK
U09FU1RleHR1cmVIYWxmRmxvYXQuaCIKICNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0
LmgiCi0jaW5jbHVkZSAiSlNVaW50MzJBcnJheS5oIgotI2luY2x1ZGUgIkpTVWludDhBcnJheS5o
IgogI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKICNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuaCIKICNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5o
IgpAQCAtODUsMTAgKzgxLDkgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KIAog
I2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZm
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCiAjaW5jbHVkZSAiSlNET01Gb3JtRGF0YS5o
IgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCkBAIC01MCw2ICs0OCw4IEBACiAjaW5j
bHVkZSA8aW50ZXJwcmV0ZXIvU3RhY2tJdGVyYXRvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJy
YXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xMjcsOSArMTI3LDEwIEBAIEpTVmFsdWUg
SlNYTUxIdHRwUmVxdWVzdDo6c2VuZChFeGVjU3RhdGUKICAgICAgICAgICAgIGltcGwoKS0+c2Vu
ZCh0b0RPTUZvcm1EYXRhKHZhbCksIGVjKTsKICAgICAgICAgZWxzZSBpZiAodmFsLmluaGVyaXRz
KEpTQXJyYXlCdWZmZXI6OmluZm8oKSkpCiAgICAgICAgICAgICBpbXBsKCktPnNlbmQodG9BcnJh
eUJ1ZmZlcih2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbC5pbmhlcml0cyhKU0FycmF5
QnVmZmVyVmlldzo6aW5mbygpKSkKLSAgICAgICAgICAgIGltcGwoKS0+c2VuZCh0b0FycmF5QnVm
ZmVyVmlldyh2YWwpLCBlYyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAodmFsLmlu
aGVyaXRzKEpTQXJyYXlCdWZmZXJWaWV3OjppbmZvKCkpKSB7CisgICAgICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiB2aWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcodmFsKTsKKyAgICAgICAg
ICAgIGltcGwoKS0+c2VuZCh2aWV3LmdldCgpLCBlYyk7CisgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgaW1wbCgpLT5zZW5kKHZhbC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyksIGVjKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMjUgKzMyLDEzIEBACiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiSlNCbG9iLmgiCi0jaW5j
bHVkZSAiSlNEYXRhVmlldy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNGaWxlLmgiCiAjaW5jbHVkZSAiSlNGaWxlTGlzdC5oIgotI2luY2x1ZGUgIkpTRmxv
YXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiSlNGbG9hdDY0QXJyYXkuaCIKICNpbmNsdWRlICJKU0lt
YWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTSW50MTZBcnJheS5oIgotI2luY2x1ZGUgIkpTSW50MzJB
cnJheS5oIgotI2luY2x1ZGUgIkpTSW50OEFycmF5LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9y
dC5oIgogI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgiCi0jaW5jbHVkZSAiSlNVaW50MTZBcnJheS5o
IgotI2luY2x1ZGUgIkpTVWludDMyQXJyYXkuaCIKLSNpbmNsdWRlICJKU1VpbnQ4QXJyYXkuaCIK
LSNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgpAQCAtNjMsMTIgKzUxLDE3IEBACiAjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNEYXRhVmll
dy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4K
ICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9SZWdFeHAuaD4KICNpbmNsdWRlIDxydW50aW1lL1JlZ0V4cE9iamVjdC5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJy
YXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0xNzIyLDQ3
ICsxNzE1LDYgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VgogICAg
IG1fYmxvYlVSTHMuc3dhcChibG9iVVJMcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5ldXRlclZpZXco
SlNDZWxsKiBqc1ZpZXcpCi17Ci0gICAgaWYgKCFqc1ZpZXcpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBzd2l0Y2ggKGpzVmlldy0+Y2xhc3NJbmZvKCktPnR5cGVkQXJyYXlTdG9yYWdlVHlw
ZSkgewotICAgIGNhc2UgVHlwZWRBcnJheU5vbmU6Ci0gICAgICAgIC8vIFRoaXMgY291bGQgYmUg
YSBEYXRhVmlldywgZm9yIGV4YW1wbGUuIEFzc3VtZSB0aGF0IHRoZXJlIGFyZSB2aWV3cyB0aGF0
IHRoZQotICAgICAgICAvLyBERkcgZG9lc24ndCBjYXJlIGFib3V0LgotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBUeXBlZEFycmF5SW50ODoKLSAgICAgICAganNDYXN0PEpTSW50OEFycmF5Kj4o
anNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
VHlwZWRBcnJheUludDE2OgotICAgICAgICBqc0Nhc3Q8SlNJbnQxNkFycmF5Kj4oanNWaWV3KS0+
bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJh
eUludDMyOgotICAgICAgICBqc0Nhc3Q8SlNJbnQzMkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdl
TGVuZ3RoID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Ogot
ICAgICAgICBqc0Nhc3Q8SlNVaW50OEFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0g
MDsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZDoKLSAg
ICAgICAganNDYXN0PEpTVWludDhDbGFtcGVkQXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5n
dGggPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUeXBlZEFycmF5VWludDE2OgotICAg
ICAgICBqc0Nhc3Q8SlNVaW50MTZBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlVaW50MzI6Ci0gICAgICAgIGpz
Q2FzdDxKU1VpbnQzMkFycmF5Kj4oanNWaWV3KS0+bV9zdG9yYWdlTGVuZ3RoID0gMDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgVHlwZWRBcnJheUZsb2F0MzI6Ci0gICAgICAgIGpzQ2FzdDxK
U0Zsb2F0MzJBcnJheSo+KGpzVmlldyktPm1fc3RvcmFnZUxlbmd0aCA9IDA7Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIFR5cGVkQXJyYXlGbG9hdDY0OgotICAgICAgICBqc0Nhc3Q8SlNGbG9h
dDY0QXJyYXkqPihqc1ZpZXcpLT5tX3N0b3JhZ2VMZW5ndGggPSAwOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIFBhc3NPd25Q
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6dHJhbnNmZXJBcnJheUJ1ZmZlcnMoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBBcnJheUJ1ZmZlckFycmF5JiBhcnJheUJ1ZmZlcnMsIFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlJiBjb2RlKQogewpAQCAtMTc3OSwyNiArMTczMSwxNSBAQCBQYXNzT3duUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6QXJyYXlCCiAKICAgICBIYXNoU2V0PEpTQzo6QXJyYXlCdWZmZXIqPiB2
aXNpdGVkOwogICAgIGZvciAoc2l6ZV90IGFycmF5QnVmZmVySW5kZXggPSAwOyBhcnJheUJ1ZmZl
ckluZGV4IDwgYXJyYXlCdWZmZXJzLnNpemUoKTsgYXJyYXlCdWZmZXJJbmRleCsrKSB7Ci0gICAg
ICAgIFZlY3RvcjxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiA+IG5ldXRlcmVkVmlld3M7Ci0KICAg
ICAgICAgaWYgKHZpc2l0ZWQuY29udGFpbnMoYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhd
LmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB2aXNpdGVkLmFkZChhcnJh
eUJ1ZmZlcnNbYXJyYXlCdWZmZXJJbmRleF0uZ2V0KCkpOwogCi0gICAgICAgIGJvb2wgcmVzdWx0
ID0gYXJyYXlCdWZmZXJzW2FycmF5QnVmZmVySW5kZXhdLT50cmFuc2Zlcihjb250ZW50cy0+YXQo
YXJyYXlCdWZmZXJJbmRleCksIG5ldXRlcmVkVmlld3MpOworICAgICAgICBib29sIHJlc3VsdCA9
IGFycmF5QnVmZmVyc1thcnJheUJ1ZmZlckluZGV4XS0+dHJhbnNmZXIoY29udGVudHMtPmF0KGFy
cmF5QnVmZmVySW5kZXgpKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgIGNv
ZGUgPSBWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHZpZXdzIG1heSBoYXZlIGJlZW4gbmV1dGVy
ZWQsIGJ1dCB0aGVpciB3cmFwcGVycyBhbHNvIG5lZWQgdG8gYmUgbmV1dGVyZWQsIHRvby4KLSAg
ICAgICAgZm9yIChzaXplX3Qgdmlld0luZGV4ID0gbmV1dGVyZWRWaWV3cy5zaXplKCk7IHZpZXdJ
bmRleC0tOykgewotICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbmV1dGVyZWRW
aWV3c1t2aWV3SW5kZXhdLmdldCgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qgd29ybGRJbmRl
eCA9IHdvcmxkcy5zaXplKCk7IHdvcmxkSW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICBET01X
cmFwcGVyV29ybGQqIHdvcmxkID0gd29ybGRzW3dvcmxkSW5kZXhdLmdldCgpOwotICAgICAgICAg
ICAgICAgIG5ldXRlclZpZXcoZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgdmlldykpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBjb250ZW50cy5yZWxlYXNlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9XZWJDb3JlSlNDbGllbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAK
IAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRPTU9iamVjdEhhc2hU
YWJsZU1hcC5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NSw2
ICs3Niw3IEBAIGlubGluZSB2b2lkIGluaXROb3JtYWxXb3JsZENsaWVudERhdGEoSlMKICAgICBX
ZWJDb3JlSlNDbGllbnREYXRhKiB3ZWJDb3JlSlNDbGllbnREYXRhID0gbmV3IFdlYkNvcmVKU0Ns
aWVudERhdGE7CiAgICAgdm0tPmNsaWVudERhdGEgPSB3ZWJDb3JlSlNDbGllbnREYXRhOyAvLyB+
Vk0gZGVsZXRlcyB0aGlzIHBvaW50ZXIuCiAgICAgd2ViQ29yZUpTQ2xpZW50RGF0YS0+bV9ub3Jt
YWxXb3JsZCA9IERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlKHZtLCB0cnVlKTsKKyAgICB2bS0+bV90
eXBlZEFycmF5Q29udHJvbGxlciA9IGFkb3B0UmVmKG5ldyBXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIK
KyNpbmNsdWRlIDxoZWFwL1Bhc3NXZWFrLmg+CisjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZl
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvT3BlcmF0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6V2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyKCkKKyAgICA6IG1fb3duZXIoKQoreworfQorV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyOjp+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCkgeyB9CisKK0pTQXJyYXlCdWZm
ZXIqIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6dG9KUygKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5QnVmZmVyKiBuYXRpdmUpCit7
CisgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4oCisgICAgICAgIFdlYkNvcmU6OnRv
SlMoZXhlYywganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSwgbmF0aXZl
KSk7Cit9CisKK2Jvb2wgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyOjpKU0FycmF5QnVmZmVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKAorICAgIEhhbmRsZTxVbmtub3duPiBo
YW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0FycmF5QnVmZmVy
KiBqc0FycmF5QnVmZmVyID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihoYW5kbGUuZ2V0KCkuYXND
ZWxsKCkpOworICAgIGlmICghanNBcnJheUJ1ZmZlci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQXJyYXlCdWZmZXIqIHJvb3QgPSBqc0FycmF5QnVm
ZmVyLT5pbXBsKCk7CisgICAgcmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3Qp
OworfQorCit2b2lkIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcjo6SlNBcnJheUJ1ZmZlck93
bmVyOjpmaW5hbGl6ZSgKKyAgICBIYW5kbGU8VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0
KQoreworICAgIEpTQXJyYXlCdWZmZXIqIGpzQXJyYXlCdWZmZXIgPSBzdGF0aWNfY2FzdDxKU0Fy
cmF5QnVmZmVyKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBET01XcmFwcGVyV29ybGQq
IHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5j
YWNoZVdyYXBwZXIod29ybGQsIGpzQXJyYXlCdWZmZXItPmltcGwoKSwganNBcnJheUJ1ZmZlcik7
CisgICAganNBcnJheUJ1ZmZlci0+aW1wbCgpLT5kZXJlZigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorI2Rl
ZmluZSBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8aGVhcC9XZWFr
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUNvbnRyb2xsZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIgOiBwdWJsaWMgSlNDOjpUeXBlZEFycmF5Q29u
dHJvbGxlciB7CitwdWJsaWM6CisgICAgV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7Cisg
ICAgdmlydHVhbCB+V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKCk7CisgICAgCisgICAgdmly
dHVhbCBKU0M6OkpTQXJyYXlCdWZmZXIqIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOworICAgIAorICAgIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIoKSB7IHJldHVybiAmbV9vd25lcjsgfQorCitwcml2YXRlOgor
ICAgIGNsYXNzIEpTQXJyYXlCdWZmZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25l
ciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3Bh
cXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpT
bG90VmlzaXRvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7CisgICAgfTsKKworICAgIEpTQXJyYXlCdWZm
ZXJPd25lciBtX293bmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTU0MDkw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC0xODAsMjEgKzE4MCwyMiBAQCBzdWIgRm9yQWxsUGFyZW50cwogCiAg
ICAgbXkgJHJlY3Vyc2U7CiAgICAgJHJlY3Vyc2UgPSBzdWIgeworICAgICAgICBteSAkb3V0ZXJJ
bnRlcmZhY2UgPSBzaGlmdDsKICAgICAgICAgbXkgJGN1cnJlbnRJbnRlcmZhY2UgPSBzaGlmdDsK
IAogICAgICAgICBmb3IgKEB7JGN1cnJlbnRJbnRlcmZhY2UtPnBhcmVudHN9KSB7CiAgICAgICAg
ICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRfOwotICAgICAgICAgICAgbXkgJHBhcmVudEludGVy
ZmFjZSA9ICRvYmplY3QtPlBhcnNlSW50ZXJmYWNlKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAg
ICAgIG15ICRwYXJlbnRJbnRlcmZhY2UgPSAkb2JqZWN0LT5QYXJzZUludGVyZmFjZSgkb3V0ZXJJ
bnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lKTsKIAogICAgICAgICAgICAgaWYgKCRiZWZvcmVSZWN1
cnNpb24pIHsKICAgICAgICAgICAgICAgICAmJGJlZm9yZVJlY3Vyc2lvbigkcGFyZW50SW50ZXJm
YWNlKSBlcSAncHJ1bmUnIGFuZCBuZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgJiRy
ZWN1cnNlKCRwYXJlbnRJbnRlcmZhY2UpOworICAgICAgICAgICAgJiRyZWN1cnNlKCRvdXRlcklu
dGVyZmFjZSwgJHBhcmVudEludGVyZmFjZSk7CiAgICAgICAgICAgICAmJGFmdGVyUmVjdXJzaW9u
KCRwYXJlbnRJbnRlcmZhY2UpIGlmICRhZnRlclJlY3Vyc2lvbjsKICAgICAgICAgfQogICAgIH07
CiAKLSAgICAmJHJlY3Vyc2UoJGludGVyZmFjZSk7CisgICAgJiRyZWN1cnNlKCRpbnRlcmZhY2Us
ICRpbnRlcmZhY2UpOwogfQogCiBzdWIgRmluZFN1cGVyTWV0aG9kCkBAIC0yMzgsNiArMjM5LDcg
QEAgc3ViIElETEZpbGVGb3JJbnRlcmZhY2UKIHN1YiBQYXJzZUludGVyZmFjZQogewogICAgIG15
ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkb3V0ZXJJbnRlcmZhY2UgPSBzaGlmdDsKICAgICBt
eSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OwogCiAgICAgcmV0dXJuIHVuZGVmIGlmICRpbnRlcmZh
Y2VOYW1lIGVxICdPYmplY3QnOwpAQCAtMjQ4LDcgKzI1MCw3IEBAIHN1YiBQYXJzZUludGVyZmFj
ZQogCiAgICAgIyBTdGVwICMxOiBGaW5kIHRoZSBJREwgZmlsZSBhc3NvY2lhdGVkIHdpdGggJ2lu
dGVyZmFjZScKICAgICBteSAkZmlsZW5hbWUgPSAkb2JqZWN0LT5JRExGaWxlRm9ySW50ZXJmYWNl
KCRpbnRlcmZhY2VOYW1lKQotICAgICAgICBvciBkaWUoIkNvdWxkIE5PVCBmaW5kIElETCBmaWxl
IGZvciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiIVxuIik7CisgICAgICAgIG9yIGRpZSgi
Q291bGQgTk9UIGZpbmQgSURMIGZpbGUgZm9yIGludGVyZmFjZSBcIiRpbnRlcmZhY2VOYW1lXCIs
IHJlYWNoYWJsZSBmcm9tIFwiIiAuICRvdXRlckludGVyZmFjZS0+bmFtZSAuICJcIiFcbiIpOwog
CiAgICAgcHJpbnQgIiAgfCAgfD4gIFBhcnNpbmcgcGFyZW50IElETCBcIiRmaWxlbmFtZVwiIGZv
ciBpbnRlcmZhY2UgXCIkaW50ZXJmYWNlTmFtZVwiXG4iIGlmICR2ZXJib3NlOwogCkBAIC0yNzcs
NiArMjc5LDEwIEBAIHN1YiBTa2lwSW5jbHVkZUhlYWRlcgogCiAgICAgIyBTcGVjaWFsIGNhc2U6
IFNWR051bWJlci5oIGRvZXMgbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJT
VkdOdW1iZXIiOworICAgIAorICAgICMgVHlwZWQgYXJyYXlzIGFscmVhZHkgaW5jbHVkZWQgYnkg
SlNET01CaW5kaW5nLmguCisgICAgcmV0dXJuIDEgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5VHlw
ZSgkdHlwZSk7CisgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2OCw3ICszNzQsNyBAQCBz
dWIgSXNUeXBlZEFycmF5VHlwZQogICAgIHJldHVybiAxIGlmICgoJHR5cGUgZXEgIkFycmF5QnVm
ZmVyIikgb3IgKCR0eXBlIGVxICJBcnJheUJ1ZmZlclZpZXciKSk7CiAgICAgcmV0dXJuIDEgaWYg
KCgkdHlwZSBlcSAiVWludDhBcnJheSIpIG9yICgkdHlwZSBlcSAiVWludDhDbGFtcGVkQXJyYXki
KSBvciAoJHR5cGUgZXEgIlVpbnQxNkFycmF5Iikgb3IgKCR0eXBlIGVxICJVaW50MzJBcnJheSIp
KTsKICAgICByZXR1cm4gMSBpZiAoKCR0eXBlIGVxICJJbnQ4QXJyYXkiKSBvciAoJHR5cGUgZXEg
IkludDE2QXJyYXkiKSBvciAoJHR5cGUgZXEgIkludDMyQXJyYXkiKSk7Ci0gICAgcmV0dXJuIDEg
aWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0eXBlIGVxICJGbG9hdDY0QXJyYXki
KSk7CisgICAgcmV0dXJuIDEgaWYgKCgkdHlwZSBlcSAiRmxvYXQzMkFycmF5Iikgb3IgKCR0eXBl
IGVxICJGbG9hdDY0QXJyYXkiKSBvciAoJHR5cGUgZXEgIkRhdGFWaWV3IikpOwogICAgIHJldHVy
biAwOwogfQogCkBAIC02MDksNiArNjE1LDcgQEAgc3ViIElzV3JhcHBlclR5cGUKICAgICByZXR1
cm4gMCBpZiAkb2JqZWN0LT5HZXRTZXF1ZW5jZVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlm
ICRvYmplY3QtPklzRW51bVR5cGUoJHR5cGUpOwogICAgIHJldHVybiAwIGlmICRvYmplY3QtPklz
U3RyaW5nVHlwZSgkdHlwZSk7CisgICAgcmV0dXJuIDAgaWYgJG9iamVjdC0+SXNUeXBlZEFycmF5
VHlwZSgkdHlwZSk7CiAgICAgcmV0dXJuIDAgaWYgJHdlYkNvcmVUeXBlSGFzaHskdHlwZX07CiAg
ICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImFueSI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxNTQw
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5
cGUKICAgICBteSAkaW5jbHVkZXNSZWYgPSBzaGlmdDsKIAogICAgIHJldHVybiBpZiBTa2lwSW5j
bHVkZUhlYWRlcigkdHlwZSk7Ci0KKyAgICAKICAgICAjIFdoZW4gd2UncmUgZmluaXNoZWQgd2l0
aCB0aGUgb25lLWZpbGUtcGVyLWNsYXNzCiAgICAgIyByZW9yZ2FuaXphdGlvbiwgd2Ugd29uJ3Qg
bmVlZCB0aGVzZSBzcGVjaWFsIGNhc2VzLgogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jlc29s
dmVyIikgewpAQCAtMjI1LDggKzIyNSw2IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICAg
ICAgJGluY2x1ZGVzUmVmLT57IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmgifSA9IDE7CiAgICAg
fSBlbHNpZiAoJGlzQ2FsbGJhY2sgJiYgJGNvZGVHZW5lcmF0b3ItPklzV3JhcHBlclR5cGUoJHR5
cGUpKSB7CiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKUyR7dHlwZX0uaCJ9ID0gMTsKLSAgICB9
IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAg
ICAgJGluY2x1ZGVzUmVmLT57IjxydW50aW1lLyR7dHlwZX0uaD4ifSA9IDE7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKICAgICAg
ICAgJGluY2x1ZGVzUmVmLT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTY4MiwxMSArNjgwLDcgQEAg
c3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgfQogCiAgICAgaWYgKCRoYXNQYXJlbnQgJiYgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCJ9KSB7
Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW50ZXJmYWNl
TmFtZSkpIHsKLSAgICAgICAgICAgICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvJGludGVyZmFj
ZU5hbWUuaD4ifSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkaGVhZGVySW5j
bHVkZXN7IiRpbnRlcmZhY2VOYW1lLmgifSA9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgJGhlYWRl
ckluY2x1ZGVzeyIkaW50ZXJmYWNlTmFtZS5oIn0gPSAxOwogICAgIH0KICAgICAKICAgICAkaGVh
ZGVySW5jbHVkZXN7IjxydW50aW1lL0pTT2JqZWN0Lmg+In0gPSAxOwpAQCAtOTY1LDIyICs5NTks
NiBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICB9XG4iKTsKICAgICB9CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5
cGUoJGltcGxUeXBlKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJyYXlCdWZmZXJWaWV3IikgYW5kICgk
aW1wbFR5cGUgbmUgIkFycmF5QnVmZmVyIikpIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgY29uc3QgSlNDOjpUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFn
ZVR5cGUgPSBKU0M6OiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJh
eUludDgiKSBpZiAkaW1wbFR5cGUgZXEgIkludDhBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICJUeXBlZEFycmF5SW50MTYiKSBpZiAkaW1wbFR5cGUgZXEgIkludDE2QXJyYXki
OwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiVHlwZWRBcnJheUludDMyIikgaWYgJGlt
cGxUeXBlIGVxICJJbnQzMkFycmF5IjsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIlR5
cGVkQXJyYXlVaW50OCIpIGlmICRpbXBsVHlwZSBlcSAiVWludDhBcnJheSI7Ci0gICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDhDbGFtcGVkIikgaWYgJGltcGxUeXBl
IGVxICJVaW50OENsYW1wZWRBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJU
eXBlZEFycmF5VWludDE2IikgaWYgJGltcGxUeXBlIGVxICJVaW50MTZBcnJheSI7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5VWludDMyIikgaWYgJGltcGxUeXBlIGVx
ICJVaW50MzJBcnJheSI7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICJUeXBlZEFycmF5
RmxvYXQzMiIpIGlmICRpbXBsVHlwZSBlcSAiRmxvYXQzMkFycmF5IjsKLSAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIlR5cGVkQXJyYXlGbG9hdDY0IikgaWYgJGltcGxUeXBlIGVxICJGbG9h
dDY0QXJyYXkiOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiO1xuIik7Ci0gICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaW50cHRyX3QgbV9zdG9yYWdlTGVuZ3RoO1xuIik7
Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCogbV9zdG9yYWdlO1xuIik7
Ci0gICAgfQotCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgInByb3RlY3RlZDpcbiIpOwogICAg
ICMgQ29uc3RydWN0b3IKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsK
QEAgLTE4NjksMTIgKzE4NDcsNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pXG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pO1xuIik7Ci0g
ICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNUeXBlZEFycmF5VHlwZSgkaW1wbFR5cGUpIGFu
ZCAoJGltcGxUeXBlIG5lICJBcnJheUJ1ZmZlclZpZXciKSBhbmQgKCRpbXBsVHlwZSBuZSAiQXJy
YXlCdWZmZXIiKSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVHlwZWRB
cnJheURlc2NyaXB0b3IgZGVzY3JpcHRvcigke2NsYXNzTmFtZX06OmluZm8oKSwgT0JKRUNUX09G
RlNFVE9GKCR7Y2xhc3NOYW1lfSwgbV9zdG9yYWdlKSwgT0JKRUNUX09GRlNFVE9GKCR7Y2xhc3NO
YW1lfSwgbV9zdG9yYWdlTGVuZ3RoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHZtLnJlZ2lzdGVyVHlwZWRBcnJheURlc2NyaXB0b3IoaW1wbCgpLCBkZXNjcmlw
dG9yKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9zdG9yYWdl
ID0gaW1wbCgpLT5kYXRhKCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIG1fc3RvcmFnZUxlbmd0aCA9IGltcGwoKS0+bGVuZ3RoKCk7XG4iKTsKLSAgICAgICAgfQog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7
XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KQEAgLTIz
NzQsNyArMjM0NiwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCRmdW5j
dGlvbk5hbWUsIEBhcmd1bWVudHMpID0gJGNvZGVHZW5lcmF0b3ItPlNldHRlckV4cHJlc3Npb24o
XCVpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgIm5hdGl2ZVZhbHVlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PklzVHlwZWRBcnJheVR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKSBhbmQgbm90ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiQXJyYXlCdWZmZXIiKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRzLCAibmF0aXZlVmFs
dWUuZ2V0KCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAYXJndW1lbnRz
LCAibmF0aXZlVmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIk
e2ltcGxlbWVudGVkQnl9LmgifSA9IDE7CkBAIC0yNTI2LDEzICsyNTAyLDYgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoZXhl
YykpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIGVxICJzZXQiIGFuZCAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBteSAkdmlld1R5cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlw
ZWRBcnJheSJ9OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXRXZWJHTEFycmF5SGVscGVyPCRpbXBsVHlwZSwg
JHZpZXdUeXBlPihleGVjLCBjYXN0ZWRUaGlzLT5pbXBsKCkpKTtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRpbXBsVHlwZSogaW1wbCA9IHN0YXRpY19jYXN0
PCRpbXBsVHlwZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRzdmdQcm9wZXJ0eVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGlmIChpbXBsLT5pc1JlYWRPbmx5KCkpIHtcbiIpOwpAQCAtMzA4
Nyw3ICszMDU2LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoJGFyZ1R5cGUgZXEgIk5vZGVGaWx0ZXIiKSB7Cisg
ICAgICAgIGlmICgkYXJnVHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgKCRjb2RlR2VuZXJhdG9yLT5J
c1R5cGVkQXJyYXlUeXBlKCRhcmdUeXBlKSBhbmQgbm90ICRhcmdUeXBlIGVxICJBcnJheUJ1ZmZl
ciIpKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVudHMsICIkbmFtZS5nZXQoKSI7CiAgICAg
ICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJn
VHlwZSkgYW5kIG5vdCAkaW50ZXJmYWNlTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICBw
dXNoIEBhcmd1bWVudHMsICIkbmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CkBAIC0zMzY5LDYg
KzMzMzgsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIG15ICRzdmdOYXRpdmVUeXBlID0gJGNv
ZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkdHlwZSk7CiAgICAgcmV0dXJu
ICIke3N2Z05hdGl2ZVR5cGV9KiIgaWYgJHN2Z05hdGl2ZVR5cGU7CiAgICAgcmV0dXJuICJSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4iIGlmICR0eXBlIGVxICJET01TdHJpbmdMaXN0IjsKKyAgICByZXR1
cm4gIlJlZlB0cjwke3R5cGV9PiIgaWYgJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUo
JHR5cGUpIGFuZCBub3QgJHR5cGUgZXEgIkFycmF5QnVmZmVyIjsKICAgICByZXR1cm4gJG5hdGl2
ZVR5cGV7JHR5cGV9IGlmIGV4aXN0cyAkbmF0aXZlVHlwZXskdHlwZX07CiAKICAgICBteSAkYXJy
YXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CkBAIC0zNTA4LDYg
KzM0NzgsMTAgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiSlNET01TdHJpbmdMaXN0LmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gInRv
RE9NU3RyaW5nTGlzdChleGVjLCAkdmFsdWUpIjsKICAgICB9CisgICAgCisgICAgaWYgKCRjb2Rl
R2VuZXJhdG9yLT5Jc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAgICByZXR1cm4gInRv
JHR5cGUoJHZhbHVlKSI7CisgICAgfQogCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkhUTUxPcHRp
b25FbGVtZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJIVE1MT3B0aW9uRWxlbWVu
dCI7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0
eXBlIGVxICJFdmVudCI7CkBAIC0zNTc3LDcgKzM1NTEsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVl
CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU1N0cmluZy5oPiIsICRjb25k
aXRpb25hbCk7CiAgICAgICAgIHJldHVybiAianNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgJHZhbHVl
KSI7CiAgICAgfQotCisgICAgCiAgICAgbXkgJGdsb2JhbE9iamVjdDsKICAgICBpZiAoJHRoaXNW
YWx1ZSkgewogICAgICAgICAkZ2xvYmFsT2JqZWN0ID0gIiR0aGlzVmFsdWUtPmdsb2JhbE9iamVj
dCgpIjsKQEAgLTM2MTgsMTQgKzM1OTIsMTIgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIH0g
ZWxzaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJhbnki
KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIs
ICRjb25kaXRpb25hbCk7CiAgICAgICAgIHJldHVybiAiJHZhbHVlID8gJHZhbHVlLT5kZXNlcmlh
bGl6ZShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKSI7Cisg
ICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Cisg
ICAgICAgICMgRG8gbm90aGluZyAtIGFsbCBoZWFkZXJzIGFyZSBhbHJlYWR5IGluY2x1ZGVkLgog
ICAgIH0gZWxzZSB7CiAgICAgICAgICMgRGVmYXVsdCwgaW5jbHVkZSBoZWFkZXIgd2l0aCBzYW1l
IG5hbWUuCiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAkY29uZGl0aW9u
YWwpOwotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzVHlwZWRBcnJheVR5cGUoJHR5cGUp
KSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvJHR5cGUuaD4iLCAk
Y29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5
cGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiR0
eXBlLmgiLCAkY29uZGl0aW9uYWwpIGlmIG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVI
ZWFkZXIoJHR5cGUpOwotICAgICAgICB9CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkdHlw
ZS5oIiwgJGNvbmRpdGlvbmFsKSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVh
ZGVyKCR0eXBlKTsKICAgICB9CiAKICAgICByZXR1cm4gJHZhbHVlIGlmICRjb2RlR2VuZXJhdG9y
LT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSk7CkBAIC00MTA4LDMwICs0MDgwLDYgQEAgRU5ECiB9
CiAKIEVORAotICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRl
bXBsYXRlKCRpbnRlcmZhY2UsICJUeXBlZEFycmF5IikpIHsKLSAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IkpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmgifSA9IDE7Ci0gICAgICAgICAgICBteSAk
dmlld1R5cGUgPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHlwZWRBcnJheSJ9
OwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAke2NvbnN0cnVjdG9yQ2xhc3NOYW1lfTo6Y29uc3RydWN0JHtjbGFzc05hbWV9KEV4
ZWNTdGF0ZSogZXhlYylcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgJHtjb25zdHJ1Y3RvckNs
YXNzTmFtZX0qIGpzQ29uc3RydWN0b3IgPSBqc0Nhc3Q8JHtjb25zdHJ1Y3RvckNsYXNzTmFtZX0q
PihleGVjLT5jYWxsZWUoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBSZWZQdHI8JGludGVyZmFjZU5hbWU+IGFycmF5ID0gY29uc3RydWN0QXJyYXlCdWZmZXJW
aWV3PCRpbnRlcmZhY2VOYW1lLCAkdmlld1R5cGU+KGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFhcnJheS5nZXQoKSlcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAvLyBFeGNlcHRpb24gaGFzIGFscmVhZHkg
YmVlbiB0aHJvd24uXG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0
b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpKTtc
biIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKLQotICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsICR7aW50ZXJmYWNlTmFt
ZX0qIG9iamVjdClcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7
Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIHRvSlNBcnJheUJ1
ZmZlclZpZXc8JHtjbGFzc05hbWV9PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7XG4iKTsK
LSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7Ci0KLSAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRl
ciJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNz
TmFtZX06OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwg
SlNDOjpKU1ZhbHVlIHZhbHVlKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAie1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlt
cGwoKS0+c2V0KGluZGV4LCB2YWx1ZS50b051bWJlcihleGVjKSk7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwotICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2lmICghSGFzQ3VzdG9tQ29uc3RydWN0b3IoJGludGVyZmFjZSkgJiYgKCEkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRDb25zdHJ1Y3RvciJ9IHx8ICRnZW5lcmF0
aW5nTmFtZWRDb25zdHJ1Y3RvcikpIHsKICAgICAgICAgICAgIG15ICRvdmVybG9hZGVkSW5kZXhT
dHJpbmcgPSAiIjsKICAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPntvdmVybG9hZGVkSW5kZXh9
ICYmICRmdW5jdGlvbi0+e292ZXJsb2FkZWRJbmRleH0gPiAwKSB7CkBAIC00MjEwLDcgKzQxNTgs
NyBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckhlbHBlck1ldGhvZHMKIAogICAgIG15ICRjb25z
dHJ1Y3RvckNsYXNzTmFtZSA9ICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciA/ICIke2NsYXNz
TmFtZX1OYW1lZENvbnN0cnVjdG9yIiA6ICIke2NsYXNzTmFtZX1Db25zdHJ1Y3RvciI7CiAgICAg
bXkgJGxlYXN0Q29uc3RydWN0b3JMZW5ndGggPSAwOwotICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2UsICJFdmVudCIpIHx8ICRjb2RlR2VuZXJh
dG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGludGVyZmFjZSwgIlR5cGVkQXJyYXkiKSkgewor
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRpbnRlcmZhY2Us
ICJFdmVudCIpKSB7CiAgICAgICAgICRsZWFzdENvbnN0cnVjdG9yTGVuZ3RoID0gMTsKICAgICB9
IGVsc2lmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3IifSB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQ29uc3RydWN0b3IifSkg
ewogICAgICAgICBteSBAY29uc3RydWN0b3JzID0gQHskaW50ZXJmYWNlLT5jb25zdHJ1Y3RvcnN9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5jcHAJ
KHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQmxvYkJ1aWxk
ZXI6OmFwcGVuZChBcnJheUJ1ZmZlciogYXIKICAgICBhcHBlbmRCeXRlc0RhdGEoYXJyYXlCdWZm
ZXItPmRhdGEoKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiB9CiAKLXZvaWQgQmxvYkJ1
aWxkZXI6OmFwcGVuZChBcnJheUJ1ZmZlclZpZXcqIGFycmF5QnVmZmVyVmlldykKK3ZvaWQgQmxv
YkJ1aWxkZXI6OmFwcGVuZChQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gYXJyYXlCdWZmZXJW
aWV3KQogewogICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJD
b3JlLkJsb2IuY29uc3RydWN0b3IuQXJyYXlCdWZmZXJPclZpZXciLCBCbG9iQ29uc3RydWN0b3JB
cnJheUJ1ZmZlclZpZXcsIEJsb2JDb25zdHJ1Y3RvckFycmF5QnVmZmVyT3JWaWV3TWF4KTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvV2ViS2l0QmxvYkJ1aWxkZXIuaAkocmV2aXNp
b24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9XZWJLaXRCbG9iQnVpbGRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVu
ZChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgZW5kaW5nKTsKICNpZiBFTkFCTEUo
QkxPQikKICAgICB2b2lkIGFwcGVuZChKU0M6OkFycmF5QnVmZmVyKik7Ci0gICAgdm9pZCBhcHBl
bmQoSlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3Pik7CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0
QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93
Jldvcmtlckdsb2JhbFNjb3BlLAotICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbCwKLSAgICBD
dXN0b21Db25zdHJ1Y3Rvcih1bnNpZ25lZCBsb25nIGxlbmd0aCksCi0gICAgSlNOb1N0YXRpY1Rh
YmxlcywKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MsCi0gICAgSW1wbGVtZW50YXRp
b25MYWNrc1ZUYWJsZQotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXIgewotICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7Ci0gICAgQXJyYXlCdWZmZXIgc2xpY2Uo
bG9uZyBiZWdpbiwgb3B0aW9uYWwgbG9uZyBlbmQpOwotfTsKLQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCShyZXZpc2lvbiAxNTQwOTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgQ3VzdG9tVG9KU09i
amVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzLAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNl
PUpTQwotXSBpbnRlcmZhY2UgQXJyYXlCdWZmZXJWaWV3IHsKLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXJyYXlCdWZmZXIgYnVmZmVyOwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGJ5dGVPZmZzZXQ7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgYnl0
ZUxlbmd0aDsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuY3Bw
CShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9EYXRhVmll
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLQotbmFtZXNwYWNlIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXVuaW9uIFZhbHVl
IHsKLSAgICBUIGRhdGE7Ci0gICAgY2hhciBieXRlc1tzaXplb2YoVCldOwotfTsKLQotfQotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8RGF0YVZpZXc+IERhdGFWaWV3OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotewotICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
QXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1aW50OF90KSk7Ci0gICAgaWYgKCFi
dWZmZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVy
LCAwLCBsZW5ndGgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFWaWV3PiBEYXRhVmlldzo6Y3JlYXRl
KFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5z
aWduZWQgYnl0ZUxlbmd0aCkKLXsKLSAgICBpZiAoYnl0ZU9mZnNldCA+IGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBDaGVja2VkPHVpbnQzMl90LCBSZWNvcmRP
dmVyZmxvdz4gY2hlY2tlZE9mZnNldChieXRlT2Zmc2V0KTsKLSAgICBDaGVja2VkPHVpbnQzMl90
LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZExlbmd0aChieXRlTGVuZ3RoKTsKLSAgICBDaGVja2Vk
PHVpbnQzMl90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZE1heCA9IGNoZWNrZWRPZmZzZXQgKyBj
aGVja2VkTGVuZ3RoOwotICAgIGlmIChjaGVja2VkTWF4Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVj
a2VkTWF4LnVuc2FmZUdldCgpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0
LCBieXRlTGVuZ3RoKSk7Ci19Ci0KLURhdGFWaWV3OjpEYXRhVmlldyhQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5ndGgp
Ci0gICAgOiBBcnJheUJ1ZmZlclZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICwgbV9ieXRl
TGVuZ3RoKGJ5dGVMZW5ndGgpCi17Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRUb0ZsaXBCeXRlcyhi
b29sIGxpdHRsZUVuZGlhbikKLXsKLSNpZiBDUFUoQklHX0VORElBTikKLSAgICByZXR1cm4gbGl0
dGxlRW5kaWFuOwotI2Vsc2UKLSAgICByZXR1cm4gIWxpdHRsZUVuZGlhbjsKLSNlbmRpZgotfQot
Ci1pbmxpbmUgdm9pZCBzd2FwQnl0ZXMoY2hhciogcCwgY2hhciogcSkKLXsKLSAgICBjaGFyIHRl
bXAgPSAqcDsKLSAgICAqcCA9ICpxOwotICAgICpxID0gdGVtcDsKLX0KLQotc3RhdGljIHZvaWQg
ZmxpcEJ5dGVzRm9yMTZCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAsIHAgKyAxKTsK
LX0KLQotc3RhdGljIHZvaWQgZmxpcEJ5dGVzRm9yMzJCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dh
cEJ5dGVzKHAsIHAgKyAzKTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyAyKTsKLX0KLQotc3Rh
dGljIHZvaWQgZmxpcEJ5dGVzRm9yNjRCaXRzKGNoYXIqIHApCi17Ci0gICAgc3dhcEJ5dGVzKHAs
IHAgKyA3KTsKLSAgICBzd2FwQnl0ZXMocCArIDEsIHAgKyA2KTsKLSAgICBzd2FwQnl0ZXMocCAr
IDIsIHAgKyA1KTsKLSAgICBzd2FwQnl0ZXMocCArIDMsIHAgKyA0KTsKLX0KLQotc3RhdGljIHZv
aWQgZmxpcEJ5dGVzSWZOZWVkZWQoY2hhciogdmFsdWUsIHNpemVfdCBzaXplLCBib29sIGxpdHRs
ZUVuZGlhbikKLXsKLSAgICBpZiAoIW5lZWRUb0ZsaXBCeXRlcyhsaXR0bGVFbmRpYW4pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAg
IC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAg
ZmxpcEJ5dGVzRm9yMTZCaXRzKHZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0Ogot
ICAgICAgICBmbGlwQnl0ZXNGb3IzMkJpdHModmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIDg6Ci0gICAgICAgIGZsaXBCeXRlc0ZvcjY0Qml0cyh2YWx1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIERhdGFWaWV3OjpnZXRE
YXRhKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKLXsKLSAgICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAg
ICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGUgZGF0YSBkaXJlY3RseSBzaW5jZSBpdCB3
b3VsZCBjYXVzZSBhIGJ1cyBlcnJvciBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3Qgc3VwcG9y
dCB1bmFsaWduZWQgbG9hZHMuCi0gICAgVmFsdWU8VD4gdmFsdWU7Ci0gICAgbWVtY3B5KHZhbHVl
LmJ5dGVzLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9iYXNlQWRkcmVzcykgKyBieXRlT2Zm
c2V0LCBzaXplb2YoVCkpOwotICAgIGZsaXBCeXRlc0lmTmVlZGVkKHZhbHVlLmJ5dGVzLCBzaXpl
b2YoVCksIGxpdHRsZUVuZGlhbik7Ci0gICAgcmV0dXJuIHZhbHVlLmRhdGE7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci12b2lkIERhdGFWaWV3OjpzZXREYXRhKHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIFQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpZiAoYmV5b25kUmFuZ2U8VD4oYnl0ZU9mZnNldCkpIHsKLSAgICAgICAgZWMgPSBJTkRFWF9T
SVpFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvIG5vdCB3YW50
IHRvIHN0b3JlIHRoZSBkYXRhIGRpcmVjdGx5IHNpbmNlIGl0IHdvdWxkIGNhdXNlIGEgYnVzIGVy
cm9yIG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCBzdG9yZXMu
Ci0gICAgVmFsdWU8VD4gdGVtcFZhbHVlOwotICAgIHRlbXBWYWx1ZS5kYXRhID0gdmFsdWU7Ci0g
ICAgZmxpcEJ5dGVzSWZOZWVkZWQodGVtcFZhbHVlLmJ5dGVzLCBzaXplb2YoVCksIGxpdHRsZUVu
ZGlhbik7Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX2Jhc2VBZGRyZXNzKSArIGJ5
dGVPZmZzZXQsIHRlbXBWYWx1ZS5ieXRlcywgc2l6ZW9mKFQpKTsKLX0KLQotaW50OF90IERhdGFW
aWV3OjpnZXRJbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIHJldHVybiBnZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsKLX0KLQot
dWludDhfdCBEYXRhVmlldzo6Z2V0VWludDgodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDhfdD4oYnl0ZU9mZnNldCwgZmFs
c2UsIGVjKTsKLX0KLQotaW50MTZfdCBEYXRhVmlldzo6Z2V0SW50MTYodW5zaWduZWQgYnl0ZU9m
ZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVy
biBnZXREYXRhPGludDE2X3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi11
aW50MTZfdCBEYXRhVmlldzo6Z2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTx1aW50
MTZfdD4oYnl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLWludDMyX3QgRGF0YVZp
ZXc6OmdldEludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZ2V0RGF0YTxpbnQzMl90PihieXRlT2Zmc2V0
LCBsaXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdWludDMyX3QgRGF0YVZpZXc6OmdldFVpbnQzMih1
bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgcmV0dXJuIGdldERhdGE8dWludDMyX3Q+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlh
biwgZWMpOwotfQotCi1mbG9hdCBEYXRhVmlldzo6Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJu
IGdldERhdGE8ZmxvYXQ+KGJ5dGVPZmZzZXQsIGxpdHRsZUVuZGlhbiwgZWMpOwotfQotCi1kb3Vi
bGUgRGF0YVZpZXc6OmdldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVF
bmRpYW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBnZXREYXRhPGRvdWJsZT4o
Ynl0ZU9mZnNldCwgbGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldElu
dDgodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50OF90IHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBzZXREYXRhPGludDhfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19
Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQ4KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQ4X3Qg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDhfdD4oYnl0ZU9m
ZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEludDE2KHVu
c2lnbmVkIGJ5dGVPZmZzZXQsIHNob3J0IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgc2V0RGF0YTxpbnQxNl90PihieXRlT2Zmc2V0LCB2YWx1ZSwg
bGl0dGxlRW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldFVpbnQxNih1bnNpZ25l
ZCBieXRlT2Zmc2V0LCB1aW50MTZfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIHNldERhdGE8dWludDE2X3Q+KGJ5dGVPZmZzZXQsIHZhbHVlLCBs
aXR0bGVFbmRpYW4sIGVjKTsKLX0KLQotdm9pZCBEYXRhVmlldzo6c2V0SW50MzIodW5zaWduZWQg
Ynl0ZU9mZnNldCwgaW50MzJfdCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIHNldERhdGE8aW50MzJfdD4oYnl0ZU9mZnNldCwgdmFsdWUsIGxpdHRs
ZUVuZGlhbiwgZWMpOwotfQotCi12b2lkIERhdGFWaWV3OjpzZXRVaW50MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgdWludDMyX3QgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBzZXREYXRhPHVpbnQzMl90PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxl
RW5kaWFuLCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0MzIodW5zaWduZWQgYnl0
ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBzZXREYXRhPGZsb2F0PihieXRlT2Zmc2V0LCB2YWx1ZSwgbGl0dGxlRW5kaWFu
LCBlYyk7Ci19Ci0KLXZvaWQgRGF0YVZpZXc6OnNldEZsb2F0NjQodW5zaWduZWQgYnl0ZU9mZnNl
dCwgZG91YmxlIHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgc2V0RGF0YTxkb3VibGU+KGJ5dGVPZmZzZXQsIHZhbHVlLCBsaXR0bGVFbmRpYW4sIGVj
KTsKLX0KLQotdm9pZCBEYXRhVmlldzo6bmV1dGVyKCkKLXsKLSAgICBBcnJheUJ1ZmZlclZpZXc6
Om5ldXRlcigpOwotICAgIG1fYnl0ZUxlbmd0aCA9IDA7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRGF0YVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgRGF0YVZpZXdfaAotI2RlZmluZSBEYXRhVmlld19oCi0KLSNp
bmNsdWRlIDxydW50aW1lL0FycmF5QnVmZmVyVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29k
ZTsKLQotY2xhc3MgRGF0YVZpZXcgOiBwdWJsaWMgQXJyYXlCdWZmZXJWaWV3IHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVmlldz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVZpZXc+IGNyZWF0ZShQYXNzUmVmUHRyPEFycmF5
QnVmZmVyPiwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgYnl0ZUxlbmd0aCk7Ci0KLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZUxlbmd0aDsg
fQotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0
ZUxlbmd0aDsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHNsaWNl
KGludCwgaW50KSBjb25zdCB7IHJldHVybiAwOyB9Ci0KLSAgICBpbnQ4X3QgZ2V0SW50OCh1bnNp
Z25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdWludDhfdCBnZXRVaW50OCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgaW50MTZfdCBnZXRJbnQx
Nih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50
MTYoYnl0ZU9mZnNldCwgZmFsc2UsIGVjKTsgfQotICAgIGludDE2X3QgZ2V0SW50MTYodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1
aW50MTZfdCBnZXRVaW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGdldFVpbnQxNihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDE2
X3QgZ2V0VWludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgaW50MzJfdCBnZXRJbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZ2V0SW50MzIoYnl0ZU9mZnNldCwgZmFsc2UsIGVj
KTsgfQotICAgIGludDMyX3QgZ2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgYm9vbCBsaXR0
bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB1aW50MzJfdCBnZXRVaW50MzIodW5zaWdu
ZWQgYnl0ZU9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGdldFVpbnQzMihieXRl
T2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgdWludDMyX3QgZ2V0VWludDMyKHVuc2lnbmVkIGJ5
dGVPZmZzZXQsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgZmxvYXQg
Z2V0RmxvYXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gZ2V0RmxvYXQzMihieXRlT2Zmc2V0LCBmYWxzZSwgZWMpOyB9Ci0gICAgZmxvYXQgZ2V0Rmxv
YXQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIGRvdWJsZSBnZXRGbG9hdDY0KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIGZhbHNlLCBlYyk7IH0K
LSAgICBkb3VibGUgZ2V0RmxvYXQ2NCh1bnNpZ25lZCBieXRlT2Zmc2V0LCBib29sIGxpdHRsZUVu
ZGlhbiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBzZXRJbnQ4KHVuc2lnbmVkIGJ5dGVP
ZmZzZXQsIGludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VWludDgo
dW5zaWduZWQgYnl0ZU9mZnNldCwgdWludDhfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgc2V0SW50MTYodW5zaWduZWQgYnl0ZU9mZnNldCwgaW50MTZfdCB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0K
LSAgICB2b2lkIHNldEludDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIGludDE2X3QgdmFsdWUsIGJv
b2wgbGl0dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRVaW50MTYodW5z
aWduZWQgYnl0ZU9mZnNldCwgdWludDE2X3QgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHNl
dFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0VWlu
dDE2KHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQxNl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlh
biwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0SW50MzIodW5zaWduZWQgYnl0ZU9mZnNl
dCwgaW50MzJfdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0SW50MzIoYnl0ZU9mZnNl
dCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0gCi0gICAgdm9pZCBzZXRJbnQzMih1bnNpZ25lZCBieXRl
T2Zmc2V0LCBpbnQzMl90IHZhbHVlLCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgc2V0VWludDMyKHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVpbnQzMl90IHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykgeyBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNl
LCBlYyk7IH0KLSAgICB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBieXRlT2Zmc2V0LCB1aW50MzJf
dCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNl
dEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUsIGZhbHNlLCBlYyk7IH0KLSAgICB2
b2lkIHNldEZsb2F0MzIodW5zaWduZWQgYnl0ZU9mZnNldCwgZmxvYXQgdmFsdWUsIGJvb2wgbGl0
dGxlRW5kaWFuLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRGbG9hdDY0KHVuc2lnbmVk
IGJ5dGVPZmZzZXQsIGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgc2V0RmxvYXQ2
NChieXRlT2Zmc2V0LCB2YWx1ZSwgZmFsc2UsIGVjKTsgfQotICAgIHZvaWQgc2V0RmxvYXQ2NCh1
bnNpZ25lZCBieXRlT2Zmc2V0LCBkb3VibGUgdmFsdWUsIGJvb2wgbGl0dGxlRW5kaWFuLCBFeGNl
cHRpb25Db2RlJik7Ci0KLSAgICB2aXJ0dWFsIFZpZXdUeXBlIGdldFR5cGUoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIFR5cGVEYXRhVmlldzsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgbmV1dGVyKCk7Ci0KLXByaXZhdGU6Ci0gICAgRGF0YVZpZXcoUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4sIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGJ5dGVMZW5n
dGgpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYm9vbCBiZXlvbmRS
YW5nZSh1bnNpZ25lZCBieXRlT2Zmc2V0KSBjb25zdCB7IHJldHVybiBieXRlT2Zmc2V0ID49IG1f
Ynl0ZUxlbmd0aCB8fCBieXRlT2Zmc2V0ICsgc2l6ZW9mKFQpID4gbV9ieXRlTGVuZ3RoOyB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFQgZ2V0RGF0YSh1bnNpZ25lZCBieXRlT2Zm
c2V0LCBib29sIGxpdHRsZUVuZGlhbiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHNldERhdGEodW5zaWduZWQgYnl0ZU9mZnNldCwg
VCB2YWx1ZSwgYm9vbCBsaXR0bGVFbmRpYW4sIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHVuc2ln
bmVkIG1fYnl0ZUxlbmd0aDsKLX07Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRGF0YVZpZXdfaApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0YVZp
ZXcuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0RhdGFWaWV3
LmlkbAkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRGF0
YVZpZXcuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAg
R2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ3VzdG9tQ29u
c3RydWN0b3IoQXJyYXlCdWZmZXIgYnVmZmVyLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ5dGVP
ZmZzZXQsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgYnl0ZUxlbmd0aCksCi0gICAgQ3VzdG9tVG9K
U09iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVzCi1dIGludGVyZmFjZSBEYXRhVmlldyA6IEFy
cmF5QnVmZmVyVmlldyB7Ci0gICAgLy8gQWxsIHRoZXNlIG1ldGhvZHMgcmFpc2UgYW4gZXhjZXB0
aW9uIGlmIHRoZXkgd291bGQgcmVhZCBvciB3cml0ZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgdmll
dy4KLQotICAgIFtSYWlzZXNFeGNlcHRpb25dIGJ5dGUgZ2V0SW50OCh1bnNpZ25lZCBsb25nIGJ5
dGVPZmZzZXQpOwotICAgIFtSYWlzZXNFeGNlcHRpb25dIG9jdGV0IGdldFVpbnQ4KHVuc2lnbmVk
IGxvbmcgYnl0ZU9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHNob3J0IGdldEludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwg
Ym9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdW5zaWduZWQgc2hvcnQgZ2V0VWludDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNl
dCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gbG9uZyBnZXRJbnQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZz
ZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHVuc2lnbmVkIGxvbmcgZ2V0VWludDMyKHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgb3B0aW9uYWwgYm9vbGVhbiBsaXR0bGVFbmRpYW4pOwotCi0gICAgLy8g
VXNlIGN1c3RvbSBjb2RlIHRvIGhhbmRsZSBOYU4gY2FzZS4KLSAgICBbQ3VzdG9tLCBTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gZmxvYXQgZ2V0RmxvYXQzMih1bnNpZ25lZCBs
b25nIGJ5dGVPZmZzZXQsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbQ3Vz
dG9tLCBTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gZG91YmxlIGdldEZsb2F0
NjQodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlh
bik7Ci0KLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDgodW5zaWduZWQgbG9uZyBi
eXRlT2Zmc2V0LCBieXRlIHZhbHVlKTsKLSAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVp
bnQ4KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgb2N0ZXQgdmFsdWUpOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEludDE2KHVuc2lnbmVkIGxv
bmcgYnl0ZU9mZnNldCwgc2hvcnQgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFu
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0VWlu
dDE2KHVuc2lnbmVkIGxvbmcgYnl0ZU9mZnNldCwgdW5zaWduZWQgc2hvcnQgdmFsdWUsIG9wdGlv
bmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgc2V0SW50MzIodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBsb25n
IHZhbHVlLCBvcHRpb25hbCBib29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVpbnQzMih1bnNpZ25lZCBsb25nIGJ5
dGVPZmZzZXQsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5k
aWFuKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0
RmxvYXQzMih1bnNpZ25lZCBsb25nIGJ5dGVPZmZzZXQsIGZsb2F0IHZhbHVlLCBvcHRpb25hbCBi
b29sZWFuIGxpdHRsZUVuZGlhbik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHNldEZsb2F0NjQodW5zaWduZWQgbG9uZyBieXRlT2Zmc2V0LCBkb3VibGUg
dmFsdWUsIG9wdGlvbmFsIGJvb2xlYW4gbGl0dGxlRW5kaWFuKTsKLX07Ci0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkocmV2aXNpb24gMTU0MDkw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQzMkFycmF5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDEw
IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAg
R2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0
b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNH
ZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9t
VG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9Zmxv
YXQsCi0gICAgSW1wbGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDMy
QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNf
UEVSX0VMRU1FTlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoOwotICAgIEZsb2F0MzJBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9w
dGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBs
b25nIGVuZCk7Ci0KLSAgICBnZXR0ZXIgZmxvYXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0g
ICAgLy8gdm9pZCBzZXQoRmxvYXQzMkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Zsb2F0NjRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkocmV2aXNpb24gMTU0MDkw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRmxvYXQ2NEFycmF5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVsKLSAgICBHbG9iYWxDb250ZXh0PURP
TVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRlPVR5cGVk
QXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9OYXRpdmVP
YmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0LAotICAg
IERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1kb3VibGUsCi0gICAgSW1wbGVt
ZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBGbG9hdDY0QXJyYXkgOiBBcnJheUJ1
ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSA4
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIEZs
b2F0NjRBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcgc3Rh
cnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAg
ICBnZXR0ZXIgZG91YmxlICh1bnNpZ25lZCBsb25nIGluZGV4KTsKLQotICAgIC8vIHZvaWQgc2V0
KEZsb2F0NjRBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAg
IC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25n
IG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbnQ4QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ludDhBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ludDhBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckds
b2JhbFNjb3BlLAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0
b21JbmRleGVkU2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05v
U3RhdGljVGFibGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0
YW50cywKLSAgICBUeXBlZEFycmF5PXNpZ25lZCBjaGFyLAotICAgIEltcGxlbWVudGF0aW9uTmFt
ZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgSW50OEFycmF5IDogQXJyYXlCdWZmZXJWaWV3IHsKLSAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0gMTsKLQotICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJbnQ4QXJyYXkgc3ViYXJy
YXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIGJ5dGUgKHVuc2ln
bmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoSW50OEFycmF5IGFycmF5LCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9u
Zz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgp
OwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDE2QXJyYXkuaWRsCShy
ZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbnQxNkFycmF5
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDEwIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3BlLAot
ICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVkU2V0
dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFibGVz
LAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAgICBU
eXBlZEFycmF5PXNob3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRl
cmZhY2UgSW50MTZBcnJheSA6IEFycmF5QnVmZmVyVmlldyB7Ci0gICAgY29uc3QgdW5zaWduZWQg
bG9uZyBCWVRFU19QRVJfRUxFTUVOVCA9IDI7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgSW50MTZBcnJheSBzdWJhcnJheShbRGVmYXVsdD1VbmRl
ZmluZWRdIG9wdGlvbmFsIGxvbmcgc3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4
KTsKLQotICAgIC8vIHZvaWQgc2V0KEludDE2QXJyYXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVk
IGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNldChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0
aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ludDMyQXJyYXkuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLVsKLSAgICBHbG9iYWxDb250
ZXh0PURPTVdpbmRvdyZXb3JrZXJHbG9iYWxTY29wZSwKLSAgICBDb25zdHJ1Y3RvclRlbXBsYXRl
PVR5cGVkQXJyYXksCi0gICAgQ3VzdG9tSW5kZXhlZFNldHRlciwKLSAgICBKU0dlbmVyYXRlVG9O
YXRpdmVPYmplY3QsCi0gICAgSlNOb1N0YXRpY1RhYmxlcywKLSAgICBDdXN0b21Ub0pTT2JqZWN0
LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi0gICAgVHlwZWRBcnJheT1pbnQsCi0gICAgSW1w
bGVtZW50YXRpb25OYW1lc3BhY2U9SlNDCi1dIGludGVyZmFjZSBJbnQzMkFycmF5IDogQXJyYXlC
dWZmZXJWaWV3IHsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIEJZVEVTX1BFUl9FTEVNRU5UID0g
NDsKLQotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKLSAgICBJ
bnQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFy
dCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAgICBn
ZXR0ZXIgbG9uZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0KLSAgICAvLyB2b2lkIHNldChJbnQz
MkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAgLy8gdm9p
ZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0
KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1VpbnQ4QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1VpbnQ4QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9VaW50OEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFs
U2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUlu
ZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0
aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRz
LAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVz
cGFjZT1KU0MKLV0gaW50ZXJmYWNlIFVpbnQ4QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAxOwotCi0gICAgcmVhZG9u
bHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQ4QXJyYXkgc3ViYXJy
YXkoW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25n
IGVuZCk7Ci0KLSAgICBnZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAg
Ly8gdm9pZCBzZXQoVWludDhBcnJheSBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpOwotICAgIC8vIHZvaWQgc2V0KHNlcXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNp
Z25lZCBsb25nIG9mZnNldCk7Ci0gICAgdm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDhDbGFtcGVkQXJyYXkuaWRsCShyZXZpc2lvbiAx
NTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50OENsYW1wZWRBcnJheS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1bCi0gICAg
R2xvYmFsQ29udGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0
b3JUZW1wbGF0ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNH
ZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9t
VG9KU09iamVjdCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5z
aWduZWQgY2hhciwKLSAgICBJbXBsZW1lbnRhdGlvbk5hbWVzcGFjZT1KU0MKLV0gaW50ZXJmYWNl
IFVpbnQ4Q2xhbXBlZEFycmF5IDogVWludDhBcnJheSB7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9u
ZyBCWVRFU19QRVJfRUxFTUVOVCA9IDE7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBsZW5ndGg7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkgc3ViYXJyYXkoW0RlZmF1bHQ9
VW5kZWZpbmVkXSBvcHRpb25hbCBsb25nIHN0YXJ0LCBvcHRpb25hbCBsb25nIGVuZCk7Ci0KLSAg
ICBnZXR0ZXIgb2N0ZXQgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gRklYTUU6IE1p
c3Npbmcgb3RoZXIgc2V0dGVycyEKLSAgICAvLyB2b2lkIHNldChVaW50OENsYW1wZWRBcnJheSBh
cnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotICAgIC8vIHZvaWQgc2V0KHNl
cXVlbmNlPGxvbmc+IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0gICAg
dm9pZCBzZXQoKTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MTZB
cnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvVWludDE2
QXJyYXkuaWRsCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9VaW50MTZBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotWwotICAgIEdsb2JhbENvbnRleHQ9RE9NV2luZG93Jldvcmtlckdsb2JhbFNjb3Bl
LAotICAgIENvbnN0cnVjdG9yVGVtcGxhdGU9VHlwZWRBcnJheSwKLSAgICBDdXN0b21JbmRleGVk
U2V0dGVyLAotICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKLSAgICBKU05vU3RhdGljVGFi
bGVzLAotICAgIEN1c3RvbVRvSlNPYmplY3QsCi0gICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLSAg
ICBUeXBlZEFycmF5PXVuc2lnbmVkIHNob3J0LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNl
PUpTQwotXSBpbnRlcmZhY2UgVWludDE2QXJyYXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVSX0VMRU1FTlQgPSAyOwotCi0gICAgcmVhZG9ubHkg
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIFVpbnQxNkFycmF5IHN1YmFycmF5
KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBl
bmQpOwotCi0gICAgZ2V0dGVyIHVuc2lnbmVkIHNob3J0ICh1bnNpZ25lZCBsb25nIGluZGV4KTsK
LQotICAgIC8vIHZvaWQgc2V0KFVpbnQxNkFycmF5IGFycmF5LCBvcHRpb25hbCB1bnNpZ25lZCBs
b25nIG9mZnNldCk7Ci0gICAgLy8gdm9pZCBzZXQoc2VxdWVuY2U8bG9uZz4gYXJyYXksIG9wdGlv
bmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICB2b2lkIHNldCgpOwotfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9VaW50MzJBcnJheS5pZGwJKHJldmlzaW9uIDE1NDA5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1VpbnQzMkFycmF5LmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1bCi0gICAgR2xvYmFsQ29u
dGV4dD1ET01XaW5kb3cmV29ya2VyR2xvYmFsU2NvcGUsCi0gICAgQ29uc3RydWN0b3JUZW1wbGF0
ZT1UeXBlZEFycmF5LAotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCi0gICAgSlNHZW5lcmF0ZVRv
TmF0aXZlT2JqZWN0LAotICAgIEpTTm9TdGF0aWNUYWJsZXMsCi0gICAgQ3VzdG9tVG9KU09iamVj
dCwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotICAgIFR5cGVkQXJyYXk9dW5zaWduZWQgaW50
LAotICAgIEltcGxlbWVudGF0aW9uTmFtZXNwYWNlPUpTQwotXSBpbnRlcmZhY2UgVWludDMyQXJy
YXkgOiBBcnJheUJ1ZmZlclZpZXcgewotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgQllURVNfUEVS
X0VMRU1FTlQgPSA0OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVu
Z3RoOwotICAgIFVpbnQzMkFycmF5IHN1YmFycmF5KFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9u
YWwgbG9uZyBzdGFydCwgb3B0aW9uYWwgbG9uZyBlbmQpOwotCi0gICAgZ2V0dGVyIHVuc2lnbmVk
IGxvbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotCi0gICAgLy8gdm9pZCBzZXQoVWludDMyQXJy
YXkgYXJyYXksIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLSAgICAvLyB2b2lkIHNl
dChzZXF1ZW5jZTxsb25nPiBhcnJheSwgb3B0aW9uYWwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwot
ICAgIHZvaWQgc2V0KCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw2ICs3NCw4IEBACiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAj
aW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKIAorI2luY2x1ZGUgPHJ1bnRpbWUvT3Bl
cmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNs
dWRlIDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgpAQCAtMzQxNSw3ICszNDE3LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhlbHMoRwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0eXBlLgot
ICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50OCkg
eworICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNTE1Niw3ICs1MTU4LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RgogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0
VHlwZSgpICE9IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQ4KSB7CisgICAgICAgIGlmIChwaXhl
bHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewogICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJh
eSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MTY0LDEzICs1
MTY2LDEzIEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEYKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgogICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgaWYg
KHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewogICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVp
bnQxNkFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0
dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBBcnJheUJ1ZmZlclZp
ZXc6OlR5cGVGbG9hdDMyKSB7CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6
OlR5cGVGbG9hdDMyKSB7CiAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0
IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NyeXB0by5jcHAJKHJldmlzaW9uIDE1
NDA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ3J5cHRvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTQgKzQxLDcgQEAgbmFtZXNwYWNlIHsKIAogYm9vbCBpc0ludGVnZXJBcnJheShBcnJh
eUJ1ZmZlclZpZXcqIGFycmF5KQogewotICAgIEFycmF5QnVmZmVyVmlldzo6Vmlld1R5cGUgdHlw
ZSA9IGFycmF5LT5nZXRUeXBlKCk7Ci0gICAgcmV0dXJuIHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3
OjpUeXBlSW50OAotICAgICAgICAgICB8fCB0eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVp
bnQ4Ci0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlVWludDhDbGFt
cGVkCi0gICAgICAgICAgIHx8IHR5cGUgPT0gQXJyYXlCdWZmZXJWaWV3OjpUeXBlSW50MTYKLSAg
ICAgICAgICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVVaW50MTYKLSAgICAgICAg
ICAgfHwgdHlwZSA9PSBBcnJheUJ1ZmZlclZpZXc6OlR5cGVJbnQzMgotICAgICAgICAgICB8fCB0
eXBlID09IEFycmF5QnVmZmVyVmlldzo6VHlwZVVpbnQzMjsKKyAgICByZXR1cm4gSlNDOjppc0lu
dChhcnJheS0+Z2V0VHlwZSgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0ICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDLmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2lt
cG9ydCAiRGF0YVZpZXcuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgog
I2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIK
QEAgLTQ3LDYgKzQ2LDkgQEAKICNpbXBvcnQgIldlYkNvcmVBVkZSZXNvdXJjZUxvYWRlci5oIgog
I2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8b2JqYy9ydW50aW1l
Lmg+CisjaW1wb3J0IDxydW50aW1lL0RhdGFWaWV3Lmg+CisjaW1wb3J0IDxydW50aW1lL09wZXJh
dGlvbnMuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbXBvcnQg
PHJ1bnRpbWUvVWludDE2QXJyYXkuaD4KICNpbXBvcnQgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4K
ICNpbXBvcnQgPHJ1bnRpbWUvVWludDhBcnJheS5oPgpAQCAtOTIzLDggKzkyNSw4IEBAIGJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgLy8gWzQgYnl0ZXM6
IGtleVVSSSBzaXplXSwgW2tleVVSSSBzaXplIGJ5dGVzOiBrZXlVUkldCiAgICAgICAgIHVuc2ln
bmVkIGtleVVSSVNpemUgPSBrZXlVUkkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOwogICAgICAg
ICBSZWZQdHI8QXJyYXlCdWZmZXI+IGluaXREYXRhQnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0
ZSg0ICsga2V5VVJJU2l6ZSwgMSk7Ci0gICAgICAgIFJlZlB0cjxEYXRhVmlldz4gaW5pdERhdGFW
aWV3ID0gRGF0YVZpZXc6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgMCwgaW5pdERhdGFCdWZmZXIt
PmJ5dGVMZW5ndGgoKSk7Ci0gICAgICAgIGluaXREYXRhVmlldy0+c2V0VWludDMyKDAsIGtleVVS
SVNpemUsIHRydWUsIElHTk9SRV9FWENFUFRJT04pOworICAgICAgICBSZWZQdHI8SlNDOjpEYXRh
Vmlldz4gaW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVmZmVy
LCAwLCBpbml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgaW5pdERhdGFWaWV3
LT5zZXQ8dWludDMyX3Q+KDAsIGtleVVSSVNpemUsIHRydWUpOwogCiAgICAgICAgIFJlZlB0cjxV
aW50MTZBcnJheT4ga2V5VVJJQXJyYXkgPSBVaW50MTZBcnJheTo6Y3JlYXRlKGluaXREYXRhQnVm
ZmVyLCA0LCBrZXlVUkkubGVuZ3RoKCkpOwogICAgICAgICBrZXlVUklBcnJheS0+c2V0UmFuZ2Uo
a2V5VVJJLmNoYXJhY3RlcnMoKSwga2V5VVJJLmxlbmd0aCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGNo
YXIpLCAwKTsKQEAgLTEyMDQsMTMgKzEyMDYsMTMgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOgogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gaW5pdERhdGFCdWZmZXIg
PSBpbml0RGF0YS0+YnVmZmVyKCk7CiAKICAgICAvLyBVc2UgYSBEYXRhVmlldyB0byByZWFkIHVp
bnQzMiB2YWx1ZXMgZnJvbSB0aGUgYnVmZmVyLCBhcyBVaW50MzJBcnJheSByZXF1aXJlcyB0aGUg
cmVhZHMgYmUgYWxpZ25lZCBvbiA0LWJ5dGUgYm91bmRhcmllcy4gCi0gICAgUmVmUHRyPERhdGFW
aWV3PiBpbml0RGF0YVZpZXcgPSBEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCAwLCBp
bml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICBSZWZQdHI8SlNDOjpEYXRhVmlldz4g
aW5pdERhdGFWaWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCAwLCBp
bml0RGF0YUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAgICB1aW50MzJfdCBvZmZzZXQgPSAwOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgc3RhdHVzID0gdHJ1ZTsKIAotICAg
IHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0VWludDMyKG9mZnNldCwg
dHJ1ZSwgZWMpOworICAgIHVpbnQzMl90IGtleVVSSUxlbmd0aCA9IGluaXREYXRhVmlldy0+Z2V0
PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwogICAgIG9mZnNldCArPSA0OwotICAg
IGlmIChlYyB8fCBvZmZzZXQgKyBrZXlVUklMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCisg
ICAgaWYgKCFzdGF0dXMgfHwgb2Zmc2V0ICsga2V5VVJJTGVuZ3RoID4gaW5pdERhdGEtPmxlbmd0
aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8VWludDE2QXJyYXk+IGtl
eVVSSUFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0YUJ1ZmZlciwgb2Zmc2V0LCBr
ZXlVUklMZW5ndGgpOwpAQCAtMTIyMCw5ICsxMjIyLDkgQEAgYm9vbCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOgogICAgIGtleVVSSSA9IFN0cmluZyhrZXlVUklBcnJheS0+ZGF0
YSgpLCBrZXlVUklMZW5ndGggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgICBvZmZzZXQg
Kz0ga2V5VVJJTGVuZ3RoOwogCi0gICAgdWludDMyX3Qga2V5SURMZW5ndGggPSBpbml0RGF0YVZp
ZXctPmdldFVpbnQzMihvZmZzZXQsIHRydWUsIGVjKTsKKyAgICB1aW50MzJfdCBrZXlJRExlbmd0
aCA9IGluaXREYXRhVmlldy0+Z2V0PHVpbnQzMl90PihvZmZzZXQsIHRydWUsICZzdGF0dXMpOwog
ICAgIG9mZnNldCArPSA0OwotICAgIGlmIChlYyB8fCBvZmZzZXQgKyBrZXlJRExlbmd0aCA+IGlu
aXREYXRhLT5sZW5ndGgoKSkKKyAgICBpZiAoIXN0YXR1cyB8fCBvZmZzZXQgKyBrZXlJRExlbmd0
aCA+IGluaXREYXRhLT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVm
UHRyPFVpbnQxNkFycmF5PiBrZXlJREFycmF5ID0gVWludDE2QXJyYXk6OmNyZWF0ZShpbml0RGF0
YUJ1ZmZlciwgb2Zmc2V0LCBrZXlJRExlbmd0aCk7CkBAIC0xMjMyLDkgKzEyMzQsOSBAQCBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAga2V5SUQgPSBTdHJpbmco
a2V5SURBcnJheS0+ZGF0YSgpLCBrZXlJRExlbmd0aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCkp
OwogICAgIG9mZnNldCArPSBrZXlJRExlbmd0aDsKIAotICAgIHVpbnQzMl90IGNlcnRpZmljYXRl
TGVuZ3RoID0gaW5pdERhdGFWaWV3LT5nZXRVaW50MzIob2Zmc2V0LCB0cnVlLCBlYyk7CisgICAg
dWludDMyX3QgY2VydGlmaWNhdGVMZW5ndGggPSBpbml0RGF0YVZpZXctPmdldDx1aW50MzJfdD4o
b2Zmc2V0LCB0cnVlLCAmc3RhdHVzKTsKICAgICBvZmZzZXQgKz0gNDsKLSAgICBpZiAoZWMgfHwg
b2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3RoKCkpCisgICAgaWYg
KCFzdGF0dXMgfHwgb2Zmc2V0ICsgY2VydGlmaWNhdGVMZW5ndGggPiBpbml0RGF0YS0+bGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNlcnRpZmljYXRlID0gVWludDhBcnJh
eTo6Y3JlYXRlKGluaXREYXRhQnVmZmVyLCBvZmZzZXQsIGNlcnRpZmljYXRlTGVuZ3RoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTIgKzM3LDkgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0
ZXJFZmZlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlIDxydW50
aW1lL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwotfQotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEN1c3RvbUZpbHRlclJlbmRlcmVyOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlRleHRT
dHJlYW0uaCIKIAorI2luY2x1ZGUgPHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFy
YWxsZWxKb2JzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAxNTQwOTApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNs
dWRlIDxydW50aW1lL09wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OENsYW1wZWRBcnJheS5oPgogCiAjaWYg
SEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9N
b2NrQ0RNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0u
Y3BwCShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tDRE0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJDRE0uaCIK
ICNpbmNsdWRlICJNZWRpYUtleUVycm9yLmgiCisjaW5jbHVkZSA8cnVudGltZS9PcGVyYXRpb25z
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvVWludDhBcnJheS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTQwOTApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wOC0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgYmUgcmV3cml0dGVuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkwNjQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KKyAgICAgICAgCisgICAgICAgIFlvdSBk
b24ndCBuZWVkIHRvIGluY2x1ZGUgSlNVaW50OEFycmF5IGFueW1vcmUgaWYgeW91IGp1c3Qgd2Fu
dCB0bworICAgICAgICB1bndyYXAgb25lOyBKU0RPTUJpbmRpbmcgZ2l2ZXMgeW91IGFsbCBvZiB0
aGUgdGhpbmdzIHlvdSBuZWVkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisKIDIwMTMtMDgtMTQgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMTk4Mjc+IEFsbG93
IHByaW1hcnkgcGx1Zy1pbiBkZXRlY3Rpb24gdG8gcnVuIG1vcmUgdGhhbiBvbmNlIGlmIG5lY2Vz
c2FyeQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDE1NDA5MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9s
b2NhdGlvblBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSlNOb3RpZmljYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTVWlu
dDhBcnJheS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGFnZUdyb3VwLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KSW5kZXg6IFNv
dXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2F1dG90
b29scy9zeW1ib2xzLmZpbHRlcgkocmV2aXNpb24gMTU0MDkwKQorKysgU291cmNlL2F1dG90b29s
cy9zeW1ib2xzLmZpbHRlcgkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw2IEBAIF9aTjdX
ZWJDb3JlOUZyYW1lVmlldzE3c2V0VHJhY2tzUmVwYWludHMKIF9aTks3V2ViQ29yZTVGcmFtZTI1
dHJhY2tlZFJlcGFpbnRSZWN0c0FzVGV4dEV2OwogX1pON1dlYkNvcmU0dG9KU0VQTjNKU0M5RXhl
Y1N0YXRlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOM1dURjExQXJyYXlCdWZmZXJFOwogX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyNnJlbG9hZEViOwotX1pON1dlYkNvcmUxM3RvQXJyYXlCdWZm
ZXJFTjNKU0M3SlNWYWx1ZUU7CiBfWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFM
YXlvdXRQb2ludEVqampqOwogX1pON1dlYkNvcmUxNUhpdFRlc3RMb2NhdGlvbjEycmVjdEZvclBv
aW50RVJLTlNfMTFMYXlvdXRQb2ludEVqampqOwogX1pON1dlYkNvcmUyMVNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTZjcmVhdGVFUktOM1dURjZTdHJpbmdFOwpAQCAtMzA3LDggKzMwNiw2IEBAIF9aTjdX
ZWJDb3JlMTRDbGllbnRSZWN0TGlzdEMxRVJLTjNXVEY2VmUKIF9aTjdXZWJDb3JlMTRDbGllbnRS
ZWN0TGlzdEMxRVJLTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFF1YWRFTGowRU5TMV8xNUNyYXNoT25P
dmVyZmxvd0VFRTsKIF9aTjdXZWJDb3JlMTBUaW1lUmFuZ2VzM2FkZEVkZDsKIF9aTjdXZWJDb3Jl
MTJ0b1RpbWVSYW5nZXNFTjNKU0M3SlNWYWx1ZUU7Ci1fWk43V2ViQ29yZTE0dG9GbG9hdDMyQXJy
YXlFTjNKU0M3SlNWYWx1ZUU7Ci1fWk43V2ViQ29yZTR0b0pTRVBOM0pTQzlFeGVjU3RhdGVFUE5T
XzE3SlNET01HbG9iYWxPYmplY3RFUE5TMF8xMUFycmF5QnVmZmVyRTsKIF9aTjdXZWJDb3JlNHRv
SlNFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfMTBUaW1lUmFu
Z2VzRTsKIF9aTks3V2ViQ29yZTEwVGltZVJhbmdlczduZWFyZXN0RWQ7CiBfWk5LN1dlYkNvcmUx
M0hpdFRlc3RSZXN1bHQxOXJlY3RCYXNlZFRlc3RSZXN1bHRFdjsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1NDA5MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYzIEBACisyMDEzLTA4LTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgVHlwZWQgYXJyYXlzIHNob3VsZCBiZSByZXdyaXR0ZW4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTA2NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXkt
c2V0LWludmFsaWQtYXJndW1lbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS1zZXQtb3V0LW9mLWJvdW5kcy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sOgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2RhdGEtdmlldy1jcmFzaC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNv
bnRyb2wuanM6CisgICAgICAgIChjaGVja1ZpZXcpOgorICAgICAgICAqIGZhc3QvZG9tL2NhbGwt
YS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIGZh
c3QvanMvY29uc3RydWN0b3ItbGVuZ3RoLmh0bWw6CisgICAgICAgICogZmFzdC9qcy9nbG9iYWwt
Y29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZGVkaWNhdGVkLXdvcmtlci1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLXNo
YXJlZC13b3JrZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJh
eUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9u
Zy1saXZlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9B
cnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQtYnVmZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5
LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4
QXJyYXktdmlldy1hbGxvYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
cmVncmVzcy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLWh1Z2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXkt
YWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9u
Zy1saXZlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9J
bnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtaHVnZS1s
b25nLWxpdmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUlu
dDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9u
Zy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5q
czogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFy
cmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2UuanM6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJn
ZS1sb25nLWxpdmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXkt
YWxsb2MuanM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2pzL2NvbnN0cnVj
dG9yLWxlbmd0aC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViZ2wvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1s
OgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L3R5cGVkYXJyYXlzL2RhdGEtdmlldy10ZXN0Lmh0bWw6CisKIDIwMTMtMDgtMTQgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgRG9uJ3QgY29weSBqcy10ZXN0
LXByZSBpbiBjb29raWVzLXRlc3QtcHJlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9hcnJheS1zZXQtaW52YWxpZC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3Vt
ZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2FycmF5LXNldC1pbnZhbGlkLWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTIsMjcgKzIsMjcgQEAgVmVyaWZpZXMgdGhhdCBhdHRlbXB0aW5nIHRv
IHNldCBpbnZhbGlkIAogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLVBBU1MgdHlwZWRB
cnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50
cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJh
eSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4u
Ci1QQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVu
b3VnaCBhcmd1bWVudHMuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXku
c2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBv
dXQgb2YgcmFuZ2UuLgotUEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8g
d29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFT
UyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJv
cjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJh
eS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBh
cmd1bWVudC4KLVBBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1QQVNTIHR5cGVkQXJyYXku
c2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCi1Q
QVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEludmFsaWQgYXJndW1lbnQuCi1QQVNTIHR5cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEp
IHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFT
UyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgotUEFTUyB0eXBlZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LgotUEFTUyB0eXBlZEFycmF5LnNldChv
dGhlckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9m
IHJhbmdlLi4KLVBBU1MgdHlwZWRBcnJheS5zZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KLVBBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxk
JykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW52YWxpZCBhcmd1bWVudC4KLVBBU1MgdHlw
ZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IElu
ZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0eXBl
ZEFycmF5LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJz
dCBhcmd1bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChvdGhl
ckFycmF5LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBv
ZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1MgdHlwZWRBcnJheS5z
ZXQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJn
dW1lbnQuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5
cGVkQXJyYXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBS
YW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgor
UEFTUyB0eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVk
IGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxk
JykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFu
IG9iamVjdC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0
aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJl
IG91dCBvZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5
LnNldCgnaGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1
bWVudCBzaG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5
LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZz
ZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1MgdHlwZWRBcnJheS5zZXQoKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQu
CitQQVNTIHR5cGVkQXJyYXkuc2V0KCdoZWxsbyB3b3JsZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IEZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBvYmplY3QuCitQQVNTIHR5cGVkQXJy
YXkuc2V0KG90aGVyQXJyYXksIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBj
b25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB0
eXBlZEFycmF5LnNldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEV4cGVjdGVkIGF0IGxl
YXN0IG9uZSBhcmd1bWVudC4KK1BBU1MgdHlwZWRBcnJheS5zZXQoJ2hlbGxvIHdvcmxkJykgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIG9iamVj
dC4KK1BBU1MgdHlwZWRBcnJheS5zZXQob3RoZXJBcnJheSwgMSkgdGhyZXcgZXhjZXB0aW9uIFJh
bmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFuZCBsZW5ndGggYXJlIG91dCBv
ZiBib3VuZHMuCitQQVNTIHR5cGVkQXJyYXkuc2V0KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LgorUEFTUyB0eXBlZEFycmF5LnNldCgn
aGVsbG8gd29ybGQnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGaXJzdCBhcmd1bWVudCBz
aG91bGQgYmUgYW4gb2JqZWN0LgorUEFTUyB0eXBlZEFycmF5LnNldChvdGhlckFycmF5LCAxKSB0
aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5k
IGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldC1vdXQtb2YtYm91bmRzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTU0MDkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktc2V0LW91dC1vZi1ib3VuZHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00
LDI2ICs0LDI2IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAog
UmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzMzNTIgOiBQYXNzaW5nIGFycmF5IHRoYXQgaXMgdG9vIGxhcmdlIHRvIHNldCBtZXRob2Qg
b2YgV2ViR0xBcnJheXMgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCiBUZXN0aW5nIEludDhB
cnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwg
NSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2Uu
LgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVy
cm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91
bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2Yg
Ym91bmRzLgogVGVzdGluZyBVaW50OEFycmF5Ci1QQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwg
MSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCi1Q
QVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6
IEluZGV4IGlzIG91dCBvZiByYW5nZS4uCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1XSwgMSkg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0IGFu
ZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCitQQVNTIHdlYkdMQXJyYXkuc2V0KFs0LCA1LCA2
XSkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFJhbmdlIGNvbnNpc3Rpbmcgb2Ygb2Zmc2V0
IGFuZCBsZW5ndGggYXJlIG91dCBvZiBib3VuZHMuCiBUZXN0aW5nIEludDE2QXJyYXkKLVBBU1Mg
d2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5k
ZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJl
dyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2Vi
R0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2Ug
Y29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mg
d2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFu
Z2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFRl
c3RpbmcgVWludDE2QXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KLVBBU1Mgd2ViR0xB
cnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMg
b3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVdLCAxKSB0aHJldyBleGNl
cHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0aCBh
cmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBl
eGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZzZXQgYW5kIGxlbmd0
aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFRlc3RpbmcgSW50MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5
LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQg
b2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlv
biBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgorUEFTUyB3ZWJHTEFycmF5LnNl
dChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5n
IG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgorUEFTUyB3ZWJHTEFycmF5
LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBSYW5nZSBjb25zaXN0
aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2YgYm91bmRzLgogVGVzdGluZyBVaW50
MzJBcnJheQotUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFuZ2UuLgotUEFTUyB3ZWJHTEFycmF5LnNldChb
NCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9yOiBJbmRleCBpcyBvdXQgb2YgcmFu
Z2UuLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNV0sIDEpIHRocmV3IGV4Y2VwdGlvbiBSYW5n
ZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQgb2Yg
Ym91bmRzLgorUEFTUyB3ZWJHTEFycmF5LnNldChbNCwgNSwgNl0pIHRocmV3IGV4Y2VwdGlvbiBS
YW5nZUVycm9yOiBSYW5nZSBjb25zaXN0aW5nIG9mIG9mZnNldCBhbmQgbGVuZ3RoIGFyZSBvdXQg
b2YgYm91bmRzLgogVGVzdGluZyBGbG9hdDMyQXJyYXkKLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQs
IDVdLCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdl
Li4KLVBBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VF
cnJvcjogSW5kZXggaXMgb3V0IG9mIHJhbmdlLi4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQsIDVd
LCAxKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBvZmZz
ZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KK1BBU1Mgd2ViR0xBcnJheS5zZXQoWzQs
IDUsIDZdKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogUmFuZ2UgY29uc2lzdGluZyBvZiBv
ZmZzZXQgYW5kIGxlbmd0aCBhcmUgb3V0IG9mIGJvdW5kcy4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5
LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDE5ICs0LDkgQEAg
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQQogCiBQQVNTIHRlc3RTbGlj
ZQogdGVzdCBpbmhlcml0YW5jZSBoaWVyYXJjaHkgb2YgdHlwZWQgYXJyYXkgdmlld3MKLVBBU1Mg
QXJyYXlCdWZmZXJWaWV3IGRvZXMgbm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRl
ZCBhdHRyaWJ1dGUgYW5kIHNob3VsZCBiZSBkZWZpbmVkCi1QQVNTIG5ldyBJbnQ4QXJyYXkoMSkg
aW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFTUyBuZXcgVWludDhBcnJheSgx
KSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBVaW50OENsYW1w
ZWRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBpcyB0cnVlCi1QQVNTIG5ldyBJ
bnQxNkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3
IFVpbnQxNkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1Mg
bmV3IEludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQotUEFT
UyBuZXcgVWludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcgaXMgdHJ1ZQot
UEFTUyBuZXcgRmxvYXQzMkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3IGlzIHRy
dWUKLVBBU1MgbmV3IEZsb2F0NjRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldyBp
cyB0cnVlCi1QQVNTIG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpIGluc3RhbmNlb2Yg
QXJyYXlCdWZmZXJWaWV3IGlzIHRydWUKLVBBU1MgbmV3IEFycmF5QnVmZmVyVmlldygpIHRocmV3
IFR5cGVFcnJvcgotUEFTUyBuZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50
OEFycmF5IGlzIHRydWUKK1BBU1MgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQg
YW5kIGlzCitXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5nIGFyZ3VtZW50cworUEFTUyBu
ZXcgVWludDhDbGFtcGVkQXJyYXkoMSkgaW5zdGFuY2VvZiBVaW50OEFycmF5IGlzIGZhbHNlCiBQ
QVNTIHRlc3QgRmxvYXQzMkFycmF5IFNldEFuZEdldFBvczEwVG9OZWcxMAogUEFTUyB0ZXN0IEZs
b2F0MzJBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcwogUEFTUyB0ZXN0IEZs
b2F0MzJBcnJheSBDb25zdHJ1Y3RXaXRoVHlwZWRBcnJheU9mU2lnbmVkVmFsdWVzCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5o
dG1sCShyZXZpc2lvbiAxNTQwOTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9h
cnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTExOSwyNiArMTE5LDEyIEBA
IGZ1bmN0aW9uIHRlc3RJbmhlcml0YW5jZUhpZXJhcmNoeSgpIHsKIAogICB0cnkgewogICAgIHZh
ciBmb28gPSBBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdGVzdFBhc3NlZCgnQXJyYXlCdWZmZXJWaWV3
IGRvZXMgbm90IGhhdmUgW05vSW50ZXJmYWNlT2JqZWN0XSBleHRlbmRlZCBhdHRyaWJ1dGUgYW5k
IHNob3VsZCBiZSBkZWZpbmVkJyk7Ci0KLSAgICBzaG91bGRCZSgnbmV3IEludDhBcnJheSgxKSBp
bnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBV
aW50OEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBz
aG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJW
aWV3JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IEludDE2QXJyYXkoMSkgaW5zdGFuY2Vv
ZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDE2QXJy
YXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJl
KCduZXcgSW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7
Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50MzJBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVy
VmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBGbG9hdDMyQXJyYXkoMSkgaW5zdGFu
Y2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgRmxvYXQ2
NEFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAgICBzaG91
bGRCZSgnbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcig4KSkgaW5zdGFuY2VvZiBBcnJheUJ1
ZmZlclZpZXcnLCAndHJ1ZScpOwotCi0gICAgc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24o
KSB7IG5ldyBBcnJheUJ1ZmZlclZpZXcoKSB9LCAibmV3IEFycmF5QnVmZmVyVmlldygpIik7Cisg
ICAgdGVzdEZhaWxlZCgiQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYnV0IGlz
IGRlZmluZWQiKTsKICAgfSBjYXRjaCAoZSkgewotICAgIHRlc3RGYWlsZWQoJ0FycmF5QnVmZmVy
VmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVjdF0gZXh0ZW5kZWQgYXR0cmlidXRl
IGJ1dCB3YXMgbm90IGRlZmluZWQnKTsKKyAgICB0ZXN0UGFzc2VkKCdBcnJheUJ1ZmZlclZpZXcg
c2hvdWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMnKTsKICAgfQogCi0gIC8vIFRoZXJlIGlzIGN1cnJl
bnRseSBvbmx5IG9uZSBraW5kIG9mIHZpZXcgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIKLSAg
c2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkn
LCAndHJ1ZScpOworICBzaG91bGRCZSgnbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDEpIGluc3RhbmNl
b2YgVWludDhBcnJheScsIGZhbHNlKTsKIH0KIAogLy8KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2RhdGEtdmlldy1jcmFzaC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZGF0YS12aWV3LWNyYXNoLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMTU0MDkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZGF0
YS12aWV3LWNyYXNoLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw4ICsyLDggQEAg
VGVzdCB0aGF0IERhdGFWaWV3IGRvZXMgbm90IGNyYXNoIHdpdGggYgogCiBPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCiAKLVBBU1MgdmlldyA9IG5ldyBEYXRhVmlldyhhcnJheS5idWZmZXIsIC00
NTAwMDAwMDAwKSB0aHJldyBleGNlcHRpb24gUmFuZ2VFcnJvcjogU2l6ZSBpcyB0b28gbGFyZ2Ug
KG9yIGlzIG5lZ2F0aXZlKS4uCi1QQVNTIHZpZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVmZmVy
LCAtNDUwMDAwMDAwMCwgNDUwMDAwMDAwMCkgdGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IFNp
emUgaXMgdG9vIGxhcmdlIChvciBpcyBuZWdhdGl2ZSkuLgorUEFTUyB2aWV3ID0gbmV3IERhdGFW
aWV3KGFycmF5LmJ1ZmZlciwgLTQ1MDAwMDAwMDApIHRocmV3IGV4Y2VwdGlvbiBSYW5nZUVycm9y
OiBCeXRlIG9mZnNldCBhbmQgbGVuZ3RoIG91dCBvZiByYW5nZSBvZiBidWZmZXIuCitQQVNTIHZp
ZXcgPSBuZXcgRGF0YVZpZXcoYXJyYXkuYnVmZmVyLCAtNDUwMDAwMDAwMCwgNDUwMDAwMDAwMCkg
dGhyZXcgZXhjZXB0aW9uIFJhbmdlRXJyb3I6IEJ5dGUgb2Zmc2V0IGFuZCBsZW5ndGggb3V0IG9m
IHJhbmdlIG9mIGJ1ZmZlci4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVT
VCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRl
c3RzL2FycmF5YnVmZmVyLXRyYW5zZmVyLW9mLWNvbnRyb2wuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2FycmF5YnVmZmVyLXRyYW5z
ZmVyLW9mLWNvbnRyb2wuanMJKHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9hcnJheWJ1ZmZlci10cmFuc2Zlci1vZi1jb250cm9s
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBAIHZhciBiYXNpY0J1ZmZlclR5cGVz
ID0KICAgICBbIlVpbnQzMiIsIFVpbnQzMkFycmF5LCA0XSwKICAgICBbIkludDgiLCBJbnQ4QXJy
YXksIDFdLAogICAgIFsiVWludDgiLCBVaW50OEFycmF5LCAxXSwKKyAgICBbIlVpbnQ4Q2xhbXBl
ZCIsIFVpbnQ4Q2xhbXBlZEFycmF5LCAxXSwKICAgICBbIkludDE2IiwgSW50MTZBcnJheSwgMl0s
CiAgICAgWyJVaW50MTYiLCBVaW50MTZBcnJheSwgMl0sCiAgICAgWyJGbG9hdDMyIiwgRmxvYXQz
MkFycmF5LCA0XSwKQEAgLTIwMCw3ICsyMDEsNyBAQCBmdW5jdGlvbiBjaGVja1ZpZXcodGVzdE5h
bWUsIHR5cGVkQXJyYXlUCiAgICAgfQogICAgIGlmICh2aWV3LmJ1ZmZlci5ieXRlTGVuZ3RoICE9
PSBhcnJheVNpemUgfHwKICAgICAgICAgKCEodmlldyBpbnN0YW5jZW9mIERhdGFWaWV3KSAmJiB2
aWV3Lmxlbmd0aCAhPT0gYXJyYXlFZmZlY3RpdmVTaXplIC8gdmlldy5CWVRFU19QRVJfRUxFTUVO
VCkpIHsKLSAgICAgICAgdGVzdEZhaWxlZCh0ZXN0TmFtZSArICI6IHZpZXcgaGFzIHRoZSB3cm9u
ZyBsZW5ndGggKCIgKyB2aWV3Lmxlbmd0aCArICIpIik7CisgICAgICAgIHRlc3RGYWlsZWQodGVz
dE5hbWUgKyAiOiB2aWV3IGhhcyB0aGUgd3JvbmcgbGVuZ3RoICgiICsgdmlldy5sZW5ndGggKyAi
IGluc3RlYWQgb2YgIiArIGFycmF5RWZmZWN0aXZlU2l6ZSArICIgLyAiICsgdmlldy5CWVRFU19Q
RVJfRUxFTUVOVCArICIpIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYg
KHZpZXcuYnl0ZU9mZnNldCAhPT0gYXJyYXlPZmZzZXQpIHsKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1m
dW5jdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZG9tL2NhbGwtYS1jb25zdHJ1Y3Rvci1hcy1hLWZ1bmN0aW9uLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMywyNSArMywxNSBAQCBUaGlzIHRlc3RzIGlmIFR5cGVFcnJvciBpcyB0
aHJvd24gb3Igbm90CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAotUEFTUyBBcnJheUJ1
ZmZlcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFycmF5QnVmZmVyQ29uc3RydWN0b3Ig
aXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0FycmF5QnVmZmVyKCknKS4KIFNLSVAgQXVk
aW9Db250ZXh0IGlzIG5vdCBpbXBsZW1lbnRlZC4KIFBBU1MgRm9ybURhdGEoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBGb3JtRGF0YUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdGb3JtRGF0YSgpJykuCi1QQVNTIERhdGFWaWV3KCkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogRGF0YVZpZXdDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVh
dGluZyAnRGF0YVZpZXcoKScpLgogUEFTUyBFdmVudFNvdXJjZSgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEV2ZW50U291cmNlQ29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1
YXRpbmcgJ0V2ZW50U291cmNlKCknKS4KIFBBU1MgRmlsZVJlYWRlcigpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEZpbGVSZWFkZXJDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZh
bHVhdGluZyAnRmlsZVJlYWRlcigpJykuCi1QQVNTIEZsb2F0MzJBcnJheSgpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IEZsb2F0MzJBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9u
IChldmFsdWF0aW5nICdGbG9hdDMyQXJyYXkoKScpLgotUEFTUyBGbG9hdDY0QXJyYXkoKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBGbG9hdDY0QXJyYXlDb25zdHJ1Y3RvciBpcyBub3QgYSBm
dW5jdGlvbiAoZXZhbHVhdGluZyAnRmxvYXQ2NEFycmF5KCknKS4KIFBBU1MgQXVkaW8oKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBBdWRpb0NvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9u
IChldmFsdWF0aW5nICdBdWRpbygpJykuCiBQQVNTIEltYWdlKCkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogSW1hZ2VDb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAn
SW1hZ2UoKScpLgogUEFTUyBPcHRpb24oKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRp
b25Db25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnT3B0aW9uKCknKS4K
LVBBU1MgSW50MTZBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludDE2QXJyYXlD
b25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnSW50MTZBcnJheSgpJyku
Ci1QQVNTIEludDMyQXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnQzMkFycmF5
Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1YXRpbmcgJ0ludDMyQXJyYXkoKScp
LgotUEFTUyBJbnQ4QXJyYXkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnQ4QXJyYXlD
b25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnSW50OEFycmF5KCknKS4K
IFBBU1MgTWVzc2FnZUNoYW5uZWwoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdNZXNzYWdl
Q2hhbm5lbCgpJykuCiBQQVNTIFNoYXJlZFdvcmtlcigpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IFNoYXJlZFdvcmtlckNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5n
ICdTaGFyZWRXb3JrZXIoKScpLgotUEFTUyBVaW50MTZBcnJheSgpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFVpbnQxNkFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24gKGV2YWx1
YXRpbmcgJ1VpbnQxNkFycmF5KCknKS4KLVBBU1MgVWludDMyQXJyYXkoKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBVaW50MzJBcnJheUNvbnN0cnVjdG9yIGlzIG5vdCBhIGZ1bmN0aW9uIChl
dmFsdWF0aW5nICdVaW50MzJBcnJheSgpJykuCi1QQVNTIFVpbnQ4QXJyYXkoKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBVaW50OEFycmF5Q29uc3RydWN0b3IgaXMgbm90IGEgZnVuY3Rpb24g
KGV2YWx1YXRpbmcgJ1VpbnQ4QXJyYXkoKScpLgogUEFTUyBXZWJLaXRDU1NNYXRyaXgoKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3RvciBpcyBub3Qg
YSBmdW5jdGlvbiAoZXZhbHVhdGluZyAnV2ViS2l0Q1NTTWF0cml4KCknKS4KIFBBU1MgV2ViS2l0
UG9pbnQoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBXZWJLaXRQb2ludENvbnN0cnVjdG9y
IGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdXZWJLaXRQb2ludCgpJykuCiBQQVNTIFdl
YlNvY2tldCgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFdlYlNvY2tldENvbnN0cnVjdG9y
IGlzIG5vdCBhIGZ1bmN0aW9uIChldmFsdWF0aW5nICdXZWJTb2NrZXQoKScpLgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vY2FsbC1hLWNvbnN0cnVjdG9yLWFzLWEtZnVuY3Rpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9jYWxsLWEtY29uc3RydWN0b3ItYXMt
YS1mdW5jdGlvbi5odG1sCShyZXZpc2lvbiAxNTQwOTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9jYWxsLWEtY29uc3RydWN0b3ItYXMtYS1mdW5jdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC02LDcgKzYsNyBAQAogCiBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBpZiBUeXBlRXJyb3IgaXMg
dGhyb3duIG9yIG5vdCB3aGVuIHdlIGNhbGwgYSBjb25zdHJ1Y3RvciBhcyBhIG5vcm1hbCBmdW5j
dGlvbi4iKTsKIAotdmFyIHRlc3RfY29uc3RydWN0b3JzID0gWyJBcnJheUJ1ZmZlciIsICJBdWRp
b0NvbnRleHQiLCAiRm9ybURhdGEiLCAiRGF0YVZpZXciLCAiRXZlbnRTb3VyY2UiLCAiRmlsZVJl
YWRlciIsICJGbG9hdDMyQXJyYXkiLCAiRmxvYXQ2NEFycmF5IiwgIkF1ZGlvIiwgIkltYWdlIiwg
Ik9wdGlvbiIsICJJbnQxNkFycmF5IiwgIkludDMyQXJyYXkiLCAiSW50OEFycmF5IiwgIk1lc3Nh
Z2VDaGFubmVsIiwgIlNoYXJlZFdvcmtlciIsICJVaW50MTZBcnJheSIsICJVaW50MzJBcnJheSIs
ICJVaW50OEFycmF5IiwgIldlYktpdENTU01hdHJpeCIsICJXZWJLaXRQb2ludCIsICJXZWJTb2Nr
ZXQiLCAiV29ya2VyIiwgIlhNTEh0dHBSZXF1ZXN0IiwgIlhTTFRQcm9jZXNzb3IiXTsKK3ZhciB0
ZXN0X2NvbnN0cnVjdG9ycyA9IFsiQXVkaW9Db250ZXh0IiwgIkZvcm1EYXRhIiwgIkV2ZW50U291
cmNlIiwgIkZpbGVSZWFkZXIiLCAiQXVkaW8iLCAiSW1hZ2UiLCAiT3B0aW9uIiwgIk1lc3NhZ2VD
aGFubmVsIiwgIlNoYXJlZFdvcmtlciIsICJXZWJLaXRDU1NNYXRyaXgiLCAiV2ViS2l0UG9pbnQi
LCAiV2ViU29ja2V0IiwgIldvcmtlciIsICJYTUxIdHRwUmVxdWVzdCIsICJYU0xUUHJvY2Vzc29y
Il07CiAKIHRlc3RfY29uc3RydWN0b3JzLmZvckVhY2goZnVuY3Rpb24gKGNvbnN0cnVjdG9yKSB7
CiAgICAgaWYgKGV2YWwoIndpbmRvdy4iICsgY29uc3RydWN0b3IpKQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC5odG1sCShyZXZpc2lvbiAxNTQwOTApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xNSwxOCArMTUsMTggQEAgc2hvdWxkQmUoJ0Nsb3NlRXZlbnQubGVuZ3RoJywgJzEn
KTsKIHNob3VsZEJlKCdDdXN0b21FdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0RPTUZv
cm1EYXRhLmxlbmd0aCcsICcwJyk7CiBzaG91bGRCZSgnRE9NUGFyc2VyLmxlbmd0aCcsICcwJyk7
Ci1zaG91bGRCZSgnRGF0YVZpZXcubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdEYXRhVmlldy5s
ZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ0Vycm9yRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNob3Vs
ZEJlKCdFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ0V2ZW50U291cmNlLmxlbmd0aCcs
ICcxJyk7Ci1zaG91bGRCZSgnRmxvYXQzMkFycmF5Lmxlbmd0aCcsICcxJyk7Ci1zaG91bGRCZSgn
RmxvYXQ2NEFycmF5Lmxlbmd0aCcsICcxJyk7CitzaG91bGRCZSgnRmxvYXQzMkFycmF5Lmxlbmd0
aCcsICczJyk7CitzaG91bGRCZSgnRmxvYXQ2NEFycmF5Lmxlbmd0aCcsICczJyk7CiBzaG91bGRC
ZSgnRmlsZVJlYWRlci5sZW5ndGgnLCAnMCcpOwogc2hvdWxkQmUoJ0ZpbGVSZWFkZXJTeW5jLmxl
bmd0aCcsICcwJyk7CiBzaG91bGRCZSgnSGFzaENoYW5nZUV2ZW50Lmxlbmd0aCcsICcxJyk7Ci1z
aG91bGRCZSgnSW50MTZBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ0ludDMyQXJyYXku
bGVuZ3RoJywgJzEnKTsKLXNob3VsZEJlKCdJbnQ4QXJyYXkubGVuZ3RoJywgJzEnKTsKK3Nob3Vs
ZEJlKCdJbnQxNkFycmF5Lmxlbmd0aCcsICczJyk7CitzaG91bGRCZSgnSW50MzJBcnJheS5sZW5n
dGgnLCAnMycpOworc2hvdWxkQmUoJ0ludDhBcnJheS5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUo
J0ludGVudC5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ01lZGlhQ29udHJvbGxlci5sZW5ndGgn
LCAnMCcpOwogc2hvdWxkQmUoJ01lZGlhU3RyZWFtLmxlbmd0aCcsICcwJyk7CkBAIC00MiwxMCAr
NDIsMTAgQEAgc2hvdWxkQmUoJ1NoYXJlZFdvcmtlci5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUo
J1N0b3JhZ2VFdmVudC5sZW5ndGgnLCAnMScpOwogc2hvdWxkQmUoJ1RleHRUcmFja0N1ZS5sZW5n
dGgnLCAnMycpOwogc2hvdWxkQmUoJ1RyYWNrRXZlbnQubGVuZ3RoJywgJzEnKTsKLXNob3VsZEJl
KCdVaW50MTZBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUoJ1VpbnQzMkFycmF5Lmxlbmd0
aCcsICcxJyk7Ci1zaG91bGRCZSgnVWludDhBcnJheS5sZW5ndGgnLCAnMScpOwotc2hvdWxkQmUo
J1VpbnQ4Q2xhbXBlZEFycmF5Lmxlbmd0aCcsICcxJyk7CitzaG91bGRCZSgnVWludDE2QXJyYXku
bGVuZ3RoJywgJzMnKTsKK3Nob3VsZEJlKCdVaW50MzJBcnJheS5sZW5ndGgnLCAnMycpOworc2hv
dWxkQmUoJ1VpbnQ4QXJyYXkubGVuZ3RoJywgJzMnKTsKK3Nob3VsZEJlKCdVaW50OENsYW1wZWRB
cnJheS5sZW5ndGgnLCAnMycpOwogc2hvdWxkQmUoJ1dlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCcs
ICcxJyk7CiBzaG91bGRCZSgnV2ViS2l0QW5pbWF0aW9uRXZlbnQubGVuZ3RoJywgJzEnKTsKIHNo
b3VsZEJlKCdXZWJLaXRDU1NNYXRyaXgubGVuZ3RoJywgJzAnKTsKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRlZGljYXRlZC13b3JrZXIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNv
bnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWRlZGljYXRlZC13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxNTQwOTApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2dsb2JhbC1jb25zdHJ1Y3RvcnMt
YXR0cmlidXRlcy1kZWRpY2F0ZWQtd29ya2VyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNCwyMSArNCwxMSBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
CiAKIAogU3RhcnRpbmcgd29ya2VyOiBzY3JpcHQtdGVzdHMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1h
dHRyaWJ1dGVzLmpzCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS52YWx1ZSBpcyBBcnJheUJ1ZmZlcgotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVy
JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5oYXNPd25Qcm9w
ZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJh
eUJ1ZmZlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLnZhbHVlIGlzIEJsb2IKIFBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJyku
aGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0Jsb2InKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmNvbmZpZ3VyYWJsZSBp
cyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRGF0YVZpZXcnKS52YWx1ZSBpcyBEYXRhVmlldwotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVy
dHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFs
c2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdEYXRhVmlldycpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmNvbmZpZ3VyYWJsZSBp
cyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS52YWx1ZSBpcyBEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlJykuaGFzT3duUHJvcGVydHko
J2dldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUnKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKQEAgLTM5LDMxICsyOSw2IEBAIFBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3IKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGaWxlUmVhZGVyU3luYycpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJT
eW5jJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS52YWx1ZSBpcyBGbG9hdDMy
QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdGbG9hdDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMy
QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5lbnVt
ZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0
QXJyYXknKS52YWx1ZSBpcyBGbG9hdDY0QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMg
ZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9i
YWwsICdGbG9hdDY0QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuY29u
ZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykudmFsdWUgaXMgSW50MTZBcnJheQotUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJy
YXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJv
cGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MTZBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQx
NkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykudmFsdWUgaXMgSW50MzJB
cnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dv
cmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5
JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmVudW1lcmFibGUg
aXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdJbnQzMkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS52YWx1
ZSBpcyBJbnQ4QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJ
bnQ4QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5lbnVt
ZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dv
cmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hh
bm5lbCcpLnZhbHVlIGlzIE1lc3NhZ2VDaGFubmVsCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnTWVzc2FnZUNoYW5uZWwnKS5oYXNPd25Qcm9w
ZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQpAQCAtNzksMjYgKzQ0LDYgQEAgUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ1VSTCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBb
V29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmVu
dW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVUkwnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5Jyku
dmFsdWUgaXMgVWludDE2QXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBp
cyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2
QXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMg
dHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1VpbnQzMkFycmF5JykudmFsdWUgaXMgVWludDMyQXJyYXkKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3Nl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXkn
KS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS52YWx1ZSBpcyBVaW50OEFycmF5Ci1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWlu
dDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5oYXNP
d25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J1VpbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykudmFs
dWUgaXMgVWludDhDbGFtcGVkQXJyYXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFt
cGVkQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcpLnZhbHVlIGlzIFdlYlNv
Y2tldAogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ1dlYlNvY2tldCcpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1dlYlNvY2tldCcp
Lmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNvbnN0cnVjdG9ycy1hdHRyaWJ1dGVzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTU0MDkwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9i
YWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC04LDE2ICs4LDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsbwog
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9k
ZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FuYWx5c2VyTm9kZScpLmVudW1lcmFibGUgaXMgZmFs
c2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBbmFseXNl
ck5vZGUnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykudmFsdWUgaXMgQXJyYXlCdWZmZXIKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicp
Lmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuaGFzT3duUHJvcGVydHkoJ3NldCcp
IGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
QXJyYXlCdWZmZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJyYXlCdWZmZXInKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVm
ZmVyVmlldycpLnZhbHVlIGlzIEFycmF5QnVmZmVyVmlldwotUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyVmlldycpLmhhc093blByb3BlcnR5
KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGds
b2JhbCwgJ0FycmF5QnVmZmVyVmlldycpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQot
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVy
VmlldycpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlclZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQog
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0F0dHInKS52YWx1
ZSBpcyBBdHRyCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
QXR0cicpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0F0dHInKS5oYXNPd25Qcm9wZXJ0eSgnc2V0Jykg
aXMgZmFsc2UKQEAgLTI2MywxMSArMjUzLDYgQEAgUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsbwogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0RPTVRva2VuTGlzdCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQogUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RPTVRva2VuTGlzdCcpLmVu
dW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdET01Ub2tlbkxpc3QnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykudmFsdWUgaXMgRGF0
YVZpZXcKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRh
VmlldycpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuaGFzT3duUHJvcGVydHkoJ3Nl
dCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFs
LCAnRGF0YVZpZXcnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQog
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScp
LnZhbHVlIGlzIERlbGF5Tm9kZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0RlbGF5Tm9kZScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RlbGF5Tm9kZScpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtMzQ4LDE2ICszMzMsNiBAQCBQQVNTIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQogUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0ZpbGVSZWFkZXInKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlcicpLmNvbmZpZ3VyYWJsZSBpcyB0cnVl
Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFy
cmF5JykudmFsdWUgaXMgRmxvYXQzMkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQzMkFycmF5JykuZW51bWVyYWJs
ZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0Zsb2F0MzJBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykudmFsdWUgaXMgRmxvYXQ2
NEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxv
YXQ2NEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuaGFzT3duUHJv
cGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnRmxvYXQ2NEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmNvbmZp
Z3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRm9jdXNFdmVudCcpLnZhbHVlIGlzIEZvY3VzRXZlbnQKIFBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGb2N1c0V2ZW50JykuaGFzT3duUHJvcGVydHko
J2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnRm9jdXNFdmVudCcpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtNzQ4
LDIxICs3MjMsNiBAQCBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvCiBQ
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJyku
aGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW1hZ2VEYXRhJykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ltYWdlRGF0YScpLmNv
bmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MTZBcnJheScpLnZhbHVlIGlzIEludDE2QXJyYXkKLVBBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuaGFzT3duUHJvcGVy
dHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5l
bnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MTZBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLnZhbHVlIGlzIElu
dDMyQXJyYXkKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJ
bnQzMkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093blByb3Bl
cnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0ludDMyQXJyYXknKS5lbnVtZXJhYmxlIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50MzJBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
SW50OEFycmF5JykudmFsdWUgaXMgSW50OEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50
OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCi1QQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50OEFycmF5JykuZW51bWVyYWJsZSBpcyBm
YWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhB
cnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnS2V5Ym9hcmRFdmVudCcpLnZhbHVlIGlzIEtleWJvYXJkRXZlbnQK
IFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdLZXlib2FyZEV2
ZW50JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnS2V5Ym9hcmRFdmVudCcpLmhhc093blByb3BlcnR5
KCdzZXQnKSBpcyBmYWxzZQpAQCAtMTc5OCwyNiArMTc1OCw2IEBAIFBBU1MgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihnbG8KIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVUkwnKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKIFBBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVUkwnKS5lbnVtZXJhYmxl
IGlzIGZhbHNlCiBQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAn
VVJMJykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLnZhbHVlIGlzIFVpbnQxNkFycmF5Ci1QQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBp
cyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1Vp
bnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUK
LVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJh
eScpLnZhbHVlIGlzIFVpbnQzMkFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFs
c2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJB
cnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5JykuZW51bWVyYWJsZSBpcyBm
YWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQz
MkFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykudmFsdWUgaXMgVWludDhBcnJheQotUEFT
UyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5o
YXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlz
IGZhbHNlCi1QQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWlu
dDhBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OEFycmF5JykuY29uZmlndXJhYmxlIGlzIHRydWUKLVBB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRB
cnJheScpLnZhbHVlIGlzIFVpbnQ4Q2xhbXBlZEFycmF5Ci1QQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxz
ZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xh
bXBlZEFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuY29uZmlndXJhYmxlIGlz
IHRydWUKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdXYXZl
U2hhcGVyTm9kZScpLnZhbHVlIGlzIFdhdmVTaGFwZXJOb2RlCiBQQVNTIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2F2ZVNoYXBlck5vZGUnKS5oYXNPd25Qcm9wZXJ0
eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihn
bG9iYWwsICdXYXZlU2hhcGVyTm9kZScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMt
c2hhcmVkLXdvcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9nbG9iYWwtY29uc3RydWN0b3JzLWF0dHJpYnV0ZXMtc2hhcmVkLXdvcmtlci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZ2xvYmFsLWNv
bnN0cnVjdG9ycy1hdHRyaWJ1dGVzLXNoYXJlZC13b3JrZXItZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC00LDIxICs0LDExIEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEEKIAogCiBTdGFydGluZyB3b3JrZXI6IHNjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3Ry
dWN0b3JzLWF0dHJpYnV0ZXMuanMKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLnZhbHVlIGlzIEFycmF5QnVmZmVyCi1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnQXJy
YXlCdWZmZXInKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0g
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdBcnJheUJ1ZmZlcicpLmhh
c093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0FycmF5QnVmZmVyJykuZW51bWVyYWJsZSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0FycmF5QnVmZmVyJykuY29uZmlndXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykudmFsdWUgaXMgQmxv
YgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0Jsb2InKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuaGFzT3duUHJvcGVy
dHkoJ3NldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnQmxvYicpLmVudW1lcmFibGUgaXMgZmFsc2UKIFBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdCbG9iJykuY29uZmln
dXJhYmxlIGlzIHRydWUKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdEYXRhVmlldycpLnZhbHVlIGlzIERhdGFWaWV3Ci1QQVNTIFtXb3JrZXJd
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRGF0YVZpZXcnKS5oYXNP
d25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdEYXRhVmlldycpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0RhdGFWaWV3JykuZW51bWVyYWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0RhdGFWaWV3JykuY29uZmln
dXJhYmxlIGlzIHRydWUKIFBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLnZhbHVlIGlzIEV2ZW50U291cmNlCiBQQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRXZlbnRTb3Vy
Y2UnKS5oYXNPd25Qcm9wZXJ0eSgnZ2V0JykgaXMgZmFsc2UKIFBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdFdmVudFNvdXJjZScpLmhhc093blBy
b3BlcnR5KCdzZXQnKSBpcyBmYWxzZQpAQCAtMzQsMzEgKzI0LDYgQEAgUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcgogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ZpbGVSZWFkZXJTeW5jJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoZ2xvYmFsLCAnRmlsZVJlYWRlclN5bmMnKS5lbnVtZXJhYmxlIGlzIGZhbHNlCiBQQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnRmlsZVJl
YWRlclN5bmMnKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLnZhbHVlIGlzIEZs
b2F0MzJBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zs
b2F0MzJBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0MzJBcnJheScp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQot
UEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zs
b2F0NjRBcnJheScpLnZhbHVlIGlzIEZsb2F0NjRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blBy
b3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQn
KSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGdsb2JhbCwgJ0Zsb2F0NjRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtl
cl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdGbG9hdDY0QXJyYXkn
KS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS52YWx1ZSBpcyBJbnQxNkFycmF5Ci1Q
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnSW50
MTZBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDE2QXJyYXknKS5oYXNP
d25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQxNkFycmF5JykuZW51bWVyYWJsZSBpcyBmYWxz
ZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwg
J0ludDE2QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29ya2VyXSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS52YWx1ZSBpcyBJ
bnQzMkFycmF5Ci1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnSW50MzJBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQotUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDMy
QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdJbnQzMkFycmF5JykuZW51bWVy
YWJsZSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGdsb2JhbCwgJ0ludDMyQXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScp
LnZhbHVlIGlzIEludDhBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScpLmhhc093blByb3BlcnR5KCdnZXQnKSBpcyBm
YWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2Jh
bCwgJ0ludDhBcnJheScpLmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29y
a2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0ludDhBcnJheScp
LmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihnbG9iYWwsICdJbnQ4QXJyYXknKS5jb25maWd1cmFibGUgaXMgdHJ1ZQogUEFT
UyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3Nh
Z2VDaGFubmVsJykudmFsdWUgaXMgTWVzc2FnZUNoYW5uZWwKIFBBU1MgW1dvcmtlcl0gT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdNZXNzYWdlQ2hhbm5lbCcpLmhhc093
blByb3BlcnR5KCdnZXQnKSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ01lc3NhZ2VDaGFubmVsJykuaGFzT3duUHJvcGVydHko
J3NldCcpIGlzIGZhbHNlCkBAIC03OSwyNiArNDQsNiBAQCBQQVNTIFtXb3JrZXJdIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyCiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoZ2xvYmFsLCAnVVJMJykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCiBQ
QVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVVJM
JykuZW51bWVyYWJsZSBpcyBmYWxzZQogUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VSTCcpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtX
b3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDE2QXJy
YXknKS52YWx1ZSBpcyBVaW50MTZBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQxNkFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dl
dCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoZ2xvYmFsLCAnVWludDE2QXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgnc2V0JykgaXMgZmFsc2UK
LVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdV
aW50MTZBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MTZBcnJheScpLmNvbmZpZ3VyYWJs
ZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnVWludDMyQXJyYXknKS52YWx1ZSBpcyBVaW50MzJBcnJheQotUEFTUyBbV29ya2Vy
XSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQzMkFycmF5Jyku
aGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDMyQXJyYXknKS5oYXNPd25Qcm9wZXJ0
eSgnc2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihnbG9iYWwsICdVaW50MzJBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBBU1Mg
W1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50MzJB
cnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScpLnZhbHVlIGlzIFVpbnQ4QXJy
YXkKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWws
ICdVaW50OEFycmF5JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3Jr
ZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhBcnJheScp
Lmhhc093blByb3BlcnR5KCdzZXQnKSBpcyBmYWxzZQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4QXJyYXknKS5lbnVtZXJhYmxlIGlz
IGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xv
YmFsLCAnVWludDhBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCi1QQVNTIFtXb3JrZXJdIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXkn
KS52YWx1ZSBpcyBVaW50OENsYW1wZWRBcnJheQotUEFTUyBbV29ya2VyXSBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ1VpbnQ4Q2xhbXBlZEFycmF5JykuaGFzT3duUHJv
cGVydHkoJ2dldCcpIGlzIGZhbHNlCi1QQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZ2xvYmFsLCAnVWludDhDbGFtcGVkQXJyYXknKS5oYXNPd25Qcm9wZXJ0eSgn
c2V0JykgaXMgZmFsc2UKLVBBU1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihnbG9iYWwsICdVaW50OENsYW1wZWRBcnJheScpLmVudW1lcmFibGUgaXMgZmFsc2UKLVBB
U1MgW1dvcmtlcl0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdVaW50
OENsYW1wZWRBcnJheScpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCiBQQVNTIFtXb3JrZXJdIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29ja2V0JykudmFsdWUgaXMg
V2ViU29ja2V0CiBQQVNTIFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
Z2xvYmFsLCAnV2ViU29ja2V0JykuaGFzT3duUHJvcGVydHkoJ2dldCcpIGlzIGZhbHNlCiBQQVNT
IFtXb3JrZXJdIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnV2ViU29j
a2V0JykuaGFzT3duUHJvcGVydHkoJ3NldCcpIGlzIGZhbHNlCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2Vw
dGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1o
dWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2
ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
QXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZAorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmct
bGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJy
YXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1h
bGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFy
cmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxh
cmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXIt
SW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1J
bnQ4QXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJn
ZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1sYXJnZS1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZl
ZC1idWZmZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWJ1ZmZlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4
QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmct
bGl2ZWQtYnVmZmVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1sb25nLWxpdmVkLWJ1ZmZlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2
ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2
ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXkt
YWxsb2MtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0FycmF5QnVmZmVyLUludDhB
cnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhB
cnJheS1hbGxvYy1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvQXJyYXlCdWZmZXItSW50
OEFycmF5LWFsbG9jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9y
ZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0lu
dDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXct
YWxsb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYworCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1JbnQ4QXJyYXktdmll
dy1hbGxvYy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0ludDMyQXJyYXktSW50OEFycmF5LXZpZXctYWxsb2MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50MzJB
cnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxs
b2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL0ludDMyQXJyYXktYWxsb2MtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYworCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1odWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZQorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1h
bGxvYy1odWdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtaHVnZS1sb25nLWxpdmVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQz
MkFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5
LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1odWdlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtaHVn
ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDMy
QXJyYXktYWxsb2MtaHVnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWh1Z2Uu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5
LWFsbG9jLWxhcmdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxhcmdlLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9JbnQzMkFy
cmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxp
dmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdy
ZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0ludDMyQXJy
YXktYWxsb2MtbGFyZ2UtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sYXJnZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9j
LWxhcmdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
SW50MzJBcnJheS1hbGxvYy1sYXJnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9j
LWxhcmdlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmct
bGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2
ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFsbG9jLWxvbmct
bGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MzJBcnJheS1hbGxvYy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQzMkFycmF5LWFs
bG9jLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50
MzJBcnJheS1hbGxvYy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWh1Z2UtbG9uZy1saXZlZC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5
QnVmZmVyLUludDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUlu
dDhBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwKTsKKwordmFyIG4gPSAxMDAwMDsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBhcnJheVsoaSAvIChuIC8gYXJyYXku
bGVuZ3RoKSkgfCAwXSA9IG5ldyBJbnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKDEwMDAwMCkpOwor
fQorCitmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFy
cmF5W2ldLmxlbmd0aCAhPSAxMDAwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5
IGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKKyAgICBpZiAoYXJyYXlbaV0uYnVmZmVyLmJ5
dGVMZW5ndGggIT0gMTAwMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBhcnJheSBidWZm
ZXIgbGVuZ3RoOiAiICsgYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJh
eS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxh
cmdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25n
LWxpdmVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACit2YXIgYXJyYXkgPSBuZXcg
QXJyYXkoMTAwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKQorICAgIGFy
cmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMTAw
MCkpOworCitmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYg
KGFycmF5W2ldLmxlbmd0aCAhPSAxMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBsZW5n
dGg6ICIgKyBhcnJheVtpXS5sZW5ndGg7CisgICAgaWYgKGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVu
Z3RoICE9IDEwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGJ1ZmZlci5ieXRlTGVuZ3Ro
OiAiICsgYXJyYXlbaV0uYnVmZmVyLmJ5dGVMZW5ndGg7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1s
b25nLWxpdmVkLWJ1ZmZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL0FycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sb25nLWxpdmVk
LWJ1ZmZlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtYnVmZmVy
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgx
MDAwMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAl
IGFycmF5Lmxlbmd0aF0gPSBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigxMCkpLmJ1ZmZl
cjsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIGlmIChh
cnJheVtpXS5ieXRlTGVuZ3RoICE9IDEwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBieXRl
TGVuZ3RoOiAiICsgYXJyYXlbaV0uYnl0ZUxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvQXJy
YXlCdWZmZXItSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMCk7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNzAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJ
bnQ4QXJyYXkobmV3IEFycmF5QnVmZmVyKDEwKSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJy
YXkubGVuZ3RoOyArK2kpIHsKKyAgICBpZiAoYXJyYXlbaV0ubGVuZ3RoICE9IDEwKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCBsZW5ndGg6ICIgKyBhcnJheVtpXS5sZW5ndGg7CisgICAgaWYg
KGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoICE9IDEwKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCBidWZmZXIuYnl0ZUxlbmd0aDogIiArIGFycmF5W2ldLmJ1ZmZlci5ieXRlTGVuZ3RoOwor
fQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1
ZmZlci1JbnQ4QXJyYXktYWxsb2MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9BcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MuanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Fy
cmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
Citmb3IgKHZhciBpID0gMDsgaSA8IDcwMDAwOyArK2kpCisgICAgbmV3IEludDhBcnJheShuZXcg
QXJyYXlCdWZmZXIoMTApKTsKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9JbnQzMkFycmF5LUludDhBcnJheS12aWV3LWFsbG9jLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1J
bnQ4QXJyYXktdmlldy1hbGxvYy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxvYy5q
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitmb3IgKHZhciBpID0gMDsgaSA8IDMwMDAw
OyArK2kpIHsKKyAgICB2YXIgYXJyYXkxID0gbmV3IEludDMyQXJyYXkoMTApOworICAgIHZhciBh
cnJheTIgPSBuZXcgSW50OEFycmF5KGFycmF5MS5idWZmZXIpOworfQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtaHVnZS1s
b25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJy
YXktYWxsb2MtaHVnZS1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
Cit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMCk7CisKK3ZhciBuID0gMTAwMDA7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgYXJyYXlbKGkgLyAobiAvIGFycmF5Lmxlbmd0
aCkpIHwgMF0gPSBuZXcgSW50MzJBcnJheSgxMDAwMDApOworfQorCitmb3IgKHZhciBpID0gMDsg
aSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgaWYgKGFycmF5W2ldLmxlbmd0aCAhPSAxMDAw
MDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5W2ld
Lmxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvSW50MzJBcnJheS1hbGxvYy1odWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1odWdlLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQz
MkFycmF5LWFsbG9jLWh1Z2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgbmV3IEludDMyQXJyYXkoMTAwMDAwMCk7CisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJh
eS1hbGxvYy1sYXJnZS1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxp
dmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOSBAQAordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMDAwKTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5Lmxlbmd0aF0g
PSBuZXcgSW50MzJBcnJheSgxMDAwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5n
dGg7ICsraSkgeworICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTAwMCkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOworfQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFs
bG9jLWxhcmdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sYXJnZS5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1s
YXJnZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitmb3IgKHZhciBpID0gMDsgaSA8
IDUwMDA7ICsraSkKKyAgICBuZXcgSW50MzJBcnJheSgxMDAwMCk7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZl
ZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25n
LWxpdmVkLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3ZhciBhcnJheSA9IG5ldyBB
cnJheSgxMDAwMDApOworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDA7ICsraSkKKyAgICBh
cnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQzMkFycmF5KDEwKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIGlmIChhcnJheVtpXS5sZW5ndGgg
IT0gMTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5
W2ldLmxlbmd0aDsKK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvSW50MzJBcnJheS1hbGxvYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MuanMJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXkt
YWxsb2MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorZm9yICh2YXIgaSA9IDA7IGkg
PCAyMDAwMDA7ICsraSkKKyAgICBuZXcgSW50MzJBcnJheSgxMCk7CkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9qcy9jb25zdHJ1Y3Rvci1sZW5ndGgtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2pzL2NvbnN0cnVjdG9y
LWxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDA5MCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2pzL2NvbnN0cnVjdG9yLWxlbmd0aC1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTExLDE4ICsxMSwxOCBAQCBQQVNTIENsb3NlRXZlbnQubGVuZ3RoIGlzIDEK
IFBBU1MgQ3VzdG9tRXZlbnQubGVuZ3RoIGlzIDEKIEZBSUwgRE9NRm9ybURhdGEubGVuZ3RoIHNo
b3VsZCBiZSAwLiBUaHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFy
aWFibGU6IERPTUZvcm1EYXRhCiBQQVNTIERPTVBhcnNlci5sZW5ndGggaXMgMAotUEFTUyBEYXRh
Vmlldy5sZW5ndGggaXMgMQorUEFTUyBEYXRhVmlldy5sZW5ndGggaXMgMwogUEFTUyBFcnJvckV2
ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIEV2ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIEV2ZW50U291cmNl
Lmxlbmd0aCBpcyAxCi1QQVNTIEZsb2F0MzJBcnJheS5sZW5ndGggaXMgMQotUEFTUyBGbG9hdDY0
QXJyYXkubGVuZ3RoIGlzIDEKK1BBU1MgRmxvYXQzMkFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIEZs
b2F0NjRBcnJheS5sZW5ndGggaXMgMwogUEFTUyBGaWxlUmVhZGVyLmxlbmd0aCBpcyAwCiBGQUlM
IEZpbGVSZWFkZXJTeW5jLmxlbmd0aCBzaG91bGQgYmUgMC4gVGhyZXcgZXhjZXB0aW9uIFJlZmVy
ZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBGaWxlUmVhZGVyU3luYwogUEFTUyBIYXNo
Q2hhbmdlRXZlbnQubGVuZ3RoIGlzIDEKLVBBU1MgSW50MTZBcnJheS5sZW5ndGggaXMgMQotUEFT
UyBJbnQzMkFycmF5Lmxlbmd0aCBpcyAxCi1QQVNTIEludDhBcnJheS5sZW5ndGggaXMgMQorUEFT
UyBJbnQxNkFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIEludDMyQXJyYXkubGVuZ3RoIGlzIDMKK1BB
U1MgSW50OEFycmF5Lmxlbmd0aCBpcyAzCiBGQUlMIEludGVudC5sZW5ndGggc2hvdWxkIGJlIDMu
IFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogSW50
ZW50CiBQQVNTIE1lZGlhQ29udHJvbGxlci5sZW5ndGggaXMgMAogRkFJTCBNZWRpYVN0cmVhbS5s
ZW5ndGggc2hvdWxkIGJlIDAuIFRocmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3Qg
ZmluZCB2YXJpYWJsZTogTWVkaWFTdHJlYW0KQEAgLTM4LDEwICszOCwxMCBAQCBQQVNTIFNoYXJl
ZFdvcmtlci5sZW5ndGggaXMgMQogUEFTUyBTdG9yYWdlRXZlbnQubGVuZ3RoIGlzIDEKIFBBU1Mg
VGV4dFRyYWNrQ3VlLmxlbmd0aCBpcyAzCiBQQVNTIFRyYWNrRXZlbnQubGVuZ3RoIGlzIDEKLVBB
U1MgVWludDE2QXJyYXkubGVuZ3RoIGlzIDEKLVBBU1MgVWludDMyQXJyYXkubGVuZ3RoIGlzIDEK
LVBBU1MgVWludDhBcnJheS5sZW5ndGggaXMgMQotUEFTUyBVaW50OENsYW1wZWRBcnJheS5sZW5n
dGggaXMgMQorUEFTUyBVaW50MTZBcnJheS5sZW5ndGggaXMgMworUEFTUyBVaW50MzJBcnJheS5s
ZW5ndGggaXMgMworUEFTUyBVaW50OEFycmF5Lmxlbmd0aCBpcyAzCitQQVNTIFVpbnQ4Q2xhbXBl
ZEFycmF5Lmxlbmd0aCBpcyAzCiBQQVNTIFdlYkdMQ29udGV4dEV2ZW50Lmxlbmd0aCBpcyAxCiBQ
QVNTIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmxlbmd0aCBpcyAxCiBQQVNTIFdlYktpdENTU01hdHJp
eC5sZW5ndGggaXMgMApJbmRleDogTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rl
c3RfZmlsZXMvY29uZm9ybWFuY2UvdHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVz
L2NvbmZvcm1hbmNlL3R5cGVkYXJyYXlzL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24g
MTU0MDkwKQorKysgTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvdHlwZWRhcnJheXMvYXJyYXktdW5pdC10ZXN0cy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksMjYgKzE0OSwxMyBAQCBmdW5jdGlvbiB0ZXN0SW5oZXJpdGFuY2VIaWVyYXJj
aHkoKSB7CiAKICAgdHJ5IHsKICAgICB2YXIgZm9vID0gQXJyYXlCdWZmZXJWaWV3OwotICAgIHRl
c3RQYXNzZWQoJ0FycmF5QnVmZmVyVmlldyBkb2VzIG5vdCBoYXZlIFtOb0ludGVyZmFjZU9iamVj
dF0gZXh0ZW5kZWQgYXR0cmlidXRlIGFuZCBzaG91bGQgYmUgZGVmaW5lZCcpOwotCi0gICAgc2hv
dWxkQmUoJ25ldyBJbnQ4QXJyYXkoMSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1
ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDhBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVm
ZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBVaW50OENsYW1wZWRBcnJheSgx
KSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyVmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25l
dyBJbnQxNkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLSAg
ICBzaG91bGRCZSgnbmV3IFVpbnQxNkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3
JywgJ3RydWUnKTsKLSAgICBzaG91bGRCZSgnbmV3IEludDMyQXJyYXkoMSkgaW5zdGFuY2VvZiBB
cnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCduZXcgVWludDMyQXJyYXko
MSkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlclZpZXcnLCAndHJ1ZScpOwotICAgIHNob3VsZEJlKCdu
ZXcgRmxvYXQzMkFycmF5KDEpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsK
LSAgICBzaG91bGRCZSgnbmV3IEZsb2F0NjRBcnJheSgxKSBpbnN0YW5jZW9mIEFycmF5QnVmZmVy
VmlldycsICd0cnVlJyk7Ci0gICAgc2hvdWxkQmUoJ25ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZm
ZXIoOCkpIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJWaWV3JywgJ3RydWUnKTsKLQotICAgIHNob3Vs
ZFRocm93VHlwZUVycm9yKGZ1bmN0aW9uKCkgeyBuZXcgQXJyYXlCdWZmZXJWaWV3KCkgfSwgIm5l
dyBBcnJheUJ1ZmZlclZpZXcoKSIpOworICAgIHRlc3RGYWlsZWQoIkFycmF5QnVmZmVyVmlldyBz
aG91bGQgYmUgdW5kZWZpbmVkIGJ1dCBpcyBkZWZpbmVkIik7CiAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICB0ZXN0RmFpbGVkKCdBcnJheUJ1ZmZlclZpZXcgZG9lcyBub3QgaGF2ZSBbTm9JbnRlcmZhY2VP
YmplY3RdIGV4dGVuZGVkIGF0dHJpYnV0ZSBidXQgd2FzIG5vdCBkZWZpbmVkJyk7CisgICAgdGVz
dFBhc3NlZCgiQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSB1bmRlZmluZWQgYW5kIGlzIik7CiAg
IH0KIAogICAvLyBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUga2luZCBvZiB2aWV3IHRoYXQg
aW5oZXJpdHMgZnJvbSBhbm90aGVyCi0gIHNob3VsZEJlKCduZXcgVWludDhDbGFtcGVkQXJyYXko
MSkgaW5zdGFuY2VvZiBVaW50OEFycmF5JywgJ3RydWUnKTsKKyAgc2hvdWxkQmUoJ25ldyBVaW50
OENsYW1wZWRBcnJheSgxKSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXknLCAnZmFsc2UnKTsKIH0KIAog
Ly8KSW5kZXg6IExheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlL3R5cGVkYXJyYXlzL2RhdGEtdmlldy10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
dHlwZWRhcnJheXMvZGF0YS12aWV3LXRlc3QuaHRtbAkocmV2aXNpb24gMTU0MDkwKQorKysgTGF5
b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvdHlw
ZWRhcnJheXMvZGF0YS12aWV3LXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDkgKzI3
MCw5IEBAIGZ1bmN0aW9uIHJ1bkNvbnN0cnVjdG9yVGVzdHMoKQogICAgIC8vIFVzZSB0cnkvY2F0
Y2ggaW5zdGVhZCBvZiBjYWxsaW5nIHNob3VsZFRocm93IHRvIGF2b2lkIGRpZmZlcmVudCBleGNl
cHRpb24gbWVzc2FnZSBiZWluZyByZXBvcnRlZCBmcm9tIGRpZmZlcmVudCBwbGF0Zm9ybS4KICAg
ICB0cnkgewogICAgICAgICBUZXN0RXZhbChleHByKTsKLSAgICAgICAgdGVzdEZhaWxlZChleHBy
ICsgIiBkb2VzIG5vdCB0aHJvdyBleGNlcHRpb24iKTsKKyAgICAgICAgdGVzdFBhc3NlZChleHBy
ICsgIiB3b3JrcyIpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgdGVzdFBhc3NlZChleHBy
ICsgIiB0aHJldyBleGNlcHRpb24iKTsKKyAgICAgICAgdGVzdEZhaWxlZChleHByICsgIiB0aHJl
dyBleGNlcHRpb24iKTsKICAgICB9CiAKICAgICBkZWJ1ZygiIik7Cg==
</data>
<flag name="commit-queue"
          id="230745"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>